2009-05-16 5 views
3

Unsere Anwendung muss (nur lesbar) ein paar verschiedene Persistenzeinheiten verwenden, die auf verschiedene Datenbanken zeigen (auch verschiedene kommerzielle Anbieter).Ist es möglich, mehr als eine Persistenzeinheit in einer Transaktion zu verwenden, ohne dass es XA ist?

Wir haben nicht das Budget, um 2pc auf einem von ihnen (Sybase) zu ermöglichen. Gibt es eine Möglichkeit, diese in einer Transaktion zu verwenden, ohne dass es eine XA-Transaktion sein muss?

Wir verwenden Websphere 6.1, Sybase 12.5.3, Oracle 10g, Java EE 5 und JPA mit Hibernate Entity Manager.

Update: Das Orakel PU wird selten 1 oder 2 pro Monat aktualisiert, die Sybase PU wird sehr häufig aktualisiert - viele Male pro Tag. Isolation ist definitiv ein Anliegen für die letzteren, Konsistenz zwischen den beiden ist nicht notwendig, um durchzusetzen.

Antwort

3

Vorsicht.
Schreibgeschützt bedeutet nicht immer, dass 2PC nicht zutrifft. Wenn Sie zwei Datenbanken haben und beide lesen, aber nur eine aktualisieren, benötigen Sie eine Transaktion, um konsistente Ergebnisse zu gewährleisten. Angenommen, Sie haben ein Szenario, in dem Sie Datenbank A lesen und diese Ergebnisse zum Lesen und Aktualisieren von Datenbank B verwenden. Wenn Sie keine Transaktion mit Datenbank A verwenden, ist es möglich, dass während der Operation die Daten gelesen werden, aus denen Sie gelesen haben Datenbank A kann gelesen und aktualisiert werden von einer anderen Anwendung. In diesem Fall können Sie inkonsistente Daten in der Datenbank B erhalten.

Wenn Sie wirklich beide Datenbanken lesen und weder aktualisieren noch können Sie denken, dass eine verteilte Transaktion und die zugehörige Sperrung unnötig ist. Noch einmal, vielleicht nicht. Möglicherweise erhalten Sie in diesem Szenario auch inkonsistente Lesevorgänge, wenn andere Anwendungen die gleichen Datenbanken aktualisieren. Es hängt von Ihren Anforderungen und den anderen Benutzern der Datenbank ab.

Ich würde vorschlagen, reading up on isolation levels, um einige Einblicke in die Sperre, die gilt, auch während der Lesevorgänge, für alle dauerhaften Speicher wie Datenbanken. Transaktionssperre kann unnötig sein; zum Beispiel ist es unnötig, wenn Sie mit Daten zu tun haben, die sich praktisch nicht ändern (keine Schreibvorgänge durch beliebige App).

Vielleicht gibt es hier eine Geschäftslösung - verhandeln Sie mit Ihrem Händler, um den Preis der XA-Aktivierung zu senken und bezahlen Sie ihn. Mit der Wirtschaft können Sie einen Deal bekommen, den Sie sich leisten können. Randnotiz: Ich bin überrascht, dass Sie eine Datenbank lizenzieren und keine Transaktionen erhalten können. Mir war nicht bewusst, dass Sybase auf diese Weise lizenziert werden konnte.

+0

Ja erhöhen Sie sehr kritische Punkte. Ich habe im OP die Isolations- und Konsistenzanforderungen der beiden PUs geklärt. Wir verhandeln separat mit dem Anbieter. Hinweis: Natürlich enthält die Datenbank Transaktionen, aber es gibt einen zusätzlichen Preis für XA-Transaktionen - willkommen bei der Preisgestaltung von Sybase. –

1

Atomikos TransactionsEssentials ist eine freie Open Source JTA/XA mit Verbindungspools für JDBC (und JMS).

Eine seiner Funktionen ist die zusätzliche Unterstützung für Nicht-Xa-Datenquellen. Wenn Sie nur lesen (Ihr Fall), ist es sicher und einfach, unsere Nicht-Xa-Datenquelle zu verwenden, um Ihren Sybase in eine JTA-Transaktion einzubeziehen.

Beste Guy