2011-01-17 7 views
7

Ich entwickle eine J2EE-Anwendung, die auf JBoss-Anwendungsserver bereitgestellt wird. Die Anwendung besteht aus einer EJB 2.x-Komponente und einer Webkomponente und wird auf einem lokalen Computer oder Remote-Server ausgeführt. Die Datenbank ist entweder Oracle oder SQL Server und befindet sich nicht in einer verteilten Umgebung.verwenden Sie JTA-Transaktion oder nicht?

Ich verwende Hibernate 3.6 (JPA 2.0-Implementierung) für die Transaktionen. Sollte ich JTA verwenden, was eine containergesteuerte Transaktion ist, oder ist sie überlastet, um sie zu verwenden?

Derzeit verwende ich JTA und es stellt sich heraus, es läuft gut, aber mit einigen kleinen Fragen, die ich nicht weiß, ob es mit der Transaktionsverwaltung oder nicht verbunden ist. Wird es einfacher oder zuverlässiger sein, das lokale Transaktionsmanagement zu verwenden?

+0

möglich Duplikat [JTA oder lokale Transaktionen in JPA2 + 3.6.0 Ruhezustand?] (Http://stackoverflow.com/questions/4559764/jta-or-local-transactions-in-jpa2hibernate- 3-6-0) –

+0

Vielen Dank für Ihren Kommentar. Welchen Transaktionsmanager sollte ich verwenden, wenn ich sowohl EJB 2.x als auch JPA verwende? Für die Spring-Roo-Anwendung lautet der Standard org.springframework.orm.jpa.JpaTransactionManager, aber ich denke, ich sollte etwas anderes verwenden. – newguy

Antwort

16

JTA-Transaktionen werden immer über anderen Arten von Transaktions-APIs empfohlen, insbesondere wenn Sie auf die nativen Transaktionen verweisen, die noch Teil der JPA-API sind. Beachten Sie, dass Sie nicht "JTA vs. lokale Ressourcentransaktionen" sagen können, da JTA unter anderem lokale Ressourcentransaktionen verwaltet.

Gavin King (Schöpfer von Hibernate) gab einmal in einem Interview an, dass diese JPA-spezifische API ein Fehler sei und dass die viel flexiblere JTA-API bevorzugt werden sollte. Besonders bei deklarativen Transaktionen ist JTA sehr leicht. Das Wort overkill würde tatsächlich mehr für die Verwendung der systemeigenen JPA-Transaktions-API und dann für die Verwendung von JTA gelten.

Es gibt etwas zu sagen über die Wahl zwischen der Verwendung von XA oder lokalen Ressourcentransaktionen mit JTA. Siehe meine Antwort hier für weitere Details dazu: JTA or LOCAL transactions in JPA2+Hibernate 3.6.0?

Ich frage mich, warum Sie EJB 2 in Kombination mit JPA 2.0 verwenden. EJB 3.1 wäre hier eine viel logischere Wahl. EJB 2 ist komplett veraltet (wird in Java EE 7 gelöscht).

+0

Danke arjan. Ich bin derzeit in einer Migrationsphase meines Projekts, so dass ich sowohl EJB 2 als auch JPA 2 gut laufen muss, um die Änderungen testen zu können, die sich nicht auf das Verhalten meines Projekts auswirken. Am Ende des Tages wird mein Projekt vollständig nach JPA 2 migriert. – newguy

+0

Gern geschehen. Beachten Sie, dass die leistungsstärksten Kombinationen EJB 3.1 + JPA 2 sind. Diese beiden ergänzen sich sehr stark. –

1

Ich würde empfehlen, XA-Transaktion zu verwenden, auch wenn die Anwendung derzeit nur auf eine Ressource (die Datenbank) zugreifen. Resens:

1) In Zukunft, wenn die Anwendung beschließt, eine andere Transaktionsressource außer der aktuellen Datenbank zu verwenden, wird es einfacher finden, da die XA-Transaktionsverwaltung bereits vorhanden ist und die mehreren Transaktionsressourcen kombiniert werden können in eine einzige Transaktion.

2) Da Sie derzeit nur eine einzige Transaktionsressource haben, wird die Performance bei Verwendung von XA im Vergleich zur lokalen Transaktion nicht beeinträchtigt. Der Grund ist, dass XA/JTA-Transaktionsmanager bereits eine Art von Optimierung für Fälle einer einzelnen Transaktionsressource durchführen (sie nennen dies eine einphasige Optimierung).

Hoffnung, das hilft.

Nitin

+1

YAGNI, man sollte niemals Dinge bauen, die auf spekulativen Anforderungen basieren. Wenn es einen eindeutigen Bedarf für XA gibt, dann benutze es. Tun Sie es nicht, weil Sie es brauchen. – geoaxis