Java OSGi捆绑包之间的OpenJPA持久性
我在ApacheKaraf容器上部署了两个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中调用该方法时,一切正常,数据按预期持久化到数据库
OSGi
bundle。假设它们是A和B。A包是包含所有数据库实体和持久性逻辑的主包。BOSGi
捆绑包是一个应用程序,它使用来自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的事务管理器保存。这个问题很难理解。也许您可以提供一些示例代码或图表来说明?