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&...]