Community

Wildcard support in Dynamic-imports

reply from Ales Justin in JBoss Microcontainer Development - View the full discussion
public class Module {

    public DelegateLoader resolveWildcard(...)

    {

         WildcardDelegateLoader result = new WilcardDelegateLoader(...);

         return result.resolve(...); // HERE ??

    }

}

I don't understand the idea behind resolve().

 

I thought we would simply create a single WildcardDelegateLoader for the whole wildcard requirement,

which would then get hit for every not-yet-resolved class/resource lookup.

Resulting in creating new DelegateLoader, and adding that to existing delegates -- before our wildcard "creator".

 

e.g.

 

class WildcardDelegateLoader extends FilteredDelegateLoader
{
   ...
 
   protected DelegateLoader resolve(String pckg)
   {
      Requirement requirement = new PackageRequirement(pckg, range);
      WildcardRequirementDependencyItem item = new WildcardRequirementDependencyItem(module, requirement, module.getClassLoaderState());
      if (item.resolve(controller))
      {
         List<RequirementDependencyItem> items = module.getDependencies(); // should not be null, as this delegate was created from a requirement
         items.add(item);
         module.addIDependOn(item);
         
         Module resolvedModule = item.getResolvedModule();
         if (resolvedModule instanceof ClassLoaderPolicyModule)
         {
            ClassLoaderPolicyModule clpm = (ClassLoaderPolicyModule) resolvedModule;
            DelegateLoader loader = clpm.getDelegateLoader(module, requirement);
            item.setLoader(loader);
 
            ClassLoaderPolicy policy = getPolicy();
            // TODO -- add new loader to policy's delegate
 
            // pseudo-code -- ???
            List<DelegateLoader> delegates = policy.getDelegates();
            delegates.add(0, loader); // make sure it's before this wildcard delegate
         }
      }
      return null;
   }
 
   @Override
   protected Class<?> doLoadClass(String className)
   {
      DelegateLoader loader = resolve(ClassLoaderUtils.getClassPackageName(className));
      return loader != null ? loader.loadClass(className) : null;
   }

 

And I have no idea how to hack around this dynamic loader to policy's delegates addition.

 

Or I completely misunderstood your impl? :-)

Reply to this message by going to Community

Start a new discussion in JBoss Microcontainer Development at Community