JPA Mehrere Transaktions-Manager
Habe ich eine applicationContext.xml Datei, und es hat zwei org.springframework.orm.jpa.JpaTransactionManager (jede mit Ihrer eigenen Persistenz-Einheit, verschiedene Datenbanken) konfiguriert im Frühjahr middleware-benutzerdefinierte Anwendung.
Ich will annotation-basierte Transaktionen (@Transactional), um nicht Durcheinander herum mit TransactionStatus-commit, speichern und zurücksetzen.
Ein Mitarbeiter erwähnte, dass etwas Durcheinander kommt dies zu tun, wenn es mehrere Transaktions-Manager, obwohl der Kontext-Datei festgelegt ist richtig konfiguriert (die Verweise gehen auf die richtige Ausdauer-Einheit.
Wer jemals ein Problem?
In deiner config, hätten Sie zwei Transaktions-Managern?
Hätten Sie txManager1 und txManager2?
Das ist, was ich mit JPA, zwei unterschiedliche Spring-beans, die Transaktions-Managern.
InformationsquelleAutor bmw0128 | 2008-09-16
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich vermute, Sie haben die Wahl zwischen 2
Wenn Sie Ihre use-cases nie müssen aktualisiert werden, um beide Datenbanken in derselben Transaktion, dann können Sie zwei JpaTransactionManagers, aber ich bin mir nicht sicher, Sie werden in der Lage sein, die Verwendung der @Transactional Ansatz? In diesem Fall würden Sie brauchen, um fallback auf die ältere Mechanismus mit einem einfachen TransactionProxyFactoryBean zu definieren Transaktion Grenzen, zB:
Wenn Sie erfordern eine Transaktion spanning beide Datenbanken, dann müssen Sie einen JTA-Transaktions-manager. Die API Staaten:
Was dies bedeutet ist, dass Sie brauchen, um eine JTA-Transaktions-manager. In unserer Anwendung verwenden wir die config die der folgenden ähnelt:
Wenn Sie eine Bereitstellung innerhalb von einem Anwendungsserver, dann die Feder JtaTransactionManager muss eine Suche in der realen XA-kompatible JTA Transaktion manager den Anwendungsserver. Allerdings können Sie auch eine standalone-JTA-Transaktions-manager (aber ich habe nicht versucht, diese selbst noch)
Als für die Konfiguration von Jpa-Persistenz-provider, der bin ich nicht vertraut. Was JPA-Persistenz-provider verwenden Sie?
Den code oben ist, basierend auf unserem Ansatz, wo wir mit " native Hibernate-im Gegensatz zu Hibernate - JPA-Implementierung. In diesem Fall waren wir in der Lage, um loszuwerden, die zwei HibernateTransactionManager Bohnen, und einfach sicherstellen, dass beide SessionFactories injiziert wurden mit der gleichen JTA-TM, und verwenden Sie dann die tx:annotation-driven element.
Hoffe, das hilft
Spring JTA mehrere Ressource-Transaktionen in Tomcat mit Atomikos Beispiel
InformationsquelleAutor toolkit
Die einzige situation, in der man zwei Feder-Transaktions-Manager ist, wenn Sie nie haben beide Transaktionen gleichzeitig zu öffnen. Dies ist nicht per se zu tun mit verteilten Transaktionen - die gleichen Einschränkungen gelten auch dann, wenn Sie wollen, die beiden Datenquellen haben komplett getrennte (aber potenziell überschneidungen in der Zeit) Transaktion lifecyles.
Intern Spring transaction Manager verwenden, Spring TransactionSynchronizationManager, die hält ein paar kritischen Zustand in static ThreadLocal-Variablen, also Transaktions-Managern sind garantiert zu stampfen alle über jeden anderen Staat.
InformationsquelleAutor