2017-06-08 4 views
0

Ich habe versucht, eine DAO-Klasse zu schreiben und den EntityManager innerhalb dieser Klasse zu verwenden, um Persistenz-Operationen durchzuführen. Meine Datenbank ist als JTA-Datenquelle in meiner persistence.xml definiert und entsprechend als Datenquelle in meinem Webanwendungsserver registriert.Sind JPA-Transaktionen in einem EJB enthalten?

So habe ich ein Problem bei der Verwendung der em.persist() -Methode des EntityManager in meinem DAO, weil ich eine Transaktion brauche. Offensichtlich muss es eine spezielle Art von Transaktion namens UserTransaction sein.

für Beispiele in der Web-Suche finde ich, dass Sie diese Transaktion mit @Resource UserTransaction utx;

injizieren kann aber für die Injektion, hat mein DAO zu arbeiten Klasse vom Container initialisiert werden, indem sie ein EJB machen (@Stateless) . Wenn ich meinen DAO-Container verwalten lasse, kann ich meine DAO-Klasse nicht frei und manuell initialisieren.

Wie kann ich Transaktionen in meiner DAO-Klasse erstellen, ohne sie zu einem EJB zu machen? Muss ich den JNDI manuell nach der UserTransaction durchsuchen?

Antwort

0

In JavaEE sollte Ihr DAO tatsächlich vom Container (Server) verwaltet werden. Nur verwaltete Komponenten haben vollen Zugriff auf Ressourcen und Kontexte, wie in den Java EE-Spezifikationen angegeben. Zum Beispiel kann eine einzelne Transaktion von mehreren Komponenten während eines einzelnen Aufrufs gemeinsam genutzt werden. Daher muss der Server den Lebenszyklus dieser Komponenten verwalten und deren Status steuern.
Wenn Sie Ihre DAO mit @Stateless annotieren, werden Sie in eine Stateless Session Bean - was ist und EJB-Bean, die standardmäßig Transaktion-bewusst ist. Sie müssen keine EJBs verwenden - Sie können zum Beispiel mit CDI + @Transactional gehen, aber EJBs sind wirklich der ideale Baustein für die Datenzugriffsschicht.
Versuchen Sie, etwas Zeit mit dem Lesen des offiziellen JavaEE-Lernprogramms zu verbringen, oder sehen Sie sich tons of JavaEE sample projects an, um eine bessere Vorstellung davon zu erhalten, wie Sie für JavaEE entwickeln.

Verwandte Themen