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

Guillaume Nodet commented on FELIX-962:
---------------------------------------

Are you guys happy with this patch or should I try something else ?

> Erroneous class loading delegation to the application launcher classloader in 
> some cases
> ----------------------------------------------------------------------------------------
>
>                 Key: FELIX-962
>                 URL: https://issues.apache.org/jira/browse/FELIX-962
>             Project: Felix
>          Issue Type: Bug
>          Components: Framework
>            Reporter: Guillaume Nodet
>            Priority: Critical
>         Attachments: FELIX-962-bis.patch, FELIX-962.patch
>
>
> Here is an example stack trace:
> {code}
> processstoreimp...@50 daemon, priority=5, in group 'main', status: 'RUNNING'
>         at 
> org.apache.felix.framework.searchpolicy.ModuleImpl.searchDynamicImports(ModuleImpl.java:1,215)
>         at 
> org.apache.felix.framework.searchpolicy.ModuleImpl.findClassOrResourceByDelegation(ModuleImpl.java:558)
>         at 
> org.apache.felix.framework.searchpolicy.ModuleImpl.access$100(ModuleImpl.java:59)
>         at 
> org.apache.felix.framework.searchpolicy.ModuleImpl$ModuleClassLoader.loadClass(ModuleImpl.java:1,382)
>         at java.lang.ClassLoader.loadClass(ClassLoader.java:251)
>         at 
> org.apache.felix.framework.searchpolicy.ModuleImpl.getClassByDelegation(ModuleImpl.java:428)
>         at org.apache.felix.framework.Felix.loadBundleClass(Felix.java:1,341)
>         at 
> org.apache.felix.framework.BundleImpl.loadClass(BundleImpl.java:737)
>         at 
> org.springframework.osgi.util.BundleDelegatingClassLoader.findClass(BundleDelegatingClassLoader.java:99)
>         at 
> org.springframework.osgi.util.BundleDelegatingClassLoader.loadClass(BundleDelegatingClassLoader.java:156)
>         at java.lang.ClassLoader.loadClass(ClassLoader.java:251)
>         at 
> org.apache.xbean.classloader.MultiParentClassLoader.loadClass(MultiParentClassLoader.java:184)
>         at java.lang.ClassLoader.loadClass(ClassLoader.java:251)
>         at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:374)
>         at java.lang.ClassLoader.defineClass1(ClassLoader.java:-1)
>         at java.lang.ClassLoader.defineClass(ClassLoader.java:675)
>         at 
> java.security.SecureClassLoader.defineClass(SecureClassLoader.java:124)
>         at java.net.URLClassLoader.defineClass(URLClassLoader.java:260)
>         at java.net.URLClassLoader.access$100(URLClassLoader.java:56)
>         at java.net.URLClassLoader$1.run(URLClassLoader.java:195)
>         at 
> java.security.AccessController.doPrivileged(AccessController.java:-1)
>         at java.net.URLClassLoader.findClass(URLClassLoader.java:188)
>         at 
> org.apache.xbean.classloader.MultiParentClassLoader.loadClass(MultiParentClassLoader.java:200)
>         at java.lang.ClassLoader.loadClass(ClassLoader.java:251)
>         at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:374)
>         at org.apache.openjpa.util.ProxyMaps.afterEntrySet(ProxyMaps.java:74)
>         at org.apache.openjpa.util.java$util$HashMap$proxy.entrySet(Unknown 
> Source:-1)
>         at org.apache.openjpa.util.ProxyMaps.values(ProxyMaps.java:65)
>         at org.apache.openjpa.util.java$util$HashMap$proxy.values(Unknown 
> Source:-1)
>         at 
> org.apache.openjpa.kernel.SingleFieldManager.delete(SingleFieldManager.java:335)
>         at 
> org.apache.openjpa.kernel.SingleFieldManager.delete(SingleFieldManager.java:283)
>         at 
> org.apache.openjpa.kernel.StateManagerImpl.cascadeDelete(StateManagerImpl.java:2,861)
>         at org.apache.openjpa.kernel.BrokerImpl.delete(BrokerImpl.java:2,566)
>         at 
> org.apache.openjpa.kernel.SingleFieldManager.delete(SingleFieldManager.java:387)
>         at 
> org.apache.openjpa.kernel.SingleFieldManager.delete(SingleFieldManager.java:372)
>         at 
> org.apache.openjpa.kernel.SingleFieldManager.delete(SingleFieldManager.java:329)
>         at 
> org.apache.openjpa.kernel.SingleFieldManager.delete(SingleFieldManager.java:283)
>         at 
> org.apache.openjpa.kernel.StateManagerImpl.cascadeDelete(StateManagerImpl.java:2,861)
>         at org.apache.openjpa.kernel.BrokerImpl.delete(BrokerImpl.java:2,566)
>         at org.apache.openjpa.kernel.BrokerImpl.delete(BrokerImpl.java:2,531)
>         at 
> org.apache.openjpa.kernel.DelegatingBroker.delete(DelegatingBroker.java:1,046)
>         at 
> org.apache.openjpa.persistence.EntityManagerImpl.remove(EntityManagerImpl.java:659)
>         at org.apache.ode.store.jpa.JpaObj.delete(JpaObj.java:34)
>         at 
> org.apache.ode.store.jpa.DeploymentUnitDaoImpl.delete(DeploymentUnitDaoImpl.java:114)
>         at 
> org.apache.ode.store.ProcessStoreImpl$3.call(ProcessStoreImpl.java:303)
>         at 
> org.apache.ode.store.ProcessStoreImpl$3.call(ProcessStoreImpl.java:300)
>         at 
> org.apache.ode.store.ProcessStoreImpl$Callable.call(ProcessStoreImpl.java:701)
>         at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:269)
>         at java.util.concurrent.FutureTask.run(FutureTask.java:123)
>         at 
> java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:650)
>         at 
> java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:675)
>         at java.lang.Thread.run(Thread.java:613)
> {code}
> The interesting bit is the following exerpt:
> {code}
>         at java.net.URLClassLoader$1.run(URLClassLoader.java:195)
>         at 
> java.security.AccessController.doPrivileged(AccessController.java:-1)
>         at java.net.URLClassLoader.findClass(URLClassLoader.java:188)
> {code}
> The current code in ModuleImpl#searchDynamicImports() does not really handle 
> this case.  The reason is that the {{java.net.URLClassLoader$1}} class is an 
> anonymous PrivilegedExceptionAction.
> The result is that the loop is aborted too soon and the launcher classloader 
> is used to delegate the call.   In my application, it leads to all kinds of 
> LinkageError being thrown.
> Note that this problem mostly happen on macs, which has a weird thing in the 
> classloader, trying to handle some org.apache.crimson / org.apache.xalan / 
> org.apache.xml / org.apache.xpath in some weird way.
> Anyway, I have a patch to support this anonymous classes I will attach now.

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

Reply via email to