[jboss-dev-forums] [Design of POJO Server] - Re: Scoped domain with java2ParentDelegation=false loads cla

kabir.khan@jboss.com do-not-reply at jboss.com
Fri Oct 12 08:28:04 EDT 2007


ClassLoaderDomain.getResource() called on the scoped domain always seems to return null for any resource, and also blacklists it:

  |          ClassLoaderDomain myDomain = getClassLoaderDomain();
  |             URL blah = myDomain.getResource("org/jboss/test/aop/scopedextender/blah.txt"); //This file definitely exists
  |             System.out.println("---- FOUND blah.txt " + blah);
  | 

yields


  | 2007-10-12 11:33:46,015 TRACE [org.jboss.classloader.spi.base.BaseClassLoaderDomain] ClassLoaderDomain at 11b3435{aop.loading:loader=scopedextender1} trying to get resource org/jboss/test/aop/scopedextender/blah.txt from all exports null
  | 2007-10-12 11:34:10,906 TRACE [org.jboss.classloader.spi.ClassLoaderDomain] ClassLoaderDomain at 11b3435{aop.loading:loader=scopedextender1} org/jboss/test/aop/scopedextender/blah.txt matches parent afterFilter=<EVERYTHING>
  | 2007-10-12 11:34:10,921 TRACE [org.jboss.classloader.spi.ClassLoaderDomain] ClassLoaderDomain at 11b3435{aop.loading:loader=scopedextender1} get resource from parent org/jboss/test/aop/scopedextender/blah.txt parent=ClassLoaderDomain at 1f21056{<DEFAULT>}
  | 2007-10-12 11:34:10,921 TRACE [org.jboss.classloader.spi.ClassLoaderDomain] ClassLoaderDomain at 1f21056{<DEFAULT>} org/jboss/test/aop/scopedextender/blah.txt matches parent beforeFilter=<EVERYTHING>
  | 2007-10-12 11:34:10,921 TRACE [org.jboss.classloader.spi.ClassLoaderDomain] ClassLoaderDomain at 1f21056{<DEFAULT>} get resource from parent org/jboss/test/aop/scopedextender/blah.txt parent=org.jboss.system.NoAnnotationURLClassLoader at 56c3cf
  | 2007-10-12 11:34:10,921 TRACE [org.jboss.classloader.plugins.loader.ClassLoaderToLoaderAdapter] Resource org/jboss/test/aop/scopedextender/blah.txt NOT found in org.jboss.system.NoAnnotationURLClassLoader at 56c3cf
  | 2007-10-12 11:34:10,921 TRACE [org.jboss.classloader.spi.ClassLoaderDomain] ClassLoaderDomain at 1f21056{<DEFAULT>} resource not found in parent org/jboss/test/aop/scopedextender/blah.txt parent=org.jboss.system.NoAnnotationURLClassLoader at 56c3cf
  | 2007-10-12 11:34:10,921 TRACE [org.jboss.classloader.spi.base.BaseClassLoaderDomain] ClassLoaderDomain at 1f21056{<DEFAULT>} trying to get resource org/jboss/test/aop/scopedextender/blah.txt from all exports [VFSClassLoaderPolicy at c1a0a6]
  | 2007-10-12 11:34:10,921 TRACE [org.jboss.classloader.spi.filter.FilteredDelegateLoader] FilteredDelegateLoader at d63b75{delegate=VFSClassLoaderPolicy at c1a0a6} org/jboss/test/aop/scopedextender/blah.txt matches resource filter=[org.jboss.test.aop.scopedextender, aop-scopedextender-base.jar.META-INF, META-INF, aop-scopedextender-base.aop.META-INF, aop-scopedextender-base.jar.org.jboss.test.aop.scopedextender]
  | 2007-10-12 11:34:10,921 TRACE [org.jboss.classloader.spi.base.BaseClassLoader] BaseClassLoader at 1b28af8 get resource locally org/jboss/test/aop/scopedextender/blah.txt
  | 2007-10-12 11:34:10,937 TRACE [org.jboss.classloader.spi.base.BaseClassLoader] org.jboss.classloader.spi.base.BaseClassLoader$2 at d9be5a resource not found locally org/jboss/test/aop/scopedextender/blah.txt
  | 2007-10-12 11:34:11,156 TRACE [org.jboss.classloader.spi.ClassLoaderDomain] ClassLoaderDomain at 1f21056{<DEFAULT>} org/jboss/test/aop/scopedextender/blah.txt does NOT match parent afterFilter=<NOTHING>
  | 2007-10-12 11:34:11,156 TRACE [org.jboss.classloader.spi.ClassLoaderDomain] ClassLoaderDomain at 11b3435{aop.loading:loader=scopedextender1} resource not found in parent org/jboss/test/aop/scopedextender/blah.txt parent=ClassLoaderDomain at 1f21056{<DEFAULT>}
  | 2007-10-12 11:34:18,453 INFO  [STDOUT] ---- FOUND blah.txt null
  | 

The problem seems to be that no loaders are able to load up the org.jboss.test.aop.scopedextender package:

  |    private URL getResourceFromExports(BaseClassLoader classLoader, String name, boolean trace)
  |    {
  | ...
  |       String packageName = ClassLoaderUtils.getResourcePackageName(name);
  |       List<ClassLoaderInformation> list = classLoadersByPackageName.get(packageName); //This returns null
  |       if (trace)
  |          log.trace(this + " trying to get resource " + name + " from all exports " + list);
  |       if (list != null && list.isEmpty() == false)
  |       {
  | ...
  |       }
  |       // Here is not found in the exports so can we blacklist it?
  |       if (canBlackList)
  |          globalResourceBlackList.add(name);
  |       return null;
  |    }
  | 

Digging into this a bit, when registering the BaseClassLoader with the scoped domain there are no packages being registered since these are null in the BaseClassLoader's underlying VFSClassLoaderPolicy.packageNames.

  |    void registerClassLoader(BaseClassLoader classLoader)
  |    {
  |    ...
  |          ClassLoaderInformation info = new ClassLoaderInformation(classLoader, policy, order++);
  |          classLoaders.add(info);
  |          infos.put(classLoader, info);
  | 
  |          // Index the packages
  |          String[] packageNames = policy.getPackageNames();
  |          if (packageNames != null && info.getExported() != null) //both of these are null
  |          {
  |    ...
  |    }
  | 

My AS trunk is pretty out of date, so I will try refreshing that

View the original post : http://www.jboss.com/index.html?module=bb&op=viewtopic&p=4094524#4094524

Reply to the post : http://www.jboss.com/index.html?module=bb&op=posting&mode=reply&p=4094524



More information about the jboss-dev-forums mailing list