Edwin Quai Hoi
Edwin Quai Hoi

Reputation: 121

EclipseLink JPA in WAS Liberty Profile

Has anyone been able to get the EclipseLink JPA povider working in WAS Liberty Profile with Container Managed Transactions? I have configured my server.xml file with the JPA Container setting to override the default OpenJPA implementations however this causes a side effect where by the EntityManager no longer participates in a Container transaction when accessed through an EJB that has a transaction propagation annotation.

I also tried setting the "eclipselink.target-server" property to "WebSpeher_7" however when I do this I get a ClassNotFoundException on the com.ibm.ws.Transaction.TransactionManagerFactory class.

Upvotes: 2

Views: 2000

Answers (2)

Salvador Almaraz
Salvador Almaraz

Reputation: 21

I had to change many things with liberty 16.0.0.2, Spring 4.X and EclipseLink 5.2.X

I removed the persistence.xml file and changed the spring xml configuration to:

<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>

And for 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>

Upvotes: 0

FyreWyld
FyreWyld

Reputation: 141

Good afternoon. This looks like you're hitting Bug 407279 (https://bugs.eclipse.org/bugs/show_bug.cgi?id=407279).

You can work around this issue by modifying org.eclipse.persistence.transaction.was.WebSphereTransactionController with the following change:

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";

Hope this helps! Be sure to grab EclipseLink 2.5.2 as that has another important change (Bug 412627) in order to work with Liberty!

Upvotes: 4

Related Questions