Wie zu verwenden Atomikos Transaction Essentials mit Hibernate >= 4.3
Wechselte ich aus dem Ruhezustand 4.2 Hibernate 4.3 und mein Projekt nicht mehr funktioniert. Ich bin immer ein
HibernateException: Unable to locate laufende JTA-Transaktion
wenn ich
Session s = sessionFactory.getCurrentSession();
Ich habe erkannt, dass die org.hibernate.die Transaktion.TransactionManagerLookup existiert nicht mehr. Es wurde gelöscht, Hibernate 4.3. Wie sollte ich meine aktuelle Konfiguration?
<hibernate-configuration>
<session-factory>
<property name="connection.datasource">testDS</property>
<property name="current_session_context_class">jta</property>
<property name="transaction.manager_lookup_class">com.atomikos.icatch.jta.hibernate3.TransactionManagerLookup</property>
<property name="transaction.factory_class">org.hibernate.transaction.CMTTransactionFactory</property>
<property name="connection.release_mode">auto</property>
<property name="cache.provider_class">org.hibernate.cache.NoCacheProvider</property>
<property name="hibernate.hbm2ddl.auto">create-drop</property>
<property name="hibernate.show_sql">true</property>
<mapping class="test.entities.Person" />
<mapping class="test.entities.CreditCard" />
<mapping class="test.entities.ExampleRevEntity" />
</session-factory>
InformationsquelleAutor sebplorenz | 2013-12-19
Du musst angemeldet sein, um einen Kommentar abzugeben.
In Hibernate 4.3 die lange veraltet TransactionManagerLookup wurden entfernt. Jetzt die JTA-provider implementieren muss, org.hibernate.Motor.die Transaktion.jta.- Plattform.spi.JtaPlatform. Eine abstrakte Implementierung der JTA-Plattform ist bereits verfügbar, innerhalb von Hibernate nämlich org.hibernate.Motor.die Transaktion.jta.- Plattform.intern.AbstractJtaPlatform. Mit diesem ist es ganz einfach zu schreiben eine JTA-Plattform für Atomikos:
Neben dem Namen des Plattform-Implementierung der Klasse Hinzugefügt werden müssen, um die hibernate-Konfiguration:
Hi Eric, das problem ist, dass Hibernate wird eine neue Instanz erstellen, der JTA-Plattform am Start. Es gibt keinen Weg, um zu injizieren, eine Feder erstellt JTA-Plattform mit seiner Feder erstellt transaction manager in Ruhezustand (AFAIK). Was Sie tun können, ist, dass die Verweise auf die user-Transaktion-manager statisch in die JTA-Plattform. Dann schaffen es alle in den Frühling Kontext vor Hibernate macht ersten Verwendung der JTA-Plattform.
Ich habe rund um den Frühling-injection-problem durch erstellen einer Klasse, die die ApplicationContextAware-Schnittstelle, die appCtx und ändern Sie die AtomikosJtaPlatform Klasse zu Holen, die UserTransaction aus der spring-Kontext jedes mal : @Override protected TransactionManager locateTransactionManager() { return SpringContext.getApplicationContext().getBean("atomikosTransactionManager", UserTransactionManager.class); }
Ich bin versucht, atomikos tm für jbpm-runtime-engine. Ich habe implementiert benutzerdefinierte Plattform, Umsetzung und aktualisiert hibernate-Plattform, Eintrag in persistance.xml aber ich bin immer unten Ausnahme - Verursacht durch: javax.die Persistenz.TransactionRequiredException: Ausdrücklich der Beitritt zu einer JTA-Transaktion erfordert eine JTA-Transaktion werden derzeit aktiv an der org.hibernate.intern.SessionImpl.joinTransaction(SessionImpl.java:3766) auf org.hibernate.intern.SessionImpl.joinTransaction(SessionImpl.java:3751)
InformationsquelleAutor sebplorenz
Verwenden Hibernate, JTA-Plattform mit Feder schreiben und kompilieren Sie diesen code
Fügen Sie in Ihr spring-Konfiguration
Vergessen Sie nicht, fügen Sie eine Abhängigkeit
Und schließlich ändern der hibernate-Konfiguration wie diese
hibernate.transaction.jta.platform=my.domain.spring.hibernate.jta.SpringJtaPlatformAdapter
InformationsquelleAutor Anton Lem
Einige Tipp für den Frühling Benutzer - verwenden Sie einfach diese Umsetzung, wenn Sie setup-Zeug mit der factory bean:
InformationsquelleAutor Torsten Krah
Können Sie versuchen, die Einstellung der jtaTransactionManager Eigentum der org.springframework.orm.hibernate4.LocalSessionFactoryBean zu Spring JtaTransactionManager? Ich habe ähnliches problem aber gelöst. Durch die Art und Weise, die HibernateTemplate wieder auf Frühling 4.0.1. Obwohl es nicht empfohlen wird, aber ich möchte es. Es half kümmern sich um viele Dinge. (Ich bin mit Spring 4.0.5 + Hibernate 4.3.5 + Atomikos 3.9.3)
InformationsquelleAutor Po-Ting Huang
Folgenden wird ein alternativer Ansatz, dass arbeitet mit Spring-Konfiguration. Dies unterscheidet sich von Antons Ansatz, der sich nicht auf Instanz-Methode schreibt in einem statischen Feld (was im Allgemeinen als schlechte Praxis).
Dann im Frühjahr Konfiguration:
InformationsquelleAutor The Gilbert Arenas Dagger