Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/342.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java OSGi捆绑包之间的OpenJPA持久性_Java_Spring_Osgi_Openjpa_Apache Karaf - Fatal编程技术网

Java OSGi捆绑包之间的OpenJPA持久性

Java OSGi捆绑包之间的OpenJPA持久性,java,spring,osgi,openjpa,apache-karaf,Java,Spring,Osgi,Openjpa,Apache Karaf,我在ApacheKaraf容器上部署了两个OSGibundle。假设它们是A和B。A包是包含所有数据库实体和持久性逻辑的主包。BOSGi捆绑包是一个应用程序,它使用来自A的方法将一些数据存储到数据库中。捆绑包B还具有CXFweb服务端点。持久性由OpenJPA处理 捆绑包A中的方法包装实体管理器的persist方法。在bundle B中有一个方法,该方法将对象作为参数,该参数在bundle a中定义,并具有持久化数据的方法。当我在bundle B中调用该方法时,一切正常,数据按预期持久化到数据库

我在ApacheKaraf容器上部署了两个
OSGi
bundle。假设它们是A和B。A包是包含所有数据库实体和持久性逻辑的主包。B
OSGi
捆绑包是一个应用程序,它使用来自A的方法将一些数据存储到数据库中。捆绑包B还具有
CXF
web服务端点。持久性由
OpenJPA
处理

捆绑包A中的方法包装实体管理器的persist方法。在bundle B中有一个方法,该方法将对象作为参数,该参数在bundle a中定义,并具有持久化数据的方法。当我在bundle B中调用该方法时,一切正常,数据按预期持久化到数据库中

问题是,我想更新B bundle的
CXF
端点实现类中的a实体,该实体作为Springbean公开,并具有对bundle a中包含
find
语句的对象的
OSGi
引用,以查找我需要更新的实体

当我调用
find
方法时,实体会正确返回给我,但当我设置一些新值时,事务不会提交,数据也不会出现在数据库中

据我所知,
OpenJPA
的一个特性是,当您调用persist to一个对象时,稍后您可以为它设置一些新数据,并进行所需的事务以更新该实体。对我来说,这似乎不起作用。我试图用
org.springframework.transaction.annotation.Transactional
注释
CXF
端点实现类。但这并不奏效


也许有人知道问题出在哪里?是否需要编写查询,查询在
CXF
端点中更新我的实体

在这种情况下,我建议从spring切换到blueprint。如果您查看Karaf使用的aries blueprint(例如),您可以从Bundle a中检索例如DAO,从Bundle B调用“changing method”,它将由附加到Bundle a的事务管理器保存。

这个问题很难理解。也许您可以提供一些示例代码或图表来说明?