[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