6 Replies Latest reply on May 24, 2011 1:55 PM by jason.greene

    SAR cannot specify multiple module dependecies

    matt.drees

      I have a SAR I am trying to deploy.  I want it to depend on both the "org.apache.log4j" module and the "org.jboss.common-core" module (I'd like it to log a message on startup, and also bind itself into JNDI with NonSerializableObjectFactory.

       

      As indicated on https://docs.jboss.org/author/display/AS7/Class+Loading+in+AS7, the right way to do this is with a Manifest entry in my SAR that looks like:

       

       

      Dependencies: org.apache.log4j org.jboss.common-core
      

       

      However, when I do this, I get a CNFE for org.jboss.util.naming.NonSerializableFactory:

       

       

      10:40:41,727 WARN  [org.ccci.ha.HighAvailabilityDataSource] (MSC service thread 1-2) Starting up HighAvailabilityDataSource ccpDatasource in PRIMARY mode
      10:40:41,728 INFO  [stdout] (MSC service thread 1-2) fullName=jdbc/ccpDatasource
      10:40:41,729 ERROR [org.jboss.msc.service.fail] (MSC service thread 1-2) MSC00001: Failed to start service jboss.mbean.service."jboss.jca:name=jdbc/ccpDatasource,service=DataSourceBinding".start: org.jboss.msc.service.StartException in service jboss.mbean.service."jboss.jca:name=jdbc/ccpDatasource,service=DataSourceBinding".start: Failed to execute legacy service start() method
          at org.jboss.as.service.StartStopService.start(StartStopService.java:51)
          at org.jboss.msc.service.ServiceControllerImpl$StartTask.run(ServiceControllerImpl.java:1675)
          at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886) [:1.6.0_24]
          at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908) [:1.6.0_24]
          at java.lang.Thread.run(Thread.java:680) [:1.6.0_24]
      Caused by: java.lang.reflect.InvocationTargetException
          at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) [:1.6.0_24]
          at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) [:1.6.0_24]
          at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) [:1.6.0_24]
          at java.lang.reflect.Method.invoke(Method.java:597) [:1.6.0_24]
          at org.jboss.as.service.AbstractService.invokeLifecycleMethod(AbstractService.java:59)
          at org.jboss.as.service.StartStopService.start(StartStopService.java:49)
          ... 4 more
      Caused by: java.lang.NoClassDefFoundError: org/jboss/util/naming/NonSerializableFactory
          at org.ccci.ha.HighAvailabilityDataSource.rebind(HighAvailabilityDataSource.java:53)
          at org.ccci.ha.HighAvailabilityDataSource.start(HighAvailabilityDataSource.java:34)
          ... 10 more
      Caused by: java.lang.ClassNotFoundException: org.jboss.util.naming.NonSerializableFactory from [Module "deployment.jboss-addons-3.0-SNAPSHOT.sar:main" from Service Module Loader]
          at org.jboss.modules.ModuleClassLoader.findClass(ModuleClassLoader.java:188) [:1.0.0.CR2]
          at org.jboss.modules.ConcurrentClassLoader.performLoadClassChecked(ConcurrentClassLoader.java:357) [:1.0.0.CR2]
          at org.jboss.modules.ConcurrentClassLoader.performLoadClassChecked(ConcurrentClassLoader.java:329) [:1.0.0.CR2]
          at org.jboss.modules.ConcurrentClassLoader.performLoadClass(ConcurrentClassLoader.java:306) [:1.0.0.CR2]
          at org.jboss.modules.ConcurrentClassLoader.loadClass(ConcurrentClassLoader.java:100) [:1.0.0.CR2]
          ... 12 more
      

       

      Note, however, that the logging is working correctly, so Log4j is being resolved.

       

      So, on a whim, I switched up my Dependencies entry in the Manifest:

       

      Dependencies: org.jboss.common-core org.apache.log4j
      

       

      This, however, gives me a CNFE for org.apache.log4j.Logger:

       

       

      10:39:43,720 INFO  [org.jboss.as.server.deployment] (MSC service thread 1-1) Starting deployment of "jboss-addons-3.0-SNAPSHOT.sar"
      10:39:43,744 ERROR [org.jboss.msc.service.fail] (MSC service thread 1-2) MSC00001: Failed to start service jboss.deployment.unit."jboss-addons-3.0-SNAPSHOT.sar".INSTALL: org.jboss.msc.service.StartException in service jboss.deployment.unit."jboss-addons-3.0-SNAPSHOT.sar".INSTALL: Failed to process phase INSTALL of deployment "jboss-addons-3.0-SNAPSHOT.sar"
          at org.jboss.as.server.deployment.DeploymentUnitPhaseService.start(DeploymentUnitPhaseService.java:121)
          at org.jboss.msc.service.ServiceControllerImpl$StartTask.run(ServiceControllerImpl.java:1675)
          at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886) [:1.6.0_24]
          at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908) [:1.6.0_24]
          at java.lang.Thread.run(Thread.java:680) [:1.6.0_24]
      Caused by: java.lang.NoClassDefFoundError: Lorg/apache/log4j/Logger;
          at java.lang.Class.getDeclaredFields0(Native Method) [:1.6.0_24]
          at java.lang.Class.privateGetDeclaredFields(Class.java:2291) [:1.6.0_24]
          at java.lang.Class.getDeclaredFields(Class.java:1743) [:1.6.0_24]
          at org.jboss.as.server.deployment.reflect.ClassReflectionIndex.<init>(ClassReflectionIndex.java:57)
          at org.jboss.as.server.deployment.reflect.DeploymentReflectionIndex.getClassIndex(DeploymentReflectionIndex.java:65)
          at org.jboss.as.service.ParsedServiceDeploymentProcessor.addServices(ParsedServiceDeploymentProcessor.java:112)
          at org.jboss.as.service.ParsedServiceDeploymentProcessor.deploy(ParsedServiceDeploymentProcessor.java:102)
          at org.jboss.as.server.deployment.DeploymentUnitPhaseService.start(DeploymentUnitPhaseService.java:115)
          ... 4 more
      Caused by: java.lang.ClassNotFoundException: org.apache.log4j.Logger from [Module "deployment.jboss-addons-3.0-SNAPSHOT.sar:main" from Service Module Loader]
          at org.jboss.modules.ModuleClassLoader.findClass(ModuleClassLoader.java:188) [:1.0.0.CR2]
          at org.jboss.modules.ConcurrentClassLoader.performLoadClassChecked(ConcurrentClassLoader.java:357) [:1.0.0.CR2]
          at org.jboss.modules.ConcurrentClassLoader.performLoadClassChecked(ConcurrentClassLoader.java:329) [:1.0.0.CR2]
          at org.jboss.modules.ConcurrentClassLoader.performLoadClass(ConcurrentClassLoader.java:306) [:1.0.0.CR2]
          at org.jboss.modules.ConcurrentClassLoader.loadClass(ConcurrentClassLoader.java:100) [:1.0.0.CR2]
          ... 12 more
      

       

      I later commented out the logging, and verified that NonSerializableFactory is in fact being loaded.  (It fails for another reason, but I'll get to that in another post.)

       

      So, it appears that only the first entry in the Dependencies: manifest entry gets resolved by Jboss Modules.  This looks like a bug, right?  I don't think I'm just screwing up the manifest syntax or something.