2016-05-04 13 views
1

最近私が働いている他の開発者は、Hibernateの依存関係を3からアップグレードしましたか? (おそらく3.5?)から5.0。 DBCPが検出した接続リークが発生した直後に気付きました。私は原因を診断しようとしていた。Spring 4.2とHibernate 5.0(JPAインタフェース)を持つJTA

私もSpringをアップグレードしようと決めました。それは無視されていました。3.0.5から4.2.5へのアップグレードに関連するすべてのjarファイルを置き換えました。見つけ出す。

JTAのJOTMを使用し、JARのMANIFEST.MFファイルに従って、現在バージョン2.0.11を使用しています。私は次のことを見ているこのバージョンでは、更新されたHibernateと春と組み合わせ、:

org.hibernate.engine.transaction.jta.platform.spi.JtaPlatformException: Could not obtain JOTM transaction manager instance 
     at org.hibernate.engine.transaction.jta.platform.internal.JOTMJtaPlatform.locateTransactionManager(JOTMJtaPlatform.java:31) 
     at org.hibernate.engine.transaction.jta.platform.internal.AbstractJtaPlatform.retrieveTransactionManager(AbstractJtaPlatform.java:92) 
     at org.hibernate.engine.transaction.jta.platform.internal.AbstractJtaPlatform.getTransactionManager(AbstractJtaPlatform.java:98) 
     at org.hibernate.engine.transaction.jta.platform.internal.TransactionManagerBasedSynchronizationStrategy.canRegisterSynchronization(TransactionManagerBasedSynchronizationStrategy.java:39) 
     at org.hibernate.engine.transaction.jta.platform.internal.AbstractJtaPlatform.canRegisterSynchronization(AbstractJtaPlatform.java:131) 
     at org.hibernate.resource.transaction.backend.jta.internal.JtaTransactionCoordinatorImpl.pulse(JtaTransactionCoordinatorImpl.java:141) 
     at org.hibernate.resource.transaction.backend.jta.internal.JtaTransactionCoordinatorImpl.<init>(JtaTransactionCoordinatorImpl.java:92) 
     at org.hibernate.resource.transaction.backend.jta.internal.JtaTransactionCoordinatorBuilderImpl.buildTransactionCoordinator(JtaTransactionCoordinatorBuilderImpl.java:28) 
     at org.hibernate.internal.SessionImpl.<init>(SessionImpl.java:274) 
     at org.hibernate.internal.SessionFactoryImpl$SessionBuilderImpl.openSession(SessionFactoryImpl.java:1327) 
     at org.hibernate.jpa.internal.EntityManagerImpl.internalGetSession(EntityManagerImpl.java:133) 
     at org.hibernate.jpa.spi.AbstractEntityManagerImpl.postInit(AbstractEntityManagerImpl.java:174) 
     at org.hibernate.jpa.internal.EntityManagerImpl.<init>(EntityManagerImpl.java:83) 
     at org.hibernate.jpa.internal.EntityManagerFactoryImpl.internalCreateEntityManager(EntityManagerFactoryImpl.java:319) 
     at org.hibernate.jpa.internal.EntityManagerFactoryImpl.createEntityManager(EntityManagerFactoryImpl.java:286) 
     at sun.reflect.GeneratedMethodAccessor399.invoke(Unknown Source) 
     at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
     at java.lang.reflect.Method.invoke(Method.java:606) 
     at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.invokeProxyMethod(AbstractEntityManagerFactoryBean.java:407) 
     at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean$ManagedEntityManagerFactoryInvocationHandler.invoke(AbstractEntityManagerFactoryBean.java:560) 
     at com.sun.proxy.$Proxy243.createEntityManager(Unknown Source) 
     at org.springframework.orm.jpa.EntityManagerFactoryUtils.doGetTransactionalEntityManager(EntityManagerFactoryUtils.java:285) 
     at org.springframework.orm.jpa.SharedEntityManagerCreator$SharedEntityManagerInvocationHandler.invoke(SharedEntityManagerCreator.java:255) 
     at com.sun.proxy.$Proxy271.createQuery(Unknown Source) 
     at com.company.app.persistence.AbstractEntityGroupDAO.getSomething(AbstractEntityGroupDAO.java:80) 
     at com.company.app.servicehealth.StatusServiceDAO.retrieveStatusServices(StatusServiceDAO.java:259) 
     at com.company.app.servicehealth.StatusServiceDAO.queryForStatusServices(StatusServiceDAO.java:255) 
     at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
     at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) 
     at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
     at java.lang.reflect.Method.invoke(Method.java:606) 
     at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:302) 
     at org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:190) 
     at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:157) 
     at org.springframework.transaction.interceptor.TransactionInterceptor$1.proceedWithInvocation(TransactionInterceptor.java:99) 
     at org.springframework.transaction.interceptor.TransactionAspectSupport.invokeWithinTransaction(TransactionAspectSupport.java:281) 
     at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:96) 
     at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179) 
     at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:208) 
     at com.sun.proxy.$Proxy273.queryForStatusServices(Unknown Source) 
     at com.company.app.servicehealth.ServiceHealthStatusImpl$1.doInTransaction(ServiceHealthStatusImpl.java:142) 
     ... 50 more 
Caused by: java.lang.NullPointerException 
     at org.hibernate.engine.transaction.jta.platform.internal.JOTMJtaPlatform.locateTransactionManager(JOTMJtaPlatform.java:26) 
     ... 90 more 

検査時には、これはserviceRegistry()またはserviceRegistry().getService(ClassLoaderService.class)どちらかがnull返しているかのように私には見えます。 (以下は問題の方法の内容です)

public static final String TM_CLASS_NAME = "org.objectweb.jotm.Current"; 
public static final String UT_NAME = "java:comp/UserTransaction"; 

@Override 
protected TransactionManager locateTransactionManager() { 
    try { 
     final Class tmClass = serviceRegistry().getService(ClassLoaderService.class).classForName(TM_CLASS_NAME); 
     final Method getTransactionManagerMethod = tmClass.getMethod("getTransactionManager"); 
     return (TransactionManager) getTransactionManagerMethod.invoke(null, (Object[]) null); 
    } 
    catch (Exception e) { 
     throw new JtaPlatformException("Could not obtain JOTM transaction manager instance", e); 
    } 
} 

どうすればこの問題を解決できますか?私はSpringにとって全く新しいです。私が言うことは、HibernateのSessionFactoryではなくJPA(EntityManager)を使用しているということです。

答えて

0

音が依存関係の問題のようです。 POM依存関係階層(Mavenを使用することを前提としています)では、クラスパスに複数バージョンのHibernateがあるかどうかを確認してください。 5.xの代わりにHibernate 4.3.11.Finalを試してみることをお勧めします。

+0

悲しいことに、これは問題ではありません。 IvyやMavenのような依存関係管理システムは使用していませんが、webappのlibフォルダを見ると、Hibernateのバージョン5だけが表示されます。 AFAIK SQL Server 2012をサポートできるようにするには、バージョン5が必要です。 – agent154

関連する問題