blubbla Geschrieben 13. Januar 2012 Teilen Geschrieben 13. Januar 2012 Hallo, habe das Problem schon in einem anderen Forum gepostet - aber bis jetzt keine Lösung gefunden, vllt kann mir hier jemand einen Tipp geben. 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 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 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: /* hier startet der Transaktionsmanager den Rollback, weil das Transaktions-Timeout abgelaufen ist */ 11:06:02,364 WARN [com.arjuna.ats.arjuna] ARJUNA-12117 TransactionReaper::check timeout for TX 0:ffffc0a8029a:126a:4f0c0c0f:53 in state RUN 11:06:02,389 ERROR [STDERR] javax.naming.NamingException: Could not dereference object [Root exception is java.lang.RuntimeException: Can not find interface declared by Proxy in our CL + BaseClassLoader(at)1c2f9b7{vfs:///C:/.../jboss-6.0.0.Final/server/all/deploy/transaction-jboss-beans.xml}] 11:06:02,389 ERROR [STDERR] at org.jnp.interfaces.NamingContext.getObjectInstanceWrapFailure(NamingContext.java:1508) 11:06:02,390 ERROR [STDERR] at org.jnp.interfaces.NamingContext.lookup(NamingContext.java:824) 11:06:02,390 ERROR [STDERR] at org.jnp.interfaces.NamingContext.lookup(NamingContext.java:688) 11:06:02,390 ERROR [STDERR] at javax.naming.InitialContext.lookup(Unknown Source) 11:06:02,391 ERROR [STDERR] at (lookup-ejb-Methode)(SyncObject.java:91) 11:06:02,391 ERROR [STDERR] at SyncObject.afterCompletion(SyncObject.java:39) 11:06:02,391 ERROR [STDERR] at com.arjuna.ats.internal.jta.resources.arjunacore.SynchronizationImple.afterCompletion(SynchronizationImple.java:117) 11:06:02,392 ERROR [STDERR] at com.arjuna.ats.arjuna.coordinator.TwoPhaseCoordinator.afterCompletion(TwoPhaseCoordinator.java:371) 11:06:02,392 ERROR [STDERR] at com.arjuna.ats.arjuna.coordinator.TwoPhaseCoordinator.cancel(TwoPhaseCoordinator.java:121) 11:06:02,393 ERROR [STDERR] at com.arjuna.ats.arjuna.AtomicAction.cancel(AtomicAction.java:212) 11:06:02,393 ERROR [STDERR] at com.arjuna.ats.arjuna.coordinator.TransactionReaper.doCancellations(TransactionReaper.java:367) 11:06:02,393 ERROR [STDERR] at com.arjuna.ats.internal.arjuna.coordinator.ReaperWorkerThread.run(ReaperWorkerThread.java:79) 11:06:02,394 ERROR [STDERR] Caused by: java.lang.RuntimeException: Can not find interface declared by Proxy in our CL + BaseClassLoader(at)1c2f9b7{vfs:///C:/.../jboss-6.0.0.Final/server/all/deploy/transaction-jboss-beans.xml} 11:06:02,394 ERROR [STDERR] at org.jboss.ejb3.proxy.impl.objectfactory.ProxyObjectFactory.redefineProxyInTcl(ProxyObjectFactory.java:410) 11:06:02,394 ERROR [STDERR] at org.jboss.ejb3.proxy.impl.objectfactory.session.SessionProxyObjectFactory.createProxy(SessionProxyObjectFactory.java:134) 11:06:02,395 ERROR [STDERR] at org.jboss.ejb3.proxy.impl.objectfactory.session.stateless.StatelessSessionProxyObjectFactory.getProxy(StatelessSessionProxyObjectFactory.java:79) 11:06:02,395 ERROR [STDERR] at org.jboss.ejb3.proxy.impl.objectfactory.ProxyObjectFactory.getObjectInstance(ProxyObjectFactory.java:161) 11:06:02,396 ERROR [STDERR] at javax.naming.spi.NamingManager.getObjectInstance(Unknown Source) 11:06:02,396 ERROR [STDERR] at org.jnp.interfaces.NamingContext.getObjectInstance(NamingContext.java:1483) 11:06:02,396 ERROR [STDERR] at org.jnp.interfaces.NamingContext.getObjectInstanceWrapFailure(NamingContext.java:1500) 11:06:02,397 ERROR [STDERR] ... 11 more 11:06:02,398 ERROR [STDERR] Caused by: java.lang.ClassNotFoundException: (EJBapi-Class) from BaseClassLoader(at)1c2f9b7{vfs:///C:/.../jboss-6.0.0.Final/server/all/deploy/transaction-jboss-beans.xml} 11:06:02,398 ERROR [STDERR] at org.jboss.classloader.spi.base.BaseClassLoader.loadClass(BaseClassLoader.java:480) 11:06:02,398 ERROR [STDERR] at java.lang.ClassLoader.loadClass(Unknown Source) 11:06:02,398 ERROR [STDERR] at java.lang.Class.forName0(Native Method) 11:06:02,399 ERROR [STDERR] at java.lang.Class.forName(Unknown Source) 11:06:02,399 ERROR [STDERR] at org.jboss.ejb3.proxy.impl.objectfactory.ProxyObjectFactory.redefineProxyInTcl(ProxyObjectFactory.java:406) 11:06:02,399 ERROR [STDERR] ... 17 more 11:06:02,400 ERROR [SyncObject] naming exception at ctx lookup - set EJBapi to NULL 11:06:02,400 ERROR [SyncObject] EJBapi not found at JNDI lookup! 11:06:02,401 WARN [com.arjuna.ats.arjuna] ARJUNA-12121 TransactionReaper::doCancellations worker Thread[Transaction Reaper Worker 0,5,jboss] successfully canceled TX 0:ffffc0a8029a:126a:4f0c0c0f:53 Klassennamen usw. hab ich ersetzt. Der Code läuft aber wie gesagt fehlerfrei, wenn die Transaktion innerhalb der Timeout-Grenzen normal mit einem commit oder rollback abgeschlossen wird - in diesem Fall funktioniert also der JNDI-Lookup. Wäre super wenn mir da jmd weiterhelfen könnte - ich kanns mir im Moment nicht recht erklären . Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.