Mike123
Mike123

Reputation: 21

Weblogic 12c with Hibernate 4.2.17 JTA error

I tried to migrate a project from GlassFish to Weblogic 12c.

I use Hibernate 4.2.17 and I got a following error when my code is invoked to create the EntityManager in the Container.

Caused By: java.lang.NullPointerException
    at org.hibernate.engine.transaction.internal.jta.CMTTransactionFactory.isJoinableJtaTransaction(CMTTransactionFactory.java:63)
    at org.hibernate.engine.transaction.internal.jta.CMTTransactionFactory.isJoinableJtaTransaction(CMTTransactionFactory.java:39)
    at org.hibernate.engine.transaction.internal.TransactionCoordinatorImpl.isTransactionJoinable(TransactionCoordinatorImpl.java:311)
    at org.hibernate.ejb.AbstractEntityManagerImpl.joinTransaction(AbstractEntityManagerImpl.java:1215)
    at org.hibernate.ejb.AbstractEntityManagerImpl.postInit(AbstractEntityManagerImpl.java:178)
    at org.hibernate.ejb.EntityManagerImpl.<init>(EntityManagerImpl.java:89)
    at org.hibernate.ejb.EntityManagerFactoryImpl.createEntityManager(EntityManagerFactoryImpl.java:193)
    at org.hibernate.ejb.EntityManagerFactoryImpl.createEntityManager(EntityManagerFactoryImpl.java:188)
    at weblogic.persistence.PersistenceContextWrapper.<init>(PersistenceContextWrapper.java:26)
    at weblogic.persistence.TransactionalEntityManagerProxyImpl.newPersistenceContext(TransactionalEntityManagerProxyImpl.java:152)
    at weblogic.persistence.TransactionalEntityManagerProxyImpl.getPersistenceContext(TransactionalEntityManagerProxyImpl.java:128)
    at weblogic.persistence.BasePersistenceContextProxyImpl.invoke(BasePersistenceContextProxyImpl.java:94)
    at weblogic.persistence.TransactionalEntityManagerProxyImpl.invoke(TransactionalEntityManagerProxyImpl.java:164)
    at weblogic.persistence.BasePersistenceContextProxyImpl.invoke(BasePersistenceContextProxyImpl.java:86)
    at com.sun.proxy.$Proxy346.createNamedQuery(Unknown Source)
    at rpm.jpa.crudservice.RpmJPAServiceImpl.findByNamedQuerySingle(RpmJPAServiceImpl.java:302)

persistence.xml :

<persistence-unit name="My_JPA_UNIT" transaction-type="JTA">
    <provider>org.hibernate.ejb.HibernatePersistence</provider>
    <jta-data-source>MyDS</jta-data-source>

    <class>....</class>
    <class>....</class>

    <properties>
        <property name="hibernate.generate_statistics" value="false" />
        <property name="hibernate.show_sql" value="true" />
        <property name="hibernate.level" value="ALL" />
        <property name="hibernate.logging.level" value="ALL" />
        <property name="hibernate.dialect" value="org.hibernate.dialect.SQLServer2008Dialect" />

        <property name="hibernate.transaction.jta.platform" value="org.hibernate.engine.transaction.jta.platform.internal.WebLogicJtaPlatform" />   

    </properties>
</persistence-unit>

My code:

    @Stateless
    @Local(RpmJPAService.class)
    @TransactionAttribute(TransactionAttributeType.MANDATORY)
    public class RpmJPAServiceImpl implements RpmJPAService
    {    
        @PersistenceContext(unitName = "My_JPA_UNIT")
        EntityManager em;

        @SuppressWarnings("unchecked")
        @Override
        public <T>T findByNamedQuerySingle(final String queryName, final Object... parameters) throws PsAccessException
        {
            logQueryNameAndParameters(queryName, parameters);
            try
            {

    (line 302)  final Query q = setQueryParameters(em.createNamedQuery(queryName), parameters);

                return (T) q.getSingleResult();
            }
            catch(final NoResultException nre)
            {
                return null;
            }
            catch(final PersistenceException pe)
            {
                throw handleQuerySingleException(pe);
            }
        }
    }

Anyone has experienced this error ?

Upvotes: 0

Views: 1450

Answers (1)

Mike123
Mike123

Reputation: 21

By debugging in Hibernate 4.2.17, I found that WeblogicJtaPlatform can not be loaded correctly, something related to ClassLoader of Hibernate 4.2.17 in Weblogic. (Also the package name of hibernate.transaction.jta.platform implementation class is different)

I upgraded my application to Hibernate 4.3.10 with some changes in persistence.xml such as

   <provider>org.hibernate.jpa.HibernatePersistenceProvider</provider>

   <property name="hibernate.transaction.jta.platform" value="Weblogic" />

And the problem with WebLogicJtaPlatform is resolved now.

Upvotes: 2

Related Questions