【问题标题】:EclipseLink JPA in WAS Liberty ProfileWAS Liberty Profile 中的 EclipseLink JPA
【发布时间】:2014-01-01 12:55:51
【问题描述】:

有没有人能够让 EclipseLink JPA 提供程序在带有容器管理事务的 WAS Liberty Profile 中工作?我已经使用 JPA Container 设置配置了我的 server.xml 文件以覆盖默认的 OpenJPA 实现,但这会导致副作用,即当通过具有事务传播注释的 EJB 访问时,EntityManager 不再参与容器事务。

我还尝试将“eclipselink.target-server”属性设置为“WebSpeher_7”,但是当我这样做时,我在 com.ibm.ws.Transaction.TransactionManagerFactory 类上得到了 ClassNotFoundException。

【问题讨论】:

  • 我想使用 EclipseLink 的原因是它的增强注释允许循环对象图的 JSON/JAXB 序列化,您可以在双向一对多关系中获得这种类型。无论如何,我想出了一种使用默认 OpenJPA 提供程序的方法,但将底层 JAXRS JSON 提供程序更改为 EclipseLink MOXy,这避免了 JSON 序列化期间的无限递归。

标签: java jpa eclipselink websphere-liberty


【解决方案1】:

下午好。看起来您遇到了错误 407279 (https://bugs.eclipse.org/bugs/show_bug.cgi?id=407279)。

您可以通过以下更改修改 org.eclipse.persistence.transaction.was.WebSphereTransactionController 来解决此问题:

public class WebSphereTransactionController extends JTATransactionController {
    // Class and method to execute to obtain the TransactionManager
    protected final static String TX_MANAGER_FACTORY_CLASS = "com.ibm.tx.jta.TransactionManagerFactory";
    // OLD VALUE --> "com.ibm.ws.Transaction.TransactionManagerFactory";

希望这会有所帮助!请务必使用 EclipseLink 2.5.2,因为它还有另一个重要更改(错误 412627),以便与 Liberty 一起使用!

【讨论】:

    【解决方案2】:

    我不得不用 liberty 16.0.0.2、Spring 4.X 和 EclipseLink 5.2.X 改变很多东西

    我删除了 persistence.xml 文件 并将spring xml配置更改为:

    <bean id="transactionManager"
        class="org.springframework.orm.jpa.JpaTransactionManager">
        <property name="entityManagerFactory" ref="entityManagerFactory" />
    </bean>
    
    
    <bean id="entityManagerFactory"
        class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
        <property name="dataSource" ref="datasource" />
        <property name="persistenceUnitName" value="PERSISTENCE_UNIT"></property>
        <property name="jpaVendorAdapter" ref="jpaVendorAdapter" />
        <property name="packagesToScan">
            <list>
                <value>ENTITIES_PACKAGE</value>
            </list>
        </property>
        <property name="jpaPropertyMap">
      <map>
        <entry key="eclipselink.weaving" value="false"/>
      </map>
    </property>
        </bean>
    

    对于 server.xml

    <jpa defaultPersistenceProvider="org.eclipse.persistence.jpa.PersistenceProvider"/>
    
    <featureManager>
        <feature>servlet-3.0</feature>
        <feature>jdbc-4.0</feature>
        <feature>jpa-2.0</feature>
        <feature>localConnector-1.0</feature>
        <feature>jsp-2.2</feature>
    </featureManager>
    

    【讨论】:

    • 如果是最新的 Liberty,您应该选择 jpa-2.1 功能,它启用内置的 EclipseLink 提供程序和 jdbc-4.1。 jpa-2.0基于openJPA,可能会有一些冲突。
    猜你喜欢
    • 1970-01-01
    • 2018-09-28
    • 2015-01-11
    • 1970-01-01
    • 1970-01-01
    • 2014-10-27
    • 2023-03-12
    • 2017-06-30
    • 1970-01-01
    相关资源
    最近更新 更多