【问题标题】:Transactions in WebLogic OSGiWebLogic OSGi 中的事务
【发布时间】:2014-10-05 05:26:42
【问题描述】:

我正在构建一个部署在 WebLogic 中的 Web 应用程序,它还使用许多 OSGi 模块,在我的 Web 应用程序部署期间部署在 WebLogic OSGi (Felix) 中。

根据WebLogic's OSGi documentation,我可以选择在 OSGi 内部公开我在 WebLogic 中创建的任何数据源,以便从我的包中使用它们。因此,我创建了一个数据源并在我的 OSGi 包中使用了 persistence.xml 来查找它并在我的 OSGi 服务中注入(使用蓝图)一个 EntityManager 以使用它。我的 OSGi 包的配置如下所示:

persistence.xml:

<persistence-unit name="mypu" transaction-type="JTA">
        <jta-data-source>osgi:service/jdbc/test</jta-data-source>

        <class>com.test.impl.model.TestEntity</class>
</persistence-unit>

blueprint.xml

<bean id="TestServiceImpl" class="com.test.impl.TestServiceImpl">
        <jpa:context property="em" unitname="mypu" />
        <tx:transaction method="*" value="Required" />
</bean>
<service id="TestService" ref="TestServiceImpl"
        interface="com.test.api.TestService" />

我还部署了 OSGi Aries 蓝图、Aries JPA、Aries 事务和 OpenJPA。

我的问题是,尽管此配置在我的服务中正确注入了 EntityManager,并且我可以使用它从数据库中读取数据,但它不会围绕我的服务方法创建事务,因此我无法将数据写入数据库。

我知道问题在于 Aries 事务侦听 javax.sql.XADataSource 的实现,然后将其包装在 XADataSourceEnlistingWrapper 中并公开为 javax.sql.DataSource,以便我的包使用。然而,在我的例子中,WebLogic 创建的数据源是 weblogic.jdbc.common.internal.RmiDataSource,它没有实现 javax.sql.XADataSource,所以 Aries 不会选择它。

我对问题的理解正确吗?为了在 WebLogic 的 OSGi 中进行 XA 事务,我需要做什么?

编辑: 我仍然无法在我的 OSGi 包中使用事务,除非我在已经存在的事务中调用 OSGi 服务,从我的 Web 应用程序开始,其中 Web 应用程序还将数据写入数据库。在这种情况下,OSGi 服务被正确地登记在事务中并且数据被持久化。然而,这并不是我的问题的解决方案,因为每次我进行 OSGi 服务调用时,我都无法将数据从我的 Web 应用程序写入数据库。

【问题讨论】:

    标签: jpa transactions osgi weblogic weblogic12c


    【解决方案1】:

    出于某种原因,将持久性提供程序从 OpenJPA 更改为 Hibernate 解决了这个问题。为了使用 Hibernate (4.2.15) 作为持久性提供程序,需要对我的设置进行以下修改:

    1. 包含以下包作为DynamicImport-Package:org.hibernate.proxy,javassist.util.proxy,weblogic.jndi前两个是Hibernate动态增强所必需的,而第三个似乎是在WebLogic的OSGi中使用Hibernate 4.2.x时需要的(如果使用Hibernate则不需要4.3.x),但是目前我不完全确定为什么。
    2. 使用 Aries JPA 容器 1.0.1 来克服this Aries issue with Hibernate

    我仍然很想知道是否有人知道为什么事务使用 Hibernate 而不是 OpenJPA,以及是否有一些配置允许我也使用 OpenJPA 使用事务。

    【讨论】:

      猜你喜欢
      • 2012-06-17
      • 2016-06-29
      • 2013-10-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-05-23
      • 2014-02-22
      • 1970-01-01
      相关资源
      最近更新 更多