1

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

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

问题是我想更新 B 包的CXF端点实现类中的一个实体,它作为 Spring bean 公开,并OSGi引用来自包 A 的对象,其中包含find查找我需要更新的实体的语句。

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

据我所知,其中一个OpenJPA功能是当您调用持久对象时,稍后您可以为其设置一些新数据,并进行所需的事务以更新该实体。它似乎不适用于我的情况。我试图用注释来注释CXF端点实现类org.springframework.transaction.annotation.Transactional。但这也不起作用。

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

4

1 回答 1

0

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

于 2012-09-20T20:58:04.223 回答