Uploaded image for project: 'Application Server 7'
  1. Application Server 7
  2. AS7-4872

Linkage error when doing remote JNDI lookup from messaging subsystem

    XMLWordPrintable

Details

    Description

      Working on AS7-4626 to add JMS bridge, the messaging subsystem now need to perform remote JNDI lookup on another AS7 instances.

      I added the org.jboss.remote-naming to the org.jboss.as.messaging to be able to load org.jboss.naming.remote.client.InitialContextFactory.

      However this creates a Linkage error:

      09:45:42,100 WARN [org.jboss.modules] (MSC service thread 1-4) Failed to define class org.jboss.naming.remote.client.ejb.RemoteNamingEjbClientContextSelector in Module "org.jboss.remote-naming:main" from local module loader @a94884d (roots: /home/jmesnil/Developer/jboss-as/build/target/jboss-as-7.2.0.Alpha1-SNAPSHOT/modules): java.lang.LinkageError: Failed to link org/jboss/naming/remote/client/ejb/RemoteNamingEjbClientContextSelector (Module "org.jboss.remote-naming:main" from local module loader @a94884d (roots: /home/jmesnil/Developer/jboss-as/build/target/jboss-as-7.2.0.Alpha1-SNAPSHOT/modules))
      at org.jboss.modules.ModuleClassLoader.defineClass(ModuleClassLoader.java:396)
      at org.jboss.modules.ModuleClassLoader.loadClassLocal(ModuleClassLoader.java:243)
      at org.jboss.modules.ModuleClassLoader$1.loadClassLocal(ModuleClassLoader.java:73)
      at org.jboss.modules.Module.loadModuleClass(Module.java:527)
      at org.jboss.modules.ModuleClassLoader.findClass(ModuleClassLoader.java:182)
      at org.jboss.modules.ConcurrentClassLoader.performLoadClassUnchecked(ConcurrentClassLoader.java:468)
      at org.jboss.modules.ConcurrentClassLoader.performLoadClassChecked(ConcurrentClassLoader.java:456)
      at org.jboss.modules.ConcurrentClassLoader.performLoadClass(ConcurrentClassLoader.java:398)
      at org.jboss.modules.ConcurrentClassLoader.loadClass(ConcurrentClassLoader.java:120)
      at org.jboss.naming.remote.client.InitialContextFactory.<clinit>(InitialContextFactory.java:118) [jboss-remote-naming-1.0.3.Final.jar:1.0.3.Final]
      at java.lang.Class.forName0(Native Method) [rt.jar:1.6.0_24]
      at java.lang.Class.forName(Class.java:264) [rt.jar:1.6.0_24]
      at org.jboss.as.naming.InitialContextFactoryBuilder.createInitialContextFactory(InitialContextFactoryBuilder.java:61) [jboss-as-naming-7.2.0.Alpha1-SNAPSHOT.jar:7.2.0.Alpha1-SNAPSHOT]
      at javax.naming.spi.NamingManager.getInitialContext(NamingManager.java:681) [rt.jar:1.6.0_24]
      at javax.naming.InitialContext.getDefaultInitCtx(InitialContext.java:305) [rt.jar:1.6.0_24]
      at javax.naming.InitialContext.init(InitialContext.java:240) [rt.jar:1.6.0_24]
      at javax.naming.InitialContext.<init>(InitialContext.java:214) [rt.jar:1.6.0_24]
      at org.hornetq.jms.bridge.impl.JNDIFactorySupport.createObject(JNDIFactorySupport.java:55) [hornetq-jms-2.2.16.Final.jar:2.2.16.Final (HQ_2_2_16_FINAL, 122)]
      at org.hornetq.jms.bridge.impl.JNDIDestinationFactory.createDestination(JNDIDestinationFactory.java:40) [hornetq-jms-2.2.16.Final.jar:2.2.16.Final (HQ_2_2_16_FINAL, 122)]
      at org.hornetq.jms.bridge.impl.JMSBridgeImpl.setupJMSObjects(JMSBridgeImpl.java:1083) [hornetq-jms-2.2.16.Final.jar:2.2.16.Final (HQ_2_2_16_FINAL, 122)]
      at org.hornetq.jms.bridge.impl.JMSBridgeImpl.start(JMSBridgeImpl.java:348) [hornetq-jms-2.2.16.Final.jar:2.2.16.Final (HQ_2_2_16_FINAL, 122)]
      at org.jboss.as.messaging.jms.bridge.JMSBridgeService.start(JMSBridgeService.java:57) [jboss-as-messaging-7.2.0.Alpha1-SNAPSHOT.jar:7.2.0.Alpha1-SNAPSHOT]
      at org.jboss.msc.service.ServiceControllerImpl$StartTask.startService(ServiceControllerImpl.java:1811) [jboss-msc-1.0.2.GA.jar:1.0.2.GA]
      at org.jboss.msc.service.ServiceControllerImpl$StartTask.run(ServiceControllerImpl.java:1746) [jboss-msc-1.0.2.GA.jar:1.0.2.GA]
      at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1110) [rt.jar:1.6.0_24]
      at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:603) [rt.jar:1.6.0_24]
      at java.lang.Thread.run(Thread.java:679) [rt.jar:1.6.0_24]
      Caused by: java.lang.NoClassDefFoundError: org/jboss/ejb/client/ContextSelector
      at java.lang.ClassLoader.defineClass1(Native Method) [rt.jar:1.6.0_24]
      at java.lang.ClassLoader.defineClass(ClassLoader.java:634) [rt.jar:1.6.0_24]
      at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142) [rt.jar:1.6.0_24]
      at org.jboss.modules.ModuleClassLoader.doDefineOrLoadClass(ModuleClassLoader.java:327)
      at org.jboss.modules.ModuleClassLoader.defineClass(ModuleClassLoader.java:391)
      ... 26 more
      Caused by: java.lang.ClassNotFoundException: org.jboss.ejb.client.ContextSelector from [Module "org.jboss.remote-naming:main" from local module loader @a94884d (roots: /home/jmesnil/Developer/jboss-as/build/target/jboss-as-7.2.0.Alpha1-SNAPSHOT/modules)]
      at org.jboss.modules.ModuleClassLoader.findClass(ModuleClassLoader.java:190)
      at org.jboss.modules.ConcurrentClassLoader.performLoadClassUnchecked(ConcurrentClassLoader.java:468)
      at org.jboss.modules.ConcurrentClassLoader.performLoadClassChecked(ConcurrentClassLoader.java:456)
      at org.jboss.modules.ConcurrentClassLoader.performLoadClassChecked(ConcurrentClassLoader.java:423)
      at org.jboss.modules.ConcurrentClassLoader.performLoadClassChecked(ConcurrentClassLoader.java:423)
      at org.jboss.modules.ConcurrentClassLoader.performLoadClass(ConcurrentClassLoader.java:398)
      at org.jboss.modules.ConcurrentClassLoader.loadClass(ConcurrentClassLoader.java:120)
      ... 31 more

      This error does not prevent doing remote lookups but looks ugly when starting the JMS bridge...

      org.jboss.naming.remote.client.InitialContextFactory is trying to load org.jboss.naming.remote.client.ejb.RemoteNamingEjbClientContextSelector
      in its static initialization block.
      This class depends on org.jboss.ejb.client.ContextSelector which is in the org.jboss.ejb-client module.

      I don't want to add a dependency from org.jboss.as.messaging to org.jboss.ejb-client if I can avoid it.

      The org.jboss.naming.remote.client.InitialContextFactory defines a SETUP_EJB_CONTEXT property that I could set to false but this property is checked after trying to load the ejb-client class in the static block. afaict, loading the class only after checking the property would be enough to prevent having this error being displayed

      Attachments

        Activity

          People

            jaikiran Jaikiran Pai (Inactive)
            jmesnil1@redhat.com Jeff Mesnil
            Votes:
            0 Vote for this issue
            Watchers:
            2 Start watching this issue

            Dates

              Created:
              Updated:
              Resolved: