OSJi捆绑包之间的OpenJPA持久性

时间:2012-08-14 12:05:11

标签: java spring osgi openjpa apache-karaf

我在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端点更新我的实体的查询?

1 个答案:

答案 0 :(得分:0)

在这种情况下,我建议从春季转向蓝图。如果您查看一下Karaf使用的aries blueprint(例如),您可以从Bundle A中检索DAO,请从Bundle B调用“更改方法”,它将由附加到Bundle的事务管理器保留甲