【问题标题】:OpenJPA persistence between OSGi bundlesOSGi 包之间的 OpenJPA 持久性
【发布时间】: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


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 2020-04-16
    • 1970-01-01
    • 2011-08-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-25
    • 2012-01-08
    • 2013-11-27
    相关资源
    最近更新 更多