[
https://issues.apache.org/jira/browse/FELIX-962?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12676957#action_12676957
]
Guillaume Nodet commented on FELIX-962:
---------------------------------------
This other patch seems to work too and avoids the Java 5 call.
> 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.