EJB-Transaktionen in lokalen Methodenaufrufen
In den folgenden Einstellungen funktioniert Methode B führen in eine (neue) Transaktion?
Einer EJB werden, zwei Methoden, Methode A und Methode B
public class MyEJB implements SessionBean
public void methodA() {
doImportantStuff();
methodB();
doMoreImportantStuff();
}
public void methodB() {
doDatabaseThing();
}
}
Den EJB-container verwaltet werden, mit methodB in requires_new Transaktion und Methode Ein in der gewünschten Transaktion. also:
<container-transaction id="MethodTransaction_1178709616940">
<method id="MethodElement_1178709616955">
<ejb-name>MyName</ejb-name>
<method-name>*</method-name>
<trans-attribute>Required</trans-attribute>
</method>
<method id="MethodElement_1178709616971">
<ejb-name>MyName</ejb-name>
<method-name>methodB</method-name>
</method>
<trans-attribute>RequiresNew</trans-attribute>
</container-transaction>
Lassen Sie uns nun einen anderen EJB-Aufruf methodA mit einem EJB-Methodenaufruf.
methodA jetzt läuft in einer Transaktion. Wird der nachfolgende Aufruf von methodB von methodA laufen in der gleichen Transaktion, oder läuft es in einer neuen Transaktion?
(denke, dass es auf den tatsächlichen code hier. Es gibt keine explizite ejb-Aufruf Methode B)
InformationsquelleAutor der Frage | 2009-01-09
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ihren Anruf
methodB()
ist ein ganz normaler Aufruf einer Methode nicht abgefangen durch den EJB-container zur Laufzeit der EJB-container injizieren ein proxy und nicht eine Instanz Ihrer Klasse, dies ist der Weg, es fängt die Anrufe und einrichten der Umgebung vor dem Aufruf Ihrer Methode. Wenn Siethis
man ruft eine Methode auf, die direkt und nicht über den proxy. Also beide Methoden verwenden die gleichen Transaktion, unabhängig davon, was definiert ist ejb-jar.xml für Anrufe, die durch die EJB-Schnittstellen.InformationsquelleAutor der Antwort david a.
injizieren SessionContext, und bitten Sie Sie, für Ihre proxy-Instanz:
in "Aufruf#1' dies ist ein Lokaler Aufruf, die nicht durch durch proxy, es wird wieder die Zählung
in 'Aufruf#2" dieses ist ein Aufruf über den proxy, und damit werden Sie kommentieren es nicht um die Unterstützung der Transaktion-die ist jetzt geöffnet von create(user) - Methode-, ist dieser Aufruf wirft eine Transaktion Ausnahme:
javax.ejb.EJBException: EJB aufgerufen werden können nicht, im global transaction
InformationsquelleAutor der Antwort DrAhmedJava
Werden Sie mit der gleichen Transaktion.
Wenn ich mich gut daran erinnern, die Transaktion wird gestartet, indem der container "vor" - Methode aufgerufen und verpflichtet, nachdem es "fertig stellen".
Da "a" ruft "b", "b" verwenden würde die gleiche Transaktion.
:S
Ich denke, das beste, was, das Sie tun können, ist, testen Sie es, um es zu überprüfen! 🙂
InformationsquelleAutor der Antwort OscarRyz