5 Replies Latest reply on May 9, 2008 12:19 PM by aloubyansky

    ejb-client-jar and manifest Class-Path

    aloubyansky

      Issue http://jira.jboss.com/jira/browse/EJBTHREE-862 and ejb3 core spec chapter 20.6 example.

      I wrote a testcase based on the example in the spec. It fails to deploy. E.g. there is externalrefscoped-second.ear. It contains the ejb jar (called externalrefscoped-second-ejb.jar) and the jar with the client view interfaces of the ejb (called externalrefscoped-second-client-view.jar). The ejb jar doesn't include the client view interfaces but references the jar with them by the ejb-client-view element in the ejb-jar.xml and manifest.mf/Class-Path entry.

      Here is the stack trace of the failed deployment

      Caused by: java.lang.NoClassDefFoundError: org/jboss/ejb3/test/externalrefscoped/Second
       at java.lang.ClassLoader.defineClass1(Native Method)
       at java.lang.ClassLoader.defineClass(ClassLoader.java:620)
       at org.jboss.classloader.spi.base.BaseClassLoader.access$200(BaseClassLoader.java:63)
       at org.jboss.classloader.spi.base.BaseClassLoader$2.run(BaseClassLoader.java:502)
       at org.jboss.classloader.spi.base.BaseClassLoader$2.run(BaseClassLoader.java:462)
       at java.security.AccessController.doPrivileged(Native Method)
       at org.jboss.classloader.spi.base.BaseClassLoader.loadClassLocally(BaseClassLoader.java:460)
       at org.jboss.classloader.spi.base.BaseClassLoader.loadClassLocally(BaseClassLoader.java:437)
       at org.jboss.classloader.spi.base.BaseDelegateLoader.loadClass(BaseDelegateLoader.java:134)
       at org.jboss.classloader.spi.filter.FilteredDelegateLoader.loadClass(FilteredDelegateLoader.java:131)
       at org.jboss.classloader.spi.base.ClassLoadingTask$ThreadTask.run(ClassLoadingTask.java:452)
       at org.jboss.classloader.spi.base.ClassLoaderManager.nextTask(ClassLoaderManager.java:254)
       at org.jboss.classloader.spi.base.ClassLoaderManager.process(ClassLoaderManager.java:148)
       at org.jboss.classloader.spi.base.BaseClassLoaderDomain.loadClass(BaseClassLoaderDomain.java:196)
       at org.jboss.classloader.spi.base.BaseClassLoaderDomain.loadClass(BaseClassLoaderDomain.java:1009)
       at org.jboss.classloader.spi.base.BaseClassLoader.loadClassFromDomain(BaseClassLoader.java:728)
       at org.jboss.classloader.spi.base.BaseClassLoader.loadClass(BaseClassLoader.java:372)
       at java.lang.ClassLoader.loadClass(ClassLoader.java:251)
       at org.jboss.ejb3.Ejb3AnnotationHandler.populateBaseInfo(Ejb3AnnotationHandler.java:345)
       at org.jboss.ejb3.Ejb3DescriptorHandler.populateBaseInfo(Ejb3DescriptorHandler.java:325)
       at org.jboss.ejb3.Ejb3AnnotationHandler.getContainers(Ejb3AnnotationHandler.java:193)
       at org.jboss.ejb3.Ejb3Deployment.deployElement(Ejb3Deployment.java:638)
       at org.jboss.ejb3.Ejb3Deployment.deployElement(Ejb3Deployment.java:598)
       at org.jboss.ejb3.Ejb3Deployment.deployUrl(Ejb3Deployment.java:580)
       at org.jboss.ejb3.Ejb3Deployment.deploy(Ejb3Deployment.java:546)
       at org.jboss.ejb3.Ejb3Deployment.create(Ejb3Deployment.java:458)
       at org.jboss.ejb3.deployers.Ejb3Deployer.deploy(Ejb3Deployer.java:176)


      It seems like the manifest.mf/Class-Path is ignored here.

        • 1. Re: ejb-client-jar and manifest Class-Path
          starksm64

          It should be in the client deployment classpath metadata, but its not used by the ClientLauncher currently. Using the mc and vfs class loader in the ClientLauncher was what I was starting to work on when the jndi name issues came up.

          • 2. Re: ejb-client-jar and manifest Class-Path
            aloubyansky

            But in this case there is no application client. It's just a jar which contains the bean's interface.

            • 3. Re: ejb-client-jar and manifest Class-Path
              starksm64

              That should be working then as far as I know. Let me take a look at the externalrefscoped deployment classpath metadata I see.

              • 4. Re: ejb-client-jar and manifest Class-Path
                starksm64

                I don't see any use of the manifest Class-Path in this ear:

                [576][valkyrie: core]$ java -cp /tmp ListJar /Users/svn/JBossAS/projects/ejb3/core/target/test-lib/externalrefscoped-first.ear
                /Users/svn/JBossAS/projects/ejb3/core/target/test-lib/externalrefscoped-first.ear
                +- META-INF/MANIFEST.MF
                +- META-INF/application.xml
                +- externalrefscoped-first-client-view.jar (archive)
                | +- META-INF/MANIFEST.MF
                | +- org/jboss/ejb3/test/externalrefscoped/First.class
                +- externalrefscoped-first-ejb.jar (archive)
                | +- META-INF/MANIFEST.MF
                | +- org/jboss/ejb3/test/externalrefscoped/FirstBean.class
                | +- META-INF/ejb-jar.xml
                +- externalrefscoped-second-client-view.jar (archive)
                | +- META-INF/MANIFEST.MF
                | +- org/jboss/ejb3/test/externalrefscoped/Second.class
                Done
                



                • 5. Re: ejb-client-jar and manifest Class-Path
                  aloubyansky

                  Yes, it was missing. I created manifest.mf in META-INF next to the ejb-jar.xml and assumed it would be picked up. But it didn't work. Now I am using ant's manifest task and it deploys. Thanks.