[jboss-user] [JBoss Microcontainer Development] - Wildcard support in Dynamic-imports

Ales Justin do-not-reply at jboss.com
Tue Jun 8 10:38:24 EDT 2010


Ales Justin [http://community.jboss.org/people/alesj] replied to the discussion

"Wildcard support in Dynamic-imports"

To view the discussion, visit: http://community.jboss.org/message/546799#546799

--------------------------------------------------------------
It now boils down to this prototype (with lots of details yet to impl).
Is this what you had in mind - roughly speaking :-)?

public class WildcardDelegateLoader extends FilteredDelegateLoader
{
   private Controller controller;
   private Module module;
   private VersionRange range;
 
   public WildcardDelegateLoader(Controller controller, ClassLoaderPolicyFactory factory, ClassFilter filter, RequirementDependencyItem item)
   {
      super(factory, filter);
      if (controller == null)
         throw new IllegalArgumentException("Null controller");
      if (item == null)
         throw new IllegalArgumentException("Null item");
      Requirement requirement = item.getRequirement();
      if (requirement instanceof PackageRequirement == false)
         throw new IllegalArgumentException("Illegal package requirement: " + requirement);
 
      this.controller = controller;
      this.module = item.getModule();
      this.range = ((PackageRequirement)requirement).getVersionRange();
   }
 
   protected Module resolve(String pckg)
   {
      Requirement requirement = new PackageRequirement(pckg, range);
      // TODO -- add this DI to module? new DI impl to remove delegate from policy when resolved module goes away?
      RequirementDependencyItem item = new RequirementDependencyItem(module, requirement, module.getClassLoaderState(), ControllerState.INSTALLED);
      if (item.resolve(controller))
      {
         ClassLoaderPolicy policy = getPolicy();
         // TODO -- add delegate to policy
      }
      return item.getResolvedModule();
   }
 
   @Override
   protected Class<?> doLoadClass(String className)
   {
      Module resolvedModule = resolve(ClassLoaderUtils.getClassPackageName(className));
      try
      {
         return resolvedModule != null ? resolvedModule.loadClass(className) : null;
      }
      catch (ClassNotFoundException e)
      {
         throw new RuntimeException(e);
      }
   }
 
   @Override
   protected URL doGetResource(String name)
   {
      Module resolvedModule = resolve(ClassLoaderUtils.getResourcePackageName(name)); // TODO -- extract package name
      return resolvedModule != null ? resolvedModule.getResource(name) : null;
   }
 
   @Override
   protected void doGetResources(String name, Set<URL> urls) throws IOException
   {
      Module resolvedModule = resolve(ClassLoaderUtils.getResourcePackageName(name)); // TODO -- extract package name
      if (resolvedModule != null)
      {
         Enumeration<URL> ue = resolvedModule.getResources(name);
         while (ue.hasMoreElements())
            urls.add(ue.nextElement());
      }
   }
 
   @Override
   protected Package doGetPackage(String name)
   {
      return null; // TODO -- how to get package from here, from resolved Module?
   }
 
   @Override
   protected void doGetPackages(Set<Package> packages)
   {
      // do nothing?
   }
}


--------------------------------------------------------------

Reply to this message by going to Community
[http://community.jboss.org/message/546799#546799]

Start a new discussion in JBoss Microcontainer Development at Community
[http://community.jboss.org/choose-container!input.jspa?contentType=1&containerType=14&container=2115]

-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.jboss.org/pipermail/jboss-user/attachments/20100608/526b7e56/attachment.html 


More information about the jboss-user mailing list