Zum Inhalt springen
View in the app

A better way to browse. Learn more.

Fachinformatiker.de

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

Lookup EJB in JbossAS 6.0 schlägt fehlt

Empfohlene Antworten

Veröffentlicht

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 .

Archiv

Dieses Thema wurde archiviert und kann nicht mehr beantwortet werden.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.