R
reNur
Gast
Hallo,
folgendes Szenario:
Ich erstelle eine Java-Instanz von einem POJO, das das Interface javax.transacion.Synchronization Interface implementiert. Diese Instanz "hänge" ich an eine Transaktion.
Wird die Transaktion nun durch den Transaktionsmanager beendet, werden ja nacheinander die beforeCompletion und afterCompletion Methoden aufgerufen. Innerhalb dieser Methoden will ich nun ein Stateless EJB aufrufen. Ich mache einen Lookup mit
Wenn diese Transaktion nun beendet wird, will ich in der Methode afterCompletion(int status) nun eine Methode des EJB aufrufen - also so in der Art
Dies funktioniert auch, falls die Transaktion im Erfolgsfall committed wurde - d.h. der JNDI lookup ist erfolgreich, ich bekomme mein EJB-Interface, kann die Methode aufrufen usw.
Bei Transaktionen, die durch einen Timeout abgeschlossen werden (also sprich: rollback) wirft genau dieser EJB-Lookup, der vorher noch funktionierte, die Exception:
Die afterCompletion-Methode wird korrekt aufgerufen, das Synchronisations-Object gibt es also noch.
Ich verstehe nun nicht ganz, wie das ganze mit den Transaktionen zusammenhängt, insbesondere was es mit der transaction-jboss-beans.xml auf sich hat. Hätte da jemand einen Tipp für mich?
folgendes Szenario:
Ich erstelle eine Java-Instanz von einem POJO, das das Interface javax.transacion.Synchronization Interface implementiert. Diese Instanz "hänge" ich an eine Transaktion.
Wird die Transaktion nun durch den Transaktionsmanager beendet, werden ja nacheinander die beforeCompletion und afterCompletion Methoden aufgerufen. Innerhalb dieser Methoden will ich nun ein Stateless EJB aufrufen. Ich mache einen Lookup mit
Java:
try {
ctx = new InitialContext();
} catch (NamingException e) {
e.printStackTrace();
LOG.error("naming exception - can not resolve InitialContext!");
}
// get the interface
try {
ejb = ( ejbClass ) ctx.lookup("blablabla");
LOG.debug( "found ejb in JNDI" );
} catch (NamingException e) {
e.printStackTrace();
LOG.error("naming exception at ctx lookup - set ejb to NULL");
capsEJBapi = null;
}
Wenn diese Transaktion nun beendet wird, will ich in der Methode afterCompletion(int status) nun eine Methode des EJB aufrufen - also so in der Art
Java:
public void afterCompletion(int status)
{
... lookup des ejb ...
ejb.methode(...)
...
}
Dies funktioniert auch, falls die Transaktion im Erfolgsfall committed wurde - d.h. der JNDI lookup ist erfolgreich, ich bekomme mein EJB-Interface, kann die Methode aufrufen usw.
Bei Transaktionen, die durch einen Timeout abgeschlossen werden (also sprich: rollback) wirft genau dieser EJB-Lookup, der vorher noch funktionierte, die Exception:
Java:
javax.naming.NamingException: Could not dereference object [Root exception is java.lang.RuntimeException: Can not find interface declared by Proxy in our CL + [email]BaseClassLoader@8bf2e{vfs:///C:/.../jboss-6.0.0.Final/server/all/deploy/transaction-jboss-beans.xml[/email]}]
Die afterCompletion-Methode wird korrekt aufgerufen, das Synchronisations-Object gibt es also noch.
Ich verstehe nun nicht ganz, wie das ganze mit den Transaktionen zusammenhängt, insbesondere was es mit der transaction-jboss-beans.xml auf sich hat. Hätte da jemand einen Tipp für mich?