felix-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Guillaume Sauthier (JIRA)" <j...@apache.org>
Subject [jira] Commented: (FELIX-808) R4SearchPolicyCore.searchDynamicImports() always loads a class even if the object to load is a resource
Date Wed, 12 Nov 2008 14:03:44 GMT

    [ https://issues.apache.org/jira/browse/FELIX-808?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12646900#action_12646900

Guillaume Sauthier commented on FELIX-808:


In fact, we found that issue when Felix is run on Windows.
JacORB tries to load a configuration file using different strategies:
1. use the TCCL.getResource()
2. if not found, tries the absolute filename

The problem is that the resource it tries to load from the TCCL is already the absolute file
name (ie, under windows something like 'd:\path\to\my\resource').
So the call looks like this :
The TCCL is a bundle ClassLoader of Felix with a 'DynamicImport-Packages *'.

This is where we fallback on the system classloader (not 100% sure) and we try to load d:\...\resource
as a class (changing all . to / and adding a .class suffix :) ).

> R4SearchPolicyCore.searchDynamicImports() always loads a class even if the object to
load is a resource
> -------------------------------------------------------------------------------------------------------
>                 Key: FELIX-808
>                 URL: https://issues.apache.org/jira/browse/FELIX-808
>             Project: Felix
>          Issue Type: Bug
>    Affects Versions: felix-1.4.0
>            Reporter: eyindanga
>            Assignee: Richard S. Hall
>             Fix For: felix-1.4.1
> The method R4SearchPolicyCore.searchDynamicImports( IModule module, String name, String
pkgName, boolean isClass) always load a class by using the current thrad class loader even
if  the object to laod is a resource.
> This code may chek if the object is a class or a resource, and invoke the coresponding
method on the classloader.
>                // If there are no bundles providing exports for this
>                 // package and if the instigating class was not from a
>                 // bundle, then delegate to the parent class loader.
>                 // Otherwise, break out of loop and return null.
>                 boolean delegate = true;
>                 for (ClassLoader cl = classes[i].getClassLoader(); cl != null; cl = cl.getClass().getClassLoader())
>                 {
>                     if (ContentClassLoader.class.isInstance(cl))
>                     {
>                         delegate = false;
>                         break;
>                     }
>                 }
>                 if (delegate)
>                 {
>                     return this.getClass().getClassLoader().loadClass(name);
>                 }

This message is automatically generated by JIRA.
You can reply to this email to add a comment to the issue online.

View raw message