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

Miguel Ángel Pastor Olivar commented on FELIX-3696:
---------------------------------------------------

Hey again Karl,

I think I was looking at the bad place; sorry about pointing you on the "wrong" 
place (a couple of bad expressions in the debugger were hiding me the original 
issue)

When the extension manager includes the loader into the classloader (in my 
tests the Tomcat classloader) by calling the addURL on it, it causes the 
hasExternalRepositories field of the classloader to be true, so it delegates 
the search of the class to the parent class loader (with a URL with the format 
java:......PortletBridge) making it to fail. Maybe I should patch the Tomcat 
classloader to be able to handle this kind of situations.

Btw, is there any problem on making the extension module configurable? I would 
love to have this option availabe!

Thx and sorry!!
                
> Extension Bundle system adds loader to the classloader which can make other 
> libraries to fail
> ---------------------------------------------------------------------------------------------
>
>                 Key: FELIX-3696
>                 URL: https://issues.apache.org/jira/browse/FELIX-3696
>             Project: Felix
>          Issue Type: Bug
>    Affects Versions: framework-4.0.2
>            Reporter: Miguel Ángel Pastor Olivar
>
> I am embedding Apache Felix (and Equinox because I would like to switch 
> depending on the application server I am running on).
> * The xalan ExtensionHandler executes something like this: 
> ObjectFactory.findProviderClass(className, ObjectFactory.findClassLoader(), 
> true)
> * The className has the format 
> "java:org.portletbridge.portlet.BridgeFunctions" ( I am embedding the OSGI 
> container into Liferay portal :) )
> * The extension manager have already added the extension loader to the 
> classloader
> {code}
>   
> Felix.m_secureAction.addURLToURLClassLoader(Felix.m_secureAction.createURL(Felix.m_secureAction.createURL(null,
>  "http:", extensionManager),"http://felix.extensions:9/";, 
> extensionManager),Felix.class.getClassLoader());
> {code}
> * When the classloader try to resolve the 
> "java:org.portletbridge.portlet.BridgeFunctions" the previous loader added by 
> the ExtensionManager cause an unhandled error.
> In sun.misc.URL
> {code}
>     public Resource getResource(String name, boolean check) {
>         if (DEBUG) {
>             System.err.println("URLClassPath.getResource(\"" + name + "\")");
>         }
>         Loader loader;
>         for (int i = 0; (loader = getLoader(i)) != null; i++) {
>             Resource res = loader.getResource(name, check);
>             if (res != null) {
>                 return res;
>             }
>         }
>         return null;
>     }
> {code}
> In the previous code, the loader injected by the framework is causing an 
> IllegalArgumentException here:
> Resource res = loader.getResource(name, check); (instead of returning null)
> Let me know if you need some more details.

--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators
For more information on JIRA, see: http://www.atlassian.com/software/jira

Reply via email to