JPA JPA Transaktionen für Web-Application und Desktop-Client

Centai

Mitglied
Ich habe eine JPA Datenbankanwendung, bei der die Entities und die Zugriffsklassen darauf als gemeinsame Bibliothek ausgelagert sind. Die Zugriffsklassen nehmen dabei eine Entity-Manager im Konstruktur auf.

Die Bibliothek wird zum einen von einer Web-Anwendung verwendet (EJBs), bei welcher der EntityManager vom Container verwaltet wird und dieser per @PersistenceContext instanziiert wird. Dort ist JTA für Transaktionen festgelegt.

Der Desktop-Client dagegen ist eine einfache JavaSE-Anwendung, welche EclipseLink benutzt und den Entity-Manager lokal über RESOURCE_LOCAL erzeugt.

Für Datenabfragen funktioniert die gemeinsame Nutzung der Bibliothek wunderbar. Nur wenn es um Transaktionen geht, gibt es Probleme. Bei JavaEE muss JTA verwendet werden und unter JavaSE aktuell lokale Transaktionen.

Was ist der beste Ansatz, um einen gemeinsamen Zugriff von JavaEE und SE auf die Datenbank mit Transaktionen zu realisieren?
Aktuell habe ich zwei Ansätze:
1. Fallunterscheidung bei den Zugriffsklassen, um was für einen Entity-Manager es sich handelt. Finde ich aber unschön, weil es den Code aufbläht.
2. In der JavaSE-Anwendung auch JTA verwenden. Ich habe auch schon mit Atomikos experimentiert, aber konnte es bis jetzt nicht zum laufen bringen. Wenn ich es richtig verstehe, wird dann auch ein lokales JNDI benötigt ect. und hat dann doch einen ganz schönen Rattenschwanz.

Hat jemand Erfahrung in diesem Bereich?
 

CptSocket

Aktives Mitglied
Hallo Centai

Wurde schonmal überlegt, den Zugriff auf die Datenbank in eine von der WebApplikation und Desktop-Client gemeinsam genutze Serverkomponente auszulagern? (Also nicht wie Beschrieben eine gemeinsam genutzte Library, sondern gemeinsam genutzte Services, welche auf einem Server laufen. So wie die Frage formuliert ist, könnte das aber zu einem grösseren Umbau werden ...)

Dies könnte etwa folgendermassen aussehen:
Anhang anzeigen 7594

Variante 1 / Idealfall:
Der Server bietet Services an, welche sowohl vom Web- als auch vom Desktop-Client verwendet werden.

Variante 2 / eher zu vermeiden:
Der Server bietet die Persistenzoperationen sowohl dem Web- als auch dem Desktop-Client an. Der Unterschied zu der in der Frage beschriebenen Ausgangslage ist, dass der DB-Zugriff immer über den Server läuft. Es gibt also in Bezug auf Transaktionen keinen Unterschied von Web- zu Desktop-Client.

Ob jetzt der Web-Client in der gleichen Applikation wie die Services und Persistenz läuft oder ob das separate Applikationen sind, ist natürlich Geschmacksache und abhängig von den Anforderungen.


Freundliche Grüsse
CptSocket
 

Ähnliche Java Themen

Neue Themen


Oben