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