EJB3 - Verwendung von 2 Persistenzeinheiten innerhalb einer Transaktion (Ausnahme: Lokale Transaktion hat bereits 1 Nicht-XA-Ressource)

8

Ich versuche, in einer Java EE-Anwendung, die auf Glassfish implementiert ist, zwei Persistenzeinheiten innerhalb derselben Transaktion zu verwenden.

Die 2 Persistenzeinheiten sind wie folgt in persistence.xml definiert:

%Vor%

Diese Persistenzeinheiten entsprechen den JDBC-Ressourcen und Verbindungspools, die ich in Glassfish wie folgt definiert habe (schließen Sie hier eine ein, da beide identisch sind mit Ausnahme von Namen und Datenbankverbindungsinformationen):

%Vor%

Es gibt drei Stateless Session-Beans, LimsServiceBean, AnalysisServiceBean und AnalysisDataTransformationServiceBean.

Hier sind die relevanten Snippets von LimsServiceBean:

%Vor%

Von AnalysisServiceBean:

%Vor%

Und von AnalysisDataTransformationServiceBean:

%Vor%

Dieser Aufruf von limsService.getLatestLIMSData () verursachte die folgende Ausnahme:

%Vor%

Nachdem ich diese Seite Ссылка konsultiert habe (unter vielen anderen), habe ich versucht, die Definition zu ändern der Verbindungspools zu:

%Vor%

Ping über die Glassfish-Admin-Konsole ist erfolgreich, aber der Aufruf von analyseService.getAllAnalysisTypes () löst jetzt eine Ausnahme aus:

%Vor%

Irgendwelche Ideen?

    
Sorcha 09.04.2010, 10:06
quelle

2 Antworten

6

Ändern Sie die Konfiguration des Verbindungspools in Glassfish:

%Vor%

Befolgen Sie die Schritte auf Senthil Balakrishnans Blog "Wie funktioniert die MSSQL Server XA-Datenquelle?" hier, Ссылка .

Starten Sie Glassfish neu.

    
Sorcha 15.04.2010, 11:13
quelle
4

Um zwei Persistenzeinheiten (und damit zwei Datenquellen) innerhalb einer Transaktion zu verwenden, müssen Sie in der Tat XA-Verbindungen verwenden und Ihre Pools entsprechend konfigurieren (mindestens eine von ihnen unterstützt GlassFish die letzte Agentenoptimierung, die sich registrieren lässt) eine nicht-XA-Ressource, siehe Ссылка ). Das war für den ersten Fehler.

Für den zweiten Fehler scheint es schwierig zu sein, etwas mit dem aktuellen Detaillierungsgrad zu sagen. Können Sie den Stack-Trace bereitstellen (aktivieren Sie bei Bedarf eine feinere Protokollierung)?

    
Pascal Thivent 10.04.2010 05:02
quelle