1 Reply Latest reply on Jan 11, 2006 8:39 AM by damo9f

    Classloader issues -- how to package jars, how to identify p


      We are having issues migrating to JBoss 4.0.3sp1. Our existing build process enforces layering by building independent jars for various layers. Some jars contain other jars.

      A couple basic questions I have are:

      If a class is in an archive, what other classes can it import?
      - .jar contents
      - .ear contents
      - .war
      - .har?

      I'm trying to read through the classloading architecture pages, but basic rules are really what would be most helpful here.

      Also, from jmx-console I notice a top-level jboss-service.xml classloader appearing for some of the classes in my stack trace -- does this classloader reference all .jars in server/myApp/lib? And if so can all classes in all those jars reference one another? How about .jars or other archives in the deploy directory?

      This is a real headache for us, and probably for others migrating, so any help would be much appreciated.

      stack trace:

       [exec] 18:02:37,770 INFO [STDOUT] com.fgm.imsma.ejb.PlaceBean.ejbRemove()
       [exec] 18:02:37,770 ERROR [LogInterceptor] Unexpected Error in method: public abstract java.lang.Object co
      m.fgm.imsma.ejb.PlaceRemote.add(java.lang.Object,boolean) throws java.rmi.RemoteException
       [exec] java.lang.NoClassDefFoundError: com/esri/arcgis/system/AoInitialize
       [exec] at com.fgm.imsma.gis.esri.EsriGisDatabaseClient.<init>(EsriGisDatabaseClient.java:30)
       [exec] at com.fgm.imsma.gis.esri.EsriClientProvider.newDatabaseClient(EsriClientProvider.java:42)
       [exec] at com.fgm.imsma.biz.interceptors.FeatureHandlingUtilities.<init>(FeatureHandlingUtilities.jav
      a:63)
       [exec] at com.fgm.imsma.biz.interceptors.FeatureHandlingUtilities.getInstance(FeatureHandlingUtilitie
      s.java:74)
       [exec] at com.fgm.imsma.biz.interceptors.GeoSpatialTrackingQueue.flush(GeoSpatialTrackingQueue.java:1
      47)
       [exec] at com.fgm.imsma.ejb.AbstractPojoBean.flushQueues(AbstractPojoBean.java:131)
       [exec] at com.fgm.imsma.ejb.AbstractPojoBean.add(AbstractPojoBean.java:183)
       [exec] at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
       [exec] at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
       [exec] at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
       [exec] at java.lang.reflect.Method.invoke(Method.java:585)
       [exec] at org.jboss.invocation.Invocation.performCall(Invocation.java:345)
       [exec] at org.jboss.ejb.StatelessSessionContainer$ContainerInterceptor.invoke(StatelessSessionContain
      er.java:214)
      


      class loader trace: (blank lines added for readability)
      [236565,RepositoryClassLoader,RMI TCP Connection(5)-10.10.80.56] loadClass org.jboss.mx.loading.UnifiedClassLoader3@24de7d{ url=file:/C:/eclipseWorkspace/imsma_dev/server/target/imsmaserver/imsmaserver/tmp/deploy/tmp39463jboss-service.xml ,addedOrder=2} name=com.fgm.imsma.gis.IGeoContext class=interface com.fgm.imsma.gis.IGeoContext cl=org.jboss.mx.loading.UnifiedClassLoader3@24de7d{ url=file:/C:/eclipseWorkspace/imsma_dev/server/target/imsmaserver/imsmaserver/tmp/deploy/tmp39463jboss-service.xml ,addedOrder=2}
      
      [236565,RepositoryClassLoader,RMI TCP Connection(5)-10.10.80.56] loadClass org.jboss.mx.loading.UnifiedClassLoader3@24de7d{ url=file:/C:/eclipseWorkspace/imsma_dev/server/target/imsmaserver/imsmaserver/tmp/deploy/tmp39463jboss-service.xml ,addedOrder=2} name=com.esri.arcgis.system.AoInitialize, loadClassDepth=0
      
      [236565,RepositoryClassLoader,RMI TCP Connection(5)-10.10.80.56] loadClassImpl, name=com.esri.arcgis.system.AoInitialize, resolve=false
      
      [236565,RepositoryClassLoader,RMI TCP Connection(5)-10.10.80.56] attempt(1) was: true for :org.jboss.mx.loading.UnifiedClassLoader3@24de7d{ url=file:/C:/eclipseWorkspace/imsma_dev/server/target/imsmaserver/imsmaserver/tmp/deploy/tmp39463jboss-service.xml ,addedOrder=2}
      
      [236565,LoadMgr3,RMI TCP Connection(5)-10.10.80.56] registerLoaderThread, ucl=org.jboss.mx.loading.UnifiedClassLoader3@24de7d{ url=file:/C:/eclipseWorkspace/imsma_dev/server/target/imsmaserver/imsmaserver/tmp/deploy/tmp39463jboss-service.xml ,addedOrder=2}, t=Thread[RMI TCP Connection(5)-10.10.80.56,5,RMI Runtime], prevT=null
      
      [236565,LoadMgr3,RMI TCP Connection(5)-10.10.80.56] Begin beginLoadTask, task=org.jboss.mx.loading.ClassLoadingTask@8c40ee{classname: com.esri.arcgis.system.AoInitialize, requestingThread: Thread[RMI TCP Connection(5)-10.10.80.56,5,RMI Runtime], requestingClassLoader: org.jboss.mx.loading.UnifiedClassLoader3@24de7d{ url=file:/C:/eclipseWorkspace/imsma_dev/server/target/imsmaserver/imsmaserver/tmp/deploy/tmp39463jboss-service.xml ,addedOrder=2}, loadedClass: nullnull, loadOrder: 2147483647, loadException: null, threadTaskCount: 0, state: 0, #CCE: 0}
      
      [236580,RepositoryClassLoader,RMI TCP Connection(5)-10.10.80.56] getResourceLocally(org.jboss.mx.loading.UnifiedClassLoader3@24de7d{ url=file:/C:/eclipseWorkspace/imsma_dev/server/target/imsmaserver/imsmaserver/tmp/deploy/tmp39463jboss-service.xml ,addedOrder=2}), name=com/esri/arcgis/system/AoInitialize.class, resURL:jar:file:/c:/eclipseWorkspace/imsma_dev/server/target/imsmaserver/imsmaserver/lib/arcobjects.jar!/com/esri/arcgis/system/AoInitialize.class
      
      [236580,RepositoryClassLoader,RMI TCP Connection(5)-10.10.80.56] getResourceLocally(org.jboss.mx.loading.UnifiedClassLoader3@b5c292{ url=file:/C:/eclipseWorkspace/imsma_dev/server/target/imsmaserver/imsmaserver/tmp/deploy/tmp39575imsmaejb-1.0.jar ,addedOrder=60}), name=com/esri/arcgis/system/AoInitialize.class, resURL:jar:file:/C:/eclipseWorkspace/imsma_dev/server/target/imsmaserver/imsmaserver/tmp/deploy/tmp39575imsmaejb-1.0.jar-contents/arcobjects.jar!/com/esri/arcgis/system/AoInitialize.class
      
      [236580,LoadMgr3,RMI TCP Connection(5)-10.10.80.56] scheduleTask(1), created subtask: {t=Thread[RMI TCP Connection(5)-10.10.80.56,5,RMI Runtime], ucl=org.jboss.mx.loading.UnifiedClassLoader3@24de7d{ url=file:/C:/eclipseWorkspace/imsma_dev/server/target/imsmaserver/imsmaserver/tmp/deploy/tmp39463jboss-service.xml ,addedOrder=2}, name=com.esri.arcgis.system.AoInitialize, requestingThread=Thread[RMI TCP Connection(5)-10.10.80.56,5,RMI Runtime], order=2, releaseInNextTask=false}
      
      [236580,LoadMgr3,RMI TCP Connection(5)-10.10.80.56] End beginLoadTask, task=org.jboss.mx.loading.ClassLoadingTask@8c40ee{classname: com.esri.arcgis.system.AoInitialize, requestingThread: Thread[RMI TCP Connection(5)-10.10.80.56,5,RMI Runtime], requestingClassLoader: org.jboss.mx.loading.UnifiedClassLoader3@24de7d{ url=file:/C:/eclipseWorkspace/imsma_dev/server/target/imsmaserver/imsmaserver/tmp/deploy/tmp39463jboss-service.xml ,addedOrder=2}, loadedClass: nullnull, loadOrder: 2147483647, loadException: null, threadTaskCount: 1, state: 1, #CCE: 0}
      
      [236580,LoadMgr3,RMI TCP Connection(5)-10.10.80.56] Continue nextTask(1), task=org.jboss.mx.loading.ClassLoadingTask@8c40ee{classname: com.esri.arcgis.system.AoInitialize, requestingThread: Thread[RMI TCP Connection(5)-10.10.80.56,5,RMI Runtime], requestingClassLoader: org.jboss.mx.loading.UnifiedClassLoader3@24de7d{ url=file:/C:/eclipseWorkspace/imsma_dev/server/target/imsmaserver/imsmaserver/tmp/deploy/tmp39463jboss-service.xml ,addedOrder=2}, loadedClass: nullnull, loadOrder: 2147483647, loadException: null, threadTaskCount: 1, state: 1, #CCE: 0}
      
      [236580,LoadMgr3,RMI TCP Connection(5)-10.10.80.56] Begin nextTask(0), loadTask=org.jboss.mx.loading.ClassLoadingTask@8c40ee{classname: com.esri.arcgis.system.AoInitialize, requestingThread: Thread[RMI TCP Connection(5)-10.10.80.56,5,RMI Runtime], requestingClassLoader: org.jboss.mx.loading.UnifiedClassLoader3@24de7d{ url=file:/C:/eclipseWorkspace/imsma_dev/server/target/imsmaserver/imsmaserver/tmp/deploy/tmp39463jboss-service.xml ,addedOrder=2}, loadedClass: nullnull, loadOrder: 2147483647, loadException: null, threadTaskCount: 1, state: 1, #CCE: 0}
      
      [236580,LoadMgr3,RMI TCP Connection(5)-10.10.80.56] Running threadTask={t=Thread[RMI TCP Connection(5)-10.10.80.56,5,RMI Runtime], ucl=org.jboss.mx.loading.UnifiedClassLoader3@24de7d{ url=file:/C:/eclipseWorkspace/imsma_dev/server/target/imsmaserver/imsmaserver/tmp/deploy/tmp39463jboss-service.xml ,addedOrder=2}, name=com.esri.arcgis.system.AoInitialize, requestingThread=Thread[RMI TCP Connection(5)-10.10.80.56,5,RMI Runtime], order=2, releaseInNextTask=false}
      
      [236580,RepositoryClassLoader,RMI TCP Connection(5)-10.10.80.56] loadClassLocally, org.jboss.mx.loading.UnifiedClassLoader3@24de7d{ url=file:/C:/eclipseWorkspace/imsma_dev/server/target/imsmaserver/imsmaserver/tmp/deploy/tmp39463jboss-service.xml ,addedOrder=2} name=com.esri.arcgis.system.AoInitialize
      
      [236580,RepositoryClassLoader,RMI TCP Connection(5)-10.10.80.56] findClass, name=com.esri.arcgis.system.AoInitialize
      
      [236596,UnifiedClassLoader,RMI TCP Connection(5)-10.10.80.56] getPermissions, url=file:/C:/eclipseWorkspace/imsma_dev/server/target/imsmaserver/imsmaserver/tmp/deploy/tmp39463jboss-service.xml, origURL=file:/c:/eclipseWorkspace/imsma_dev/server/target/imsmaserver/imsmaserver/conf/jboss-service.xml -> java.security.Permissions@1faf398 (
       (java.io.FilePermission c:\eclipseWorkspace\imsma_dev\server\target\imsmaserver\imsmaserver\conf\jboss-service.xml read)
       (java.io.FilePermission c:\eclipseWorkspace\imsma_dev\server\target\imsmaserver\imsmaserver\lib\arcobjects.jar read)
       (java.lang.RuntimePermission stopThread)
       (java.net.SocketPermission localhost:1024- listen,resolve)
       (java.util.PropertyPermission java.version read)
       (java.util.PropertyPermission java.vm.name read)
       (java.util.PropertyPermission java.vm.vendor read)
       (java.util.PropertyPermission os.name read)
       (java.util.PropertyPermission java.vendor.url read)
       (java.util.PropertyPermission java.vm.specification.vendor read)
       (java.util.PropertyPermission os.version read)
       (java.util.PropertyPermission java.specification.vendor read)
       (java.util.PropertyPermission java.class.version read)
       (java.util.PropertyPermission java.specification.name read)
       (java.util.PropertyPermission file.separator read)
       (java.util.PropertyPermission os.arch read)
       (java.util.PropertyPermission java.vm.version read)
       (java.util.PropertyPermission java.vendor read)
       (java.util.PropertyPermission java.specification.version read)
       (java.util.PropertyPermission java.vm.specification.version read)
       (java.util.PropertyPermission java.vm.specification.name read)
       (java.util.PropertyPermission path.separator read)
       (java.util.PropertyPermission line.separator read)
      )
      
      
      [236596,RepositoryClassLoader,RMI TCP Connection(5)-10.10.80.56] loadClass org.jboss.mx.loading.UnifiedClassLoader3@24de7d{ url=file:/C:/eclipseWorkspace/imsma_dev/server/target/imsmaserver/imsmaserver/tmp/deploy/tmp39463jboss-service.xml ,addedOrder=2} name=com.linar.jintegra.RemoteObjRef, loadClassDepth=1
      
      [236596,RepositoryClassLoader,RMI TCP Connection(5)-10.10.80.56] loadClassImpl, name=com.linar.jintegra.RemoteObjRef, resolve=false
      
      [236596,RepositoryClassLoader,RMI TCP Connection(5)-10.10.80.56] attempt(2) was: true for :org.jboss.mx.loading.UnifiedClassLoader3@24de7d{ url=file:/C:/eclipseWorkspace/imsma_dev/server/target/imsmaserver/imsmaserver/tmp/deploy/tmp39463jboss-service.xml ,addedOrder=2}
      
      [236611,LoadMgr3,RMI TCP Connection(5)-10.10.80.56] Begin beginLoadTask, task=org.jboss.mx.loading.ClassLoadingTask@104966e{classname: com.linar.jintegra.RemoteObjRef, requestingThread: Thread[RMI TCP Connection(5)-10.10.80.56,5,RMI Runtime], requestingClassLoader: org.jboss.mx.loading.UnifiedClassLoader3@24de7d{ url=file:/C:/eclipseWorkspace/imsma_dev/server/target/imsmaserver/imsmaserver/tmp/deploy/tmp39463jboss-service.xml ,addedOrder=2}, loadedClass: nullnull, loadOrder: 2147483647, loadException: null, threadTaskCount: 0, state: 0, #CCE: 0}
      
      [236611,RepositoryClassLoader,RMI TCP Connection(5)-10.10.80.56] loadClassLocally, org.jboss.mx.loading.UnifiedClassLoader3@24de7d{ url=file:/C:/eclipseWorkspace/imsma_dev/server/target/imsmaserver/imsmaserver/tmp/deploy/tmp39463jboss-service.xml ,addedOrder=2} name=com.linar.jintegra.RemoteObjRef
      
      [236611,RepositoryClassLoader,RMI TCP Connection(5)-10.10.80.56] findClass, name=com.linar.jintegra.RemoteObjRef
      
      [236611,RepositoryClassLoader,RMI TCP Connection(5)-10.10.80.56] CFNE: Adding to blacklist: com.linar.jintegra.RemoteObjRef
      
      [236611,RepositoryClassLoader,RMI TCP Connection(5)-10.10.80.56] CFNE: Adding to blacklist: com.linar.jintegra.RemoteObjRef
      
      [236611,RepositoryClassLoader,RMI TCP Connection(5)-10.10.80.56] loadClassLocally, org.jboss.mx.loading.UnifiedClassLoader3@24de7d{ url=file:/C:/eclipseWorkspace/imsma_dev/server/target/imsmaserver/imsmaserver/tmp/deploy/tmp39463jboss-service.xml ,addedOrder=2} name=com.linar.jintegra.RemoteObjRef not found
      
      [236611,LoadMgr3,RMI TCP Connection(5)-10.10.80.56] End beginLoadTask, ClassNotFoundException
      
      [236611,RepositoryClassLoader,RMI TCP Connection(5)-10.10.80.56] release(2) for :org.jboss.mx.loading.UnifiedClassLoader3@24de7d{ url=file:/C:/eclipseWorkspace/imsma_dev/server/target/imsmaserver/imsmaserver/tmp/deploy/tmp39463jboss-service.xml ,addedOrder=2}
      
      [236611,RepositoryClassLoader,RMI TCP Connection(5)-10.10.80.56] released, holds: 1
      
      [236611,RepositoryClassLoader,RMI TCP Connection(5)-10.10.80.56] loadClass org.jboss.mx.loading.UnifiedClassLoader3@24de7d{ url=file:/C:/eclipseWorkspace/imsma_dev/server/target/imsmaserver/imsmaserver/tmp/deploy/tmp39463jboss-service.xml ,addedOrder=2} name=com.linar.jintegra.RemoteObjRef not found
      
      [236611,RepositoryClassLoader,RMI TCP Connection(5)-10.10.80.56] loadClassLocally, org.jboss.mx.loading.UnifiedClassLoader3@24de7d{ url=file:/C:/eclipseWorkspace/imsma_dev/server/target/imsmaserver/imsmaserver/tmp/deploy/tmp39463jboss-service.xml ,addedOrder=2} name=com.esri.arcgis.system.AoInitialize not found
      
      [236767,ClassLoadingTask,RMI TCP Connection(5)-10.10.80.56] setLoadedError, error=java.lang.NoClassDefFoundError: com/linar/jintegra/RemoteObjRef
      
      [236767,LoadMgr3,RMI TCP Connection(5)-10.10.80.56] Run failed with exception
      
      java.lang.NoClassDefFoundError: com/linar/jintegra/RemoteObjRef
       at java.lang.ClassLoader.defineClass1(Native Method)
       at java.lang.ClassLoader.defineClass(ClassLoader.java:620)
       at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:124)
       at java.net.URLClassLoader.defineClass(URLClassLoader.java:260)
       at java.net.URLClassLoader.access$100(URLClassLoader.java:56)
       at java.net.URLClassLoader$1.run(URLClassLoader.java:195)
       at java.security.AccessController.doPrivileged(Native Method)
       at java.net.URLClassLoader.findClass(URLClassLoader.java:188)
       at org.jboss.mx.loading.RepositoryClassLoader.findClassLocally(RepositoryClassLoader.java:633)
       at org.jboss.mx.loading.RepositoryClassLoader.findClass(RepositoryClassLoader.java:613)
       at java.lang.ClassLoader.loadClass(ClassLoader.java:306)
       at org.jboss.mx.loading.RepositoryClassLoader.loadClassLocally(RepositoryClassLoader.java:162)
       at org.jboss.mx.loading.ClassLoadingTask$ThreadTask.run(ClassLoadingTask.java:119)
       at org.jboss.mx.loading.LoadMgr3.nextTask(LoadMgr3.java:385)
       at org.jboss.mx.loading.RepositoryClassLoader.loadClassImpl(RepositoryClassLoader.java:481)
       at org.jboss.mx.loading.RepositoryClassLoader.loadClass(RepositoryClassLoader.java:377)
       at java.lang.ClassLoader.loadClass(ClassLoader.java:251)
       at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:319)
       at com.fgm.imsma.gis.esri.EsriGisDatabaseClient.<init>(EsriGisDatabaseClient.java:30)
       at com.fgm.imsma.gis.esri.EsriClientProvider.newDatabaseClient(EsriClientProvider.java:42)
       at com.fgm.imsma.biz.interceptors.FeatureHandlingUtilities.<init>(FeatureHandlingUtilities.java:63)
       at com.fgm.imsma.biz.interceptors.FeatureHandlingUtilities.getInstance(FeatureHandlingUtilities.java:74)
       at com.fgm.imsma.biz.interceptors.GeoSpatialTrackingQueue.flush(GeoSpatialTrackingQueue.java:147)
       at com.fgm.imsma.ejb.AbstractPojoBean.flushQueues(AbstractPojoBean.java:131)
       at com.fgm.imsma.ejb.AbstractPojoBean.add(AbstractPojoBean.java:183)
       at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
       at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
       at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
       at java.lang.reflect.Method.invoke(Method.java:585)
       at org.jboss.invocation.Invocation.performCall(Invocation.java:345)
       at org.jboss.ejb.StatelessSessionContainer$ContainerInterceptor.invoke(StatelessSessionContainer.java:214)
       at org.jboss.resource.connectionmanager.CachedConnectionInterceptor.invoke(CachedConnectionInterceptor.java:149)
       at org.jboss.webservice.server.ServiceEndpointInterceptor.invoke(ServiceEndpointInterceptor.java:54)
       at org.jboss.ejb.plugins.CallValidationInterceptor.invoke(CallValidationInterceptor.java:48)
       at org.jboss.ejb.plugins.AbstractTxInterceptor.invokeNext(AbstractTxInterceptor.java:106)
       at org.jboss.ejb.plugins.AbstractTxInterceptorBMT.invokeNext(AbstractTxInterceptorBMT.java:158)
       at org.jboss.ejb.plugins.TxInterceptorBMT.invoke(TxInterceptorBMT.java:62)
       at org.jboss.ejb.plugins.StatelessSessionInstanceInterceptor.invoke(StatelessSessionInstanceInterceptor.java:154)
       at org.jboss.ejb.plugins.SecurityInterceptor.invoke(SecurityInterceptor.java:153)
       at org.jboss.ejb.plugins.LogInterceptor.invoke(LogInterceptor.java:192)
       at org.jboss.ejb.plugins.ProxyFactoryFinderInterceptor.invoke(ProxyFactoryFinderInterceptor.java:122)
       at org.jboss.ejb.SessionContainer.internalInvoke(SessionContainer.java:624)
       at org.jboss.ejb.Container.invoke(Container.java:873)
       at sun.reflect.GeneratedMethodAccessor83.invoke(Unknown Source)
       at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
       at java.lang.reflect.Method.invoke(Method.java:585)
       at org.jboss.mx.interceptor.ReflectedDispatcher.invoke(ReflectedDispatcher.java:141)
       at org.jboss.mx.server.Invocation.dispatch(Invocation.java:80)
       at org.jboss.mx.server.Invocation.invoke(Invocation.java:72)
       at org.jboss.mx.server.AbstractMBeanInvoker.invoke(AbstractMBeanInvoker.java:245)
       at org.jboss.mx.server.MBeanServerImpl.invoke(MBeanServerImpl.java:644)
       at org.jboss.invocation.jrmp.server.JRMPInvoker$MBeanServerAction.invoke(JRMPInvoker.java:805)
       at org.jboss.invocation.jrmp.server.JRMPInvoker.invoke(JRMPInvoker.java:406)
       at sun.reflect.GeneratedMethodAccessor82.invoke(Unknown Source)
       at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
       at java.lang.reflect.Method.invoke(Method.java:585)
       at sun.rmi.server.UnicastServerRef.dispatch(UnicastServerRef.java:294)
       at sun.rmi.transport.Transport$1.run(Transport.java:153)
       at java.security.AccessController.doPrivileged(Native Method)
       at sun.rmi.transport.Transport.serviceCall(Transport.java:149)
       at sun.rmi.transport.tcp.TCPTransport.handleMessages(TCPTransport.java:460)
       at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run(TCPTransport.java:701)
       at java.lang.Thread.run(Thread.java:595)
      
      
      


        • 1. Re: Classloader issues -- Problem Fixed

          I have made progress on this issue since posting the question.

          The underlying issue is that JBoss reports the wrong class missing, as noted elsewhere in these forums (version 4.0.3sp1).

          What makes this particularly insidious is that JBoss reports neither the root cause class, nor the class it is trying to load, but a class "in between". In our case, we are trying to do new A(). A imports B and B imports C. C seems to be the root cause and B is reported as not found.

          To debug the issue, I turned classloading tracing on via

           <appender name="UCL" class="org.apache.log4j.RollingFileAppender">
           <param name="File" value="${jboss.server.home.dir}/log/ucl.log"/>
           <param name="MaxFileSize" value="5MB"/>
           <param name="MaxBackupIndex" value="1"/>
           <layout class="org.apache.log4j.PatternLayout">
           <param name="ConversionPattern" value="[%r,%c{1},%t] %m%n"/>
           </layout>
           </appender>
          
           <category name="org.jboss.mx.loading" additivity="false">
           <priority value="TRACE" class="org.jboss.logging.XLevel"/>
           <appender-ref ref="UCL"/>
           </category>
          


          (note that most JBoss pages mention the TRACE/XLevel bit but leave out the appender configuration. Tracing does not work for us without the appender bit.)

          I painstakingly went through the log right around the stack trace in this file and found another class from another jar that appeared in the log. Adding THIS jar seems to have addressed the problem (at least, the system now exhibits a different error).