我OSGi
在 Apache Karaf 容器上部署了两个包。假设它们是 A 和 B。A 包是包含所有数据库实体和持久性逻辑的主包。BOSGi
包是一个应用程序,它使用来自 A 的方法将一些数据存储到数据库中。捆绑 B 还具有CXF
Web 服务端点。持久性由 处理OpenJPA
。
bundle A 中的方法包装了实体管理器的persist 方法。在包 B 中,有一个方法将对象作为参数,该参数在包 A 中定义,并具有持久化数据的方法。当我在捆绑 B 中调用该方法时,一切正常,数据按预期保存到数据库中。
问题是我想更新 B 包的CXF
端点实现类中的一个实体,它作为 Spring bean 公开,并OSGi
引用来自包 A 的对象,其中包含find
查找我需要更新的实体的语句。
当我调用find
方法时,实体会正确返回给我,但是当我设置一些新值时,事务不会被提交并且数据不会出现在数据库中。
据我所知,其中一个OpenJPA
功能是当您调用持久对象时,稍后您可以为其设置一些新数据,并进行所需的事务以更新该实体。它似乎不适用于我的情况。我试图用注释来注释CXF
端点实现类org.springframework.transaction.annotation.Transactional
。但这也不起作用。
也许有人知道问题出在哪里?我是否需要编写查询来更新CXF
端点中的实体?