I Frühjahr leite 4.1.4, 4.3.8 Hibernate, atomikos 3.9.3, Java 8, tomcat 8.org.hibernate.HibernateException: Nein TransactionManagerLookup auf Hibernate angegeben Upgrade
Ich sehe die oben genannte Ausnahme in localhost .log, wenn ich meinen Server starte, aber ich bin mir nicht sicher, wo ich den TransactionManagerLookup konfigurieren soll, abgesehen von dem, wo ich ihn bereits konfiguriere. Dies geschah nicht vor der Aktualisierung des Ruhezustands, so dass es sich höchstwahrscheinlich um ein Versionierungsproblem handelt. Könnte jemand bitte helfen?
FYI: catalina.out zeigt nichts nützliches. Nur:
SEVERE [localhost-startStop-1] org.apache.catalina.core.StandardContext.startInternal Error listenerStart
SEVERE [localhost-startStop-1] org.apache.catalina.core.StandardContext.startInternal Context [] startup failed due to previous errors
Meine appContext definiert:
<prop key="hibernate.transaction.factory_class">org.hibernate.engine.transaction.internal.jta.CMTTransactionFactory</prop>
<prop key="hibernate.transaction.manager_lookup_class">com.atomikos.icatch.jta.hibernate3.TransactionManagerLookup</prop>
und die volle Stack-Trace ist:
22-Jan-2015 10:07:25.734 SEVERE [localhost-startStop-1] org.apache.catalina.core.StandardContext.listenerStart Exception sending context initialized event to listener instance of class com.my.app.web.InitializerListener
org.hibernate.HibernateException: No TransactionManagerLookup specified
at org.hibernate.context.internal.JTASessionContext.currentSession(JTASessionContext.java:85)
at org.hibernate.internal.SessionFactoryImpl.getCurrentSession(SessionFactoryImpl.java:1014)
at com.my.app.dao.AbstractMyDAO.currentSession(AbstractMyDAO.java:116)
at com.my.app.dao.AbstractMyDAO.criteria(AbstractMyDAO.java:86)
at com.my.app.dao.AbstractMyDAO.count(AbstractMyDAO.java:79)
at com.my.app.initialize.MyInitializerImpl.initializeApplicaiton(MyInitializerImpl.java:69)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:483)
at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:317)
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:207)
at com.sun.proxy.$Proxy220.initializeApplicaiton(Unknown Source)
at com.my.app.web.MyInitializerListener.contextInitialized(MyInitializerListener.java:42)
at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:4772)
at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5196)
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:725)
at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:701)
at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:714)
at org.apache.catalina.startup.HostConfig.deployWAR(HostConfig.java:917)
at org.apache.catalina.startup.HostConfig$DeployWar.run(HostConfig.java:1701)
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
at java.util.concurrent.FutureTask.run(FutureTask.java:266)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
at java.lang.Thread.run(Thread.java:745)
EDIT: Der Atomikos Transaktionsmanager als solche
konfiguriert ist<bean id="atomikosTransactionManager" class="com.atomikos.icatch.jta.UserTransactionManager" init-method="init" destroy-method="close">
<property name="forceShutdown" value="true" />
<!-- in secs -->
<property name="transactionTimeout" value="300"/>
</bean>
<bean id="atomikosUserTransaction" class="com.atomikos.icatch.jta.UserTransactionImp">
<!-- in secs -->
<property name="transactionTimeout" value="300" />
</bean>
<bean id="transactionManager" class="org.springframework.transaction.jta.JtaTransactionManager">
<property name="transactionManager" ref="atomikosTransactionManager" />
<property name="userTransaction" ref="atomikosUserTransaction" />
<property name="transactionSynchronizationName" value="SYNCHRONIZATION_ON_ACTUAL_TRANSACTION" />
<property name="allowCustomIsolationLevels" value="true"/>
</bean>
EDIT 2:
Ich denke, ich muss hier ein wenig klären. Ich habe ein DAO-Objekt namens AbstractMyDAO (wie Sie aus dem Stapel sehen können). In diesem Objekt wird eine Sitzung ab Werk definiert
@Autowired
private SessionFactory mySessionFactory;
wenn currentSession der obige Fehler genannt wird ausgelöst, weil Hibernate nicht den Transaktions-Manager-Lookup im Zusammenhang mit dieser Sitzung Fabrik finden.
public Session currentSession() {
return mySessionFactory.getCurrentSession();
}
Diese Sitzung Fabrik ist in meiner app Kontextdatei als solche definiert:
<bean id="mySessionFactory" class="org.springframework.orm.hibernate4.LocalSessionFactoryBean">
<property name="dataSource">
<ref bean="myDataSource" />
</property>
<property name="annotatedClasses">
<list>
<value>some values... </value>
...
</list>
</property>
<property name="hibernateProperties">
<props>
<prop key="hibernate.dialect">
${gst.hibernate.dialect}
</prop>
<prop key="query.factory_class">
org.hibernate.hql.ast.ASTQueryTranslatorFactory
</prop>
<prop key="hibernate.max_fetch_depth">3</prop>
<prop key="hibernate.show_sql">${my.hibernate.showsql}</prop>
<prop key="hibernate.cache.use_query_cache">true</prop>
<prop key="hibernate.cache.use_second_level_cache">true</prop>
<prop key="hibernate.cache.use_structured_entries">true</prop>
<prop key="hibernate.cache.region.factory_class">org.hibernate.cache.ehcache.SingletonEhCacheRegionFactory</prop>
<prop key="net.sf.ehcache.configurationResourceName">${ehcache.my.persist.config}</prop>
<prop key="hibernate.connection.isolation">3</prop>
<prop key="connection.release_mode">auto</prop>
<prop key="hibernate.current_session_context_class">jta</prop>
<prop key="hibernate.transaction.factory_class">org.hibernate.engine.transaction.internal.jta.CMTTransactionFactory</prop>
<prop key="hibernate.transaction.manager_lookup_class">com.atomikos.icatch.jta.hibernate3.TransactionManagerLookup</prop>
<prop key="hibernate.search.default.directory_provider">filesystem</prop>
<prop key="hibernate.search.default.indexBase">/var/log/my/lucene/indexes</prop>
</props>
</property>
</bean>
Wie Sie sehen können, kann die Eigenschaft hibernate.transaction.manager_lookup_class definiert wird, aber nicht, wenn die gefunden werden Bean ist erstellt und ich habe keine Ahnung warum. Hat sich die Konfiguration geändert?
EDIT 3: Wenn ich debuggen: final JtaPlatform jtaPlatform = factory() getServiceRegistry() getService (JtaPlatform.class);..
Es gibt eine NoJTAPlatform zurück. Ich denke, das ist mein Problem.
EDIT 4: Es scheint nichts zu sein, das JtaPlatform, die für Kater geeignet ist oder ist ich geistig?
Danke, ich hatte bereits den atomikos transaction manager konfiguriert (siehe edit), aber nicht den Entity Manager. Ich werde es versuchen und berichten :) –
Können Sie mir erklären, warum ich den Entity Manager verwenden müsste? Meine Anwendung hat zuvor ohne diese Komponente funktioniert. Das Problem ist erst nach einem Winterschlaf-Upgrade aufgetreten. Vielen Dank. –
Das liegt daran, dass Hibernate eher eine JPA-Implementierung als ein eigenständiges ORM-Framework ist. Sie können weiterhin die SessionFactory verwenden, aber es ist besser, die Spring 'LocalSessionFactoryBean' zu verwenden, da Sie auch eine automatische Sitzungs- und JDBC-Verbindungsverwaltung erhalten. –