Zum Inhalt springen

Lookup EJB in JbossAS 6.0 schlägt fehlt


blubbla

Empfohlene Beiträge

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 .

Link zu diesem Kommentar
Auf anderen Seiten teilen

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.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...