Wie integriere ich die Unterstützung für Bereitstellung von Verbindungsressourcen und JTA Transaktionen in meine J2SE-Anwendung?
Hallo Chris
Es gibt zwei Elemente für dieses Problem:
1) Herstellung des JTA API, vor allem Usertransaction, zur Verfügung zu Anwendungscode, so kann es Transaktionen beginnen und enden. In einer Java EE-Umgebung wird sie in einem bekannten Speicherort in JNDI veröffentlicht. Wenn Sie über eine JNDI-Implementierung verfügen, ist dies der richtige Weg (verwenden Sie die JNDIManager-Klasse von JBossTS, um Sie bei der Einrichtung zu unterstützen). Andernfalls benötigen Sie eine Art Fabrikobjekt oder Injektionsmechanismus. Natürlich können Sie die Implementierungsklasse auch direkt für den Endbenutzer verfügbar machen, aber das ist etwas unangenehm, da es die Wahrscheinlichkeit begrenzt, dass die JTA in der Zukunft ausgetauscht wird.
Das ist es - Sie können jetzt beginnen, Commit und Rollback-Transaktionen. Einige Container veröffentlichen die TransactionManager-Klasse auch auf ähnliche Weise für Anwendungen, aber sie ist wirklich für die Verwendung durch den Container selbst konzipiert und wird selten vom Anwendungscode benötigt.
2) Automatisches Einbinden von XAResources. Ressourcenmanager, d. H. Datenbanken und Nachrichtenwarteschlangen, haben Treiber, die XAResource implementieren. Jedes Mal, wenn die Anwendung eine Verbindung zum Ressourcenmanager erhält, muss eine entsprechende XAResource an die JTA-Implementierung übergeben werden, damit sie den Ressourcenmanager als Teil des 2PC ansteuern kann. Die meisten App-Server verfügen über einen JCA, der dies automatisch verarbeitet. In Umgebungen ohne eine benötigen Sie eine Alternative, um den Anwendungscode zu speichern, um diese lästige Aufgabe von Hand zu erledigen. Der mit JBossTS gebündelte TransactionalDriver verarbeitet dies für JDBC-Verbindungen. XAPool kann auch eine Überlegung wert sein.
JBossTS wurde im Laufe der Jahre in viele Umgebungen integriert. Einige der gelernten Lektionen werden im Integrationshandbuch dokumentiert http://anonsvn.jboss.org/repos/labs/labs/jbosstm/trunk/atsintegration/docs/] und wenn Sie an einem Beispiel möchten Sie an der tomcat Integrationsarbeit http://anonsvn.jboss.org/repos/labs/labs/jbosstm/workspace/jhalliday/tomcat-integration/]
JBoss des TM ist schrecklich aussehen könnte. Zumindest, wenn Sie auf ACID-Transaktionen hoffen.
Hallo erickson
Das glaube ich nicht, dass ich ganz so weit gehen würde, als ‚schrecklich‘. Es ist unglaublich leistungsfähig und hochgradig konfigurierbar, was das "out of box" -Erlebnis für Einsteiger etwas entmutigend machen kann. Die korrekte Wiederherstellungskonfiguration ist besonders schwierig, daher unterstütze ich Ihren Kommentar zu rigorosen Tests. Darüber hinaus sind mir keine dokumentierten Testfälle bekannt, in denen es derzeit keine ACID-Ergebnisse liefert, wenn sie mit spezifikationskonformen Ressourcenmanagern verwendet werden. Wenn Sie einen solchen Fall oder einfach nur konstruktivere Verbesserungsvorschläge haben, informieren Sie JBoss bitte, damit das Problem behoben werden kann.
Das Rad nicht neu erfinden. Verwenden Sie das Spring Framework. Es bietet bereits diese Funktionalität und vieles mehr.
-1 Spring bietet keine JTA-Implementierung, nur einen Wrapper für verschiedene 3rd Party. Dies ist ein häufiges Missverständnis.
JTA unterstützt lokale Transaktionen und globale Transaktionen.
Ein weiteres Missverständnis fürchte ich. Die JTA-Spezifikation befasst sich nur mit XA, d.h. globalen Transaktionen. Verschiedene gut bekannte Techniken existieren, um einen JTA-Transaktionsmanager zu veranlassen, lokale Transaktionen zu steuern. In der Regel wird die Verbindung in eine XAResource eingebunden. Obwohl die meisten Implementierungen dies unterstützen, liegt es außerhalb des Anwendungsbereichs der Spezifikation. Daher müssen Sie sich bei dem Anbieter erkundigen, bevor Sie eine JTA-Implementierung auswählen, wenn Sie dieses Verhalten benötigen.
JBoss TM ist schrecklich. Zumindest, wenn Sie auf ACID-Transaktionen hoffen. Das Beste, was man dazu sagen kann, ist, dass es wahrscheinlich nicht versauen wird, solange es nicht mit Fehlern zu kämpfen hat. Und es ist nicht allein ... die meisten Transaktionsmanager (sogar einige kommerzielle) funktionieren wirklich nicht. Sie müssen sie streng testen, wie ich in meiner vorherigen Antwort gesagt habe. http://stackoverflow.com/questions/777636/what-is-a-good-open-source-j2se-jta-transactionmanager-implementation – erickson
Wenn es so schlimm ist, muss ich die Alternativen in Betracht ziehen. Bitronix verwirrte den Mist aus mir, als ich versuchte, herauszufinden, wie man es benutzt, also ... nun, also diese Frage. –
@erickson, wenn du eine Aussage wie JBossTM machen willst, ist das schrecklich - gib wenigstens ein paar Gründe an. –