我在Apache Karaf容器上部署了两个OSGi
个捆绑包。假设它们是A和B.A捆绑包是包含所有数据库实体和持久性逻辑的主捆绑包。 B OSGi
包是一个应用程序,它使用A中的方法将一些数据存储到数据库中。捆绑包B还具有CXF
Web服务端点。持久性由OpenJPA
处理。
bundle A中的方法包装实体管理器的persist方法。在bundle B中,有一种方法,它将对象作为参数,在bundle A中定义,并具有持久化数据的方法。当我在bundle B中调用该方法时,一切正常,数据按预期持久存储到数据库中。
问题在于我想要更新B bundle的CXF
端点实现类中的实体,该实体类作为Spring bean公开,并且对包含{{的包A的对象具有OSGi
引用1}}语句,用于查找需要更新的实体。
当我调用find
方法时,实体会正确返回给我,但是当我设置一些新值时,事务不会被提交,数据也不会出现在数据库中。
据我所知,find
功能之一就是当你将persist调用到一个对象时,之后你可以为它设置一些新数据,然后进行所需的事务来更新该实体。它似乎不适用于我的情况。我试图用OpenJPA
注释来注释CXF
端点实现类。但这并不奏效。
也许有人知道问题出在哪里?我是否需要编写在org.springframework.transaction.annotation.Transactional
端点更新我的实体的查询?
答案 0 :(得分:0)
在这种情况下,我建议从春季转向蓝图。如果您查看一下Karaf使用的aries blueprint(例如),您可以从Bundle A中检索DAO,请从Bundle B调用“更改方法”,它将由附加到Bundle的事务管理器保留甲