[ https://issues.apache.org/jira/browse/FELIX-962?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Richard S. Hall updated FELIX-962: ---------------------------------- Attachment: (was: FELIX-962.newer.patch) > 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 > Assignee: Richard S. Hall > Priority: Critical > Fix For: felix-1.6.0 > > Attachments: FELIX-962-bis.patch, FELIX-962-quarter.patch, > FELIX-962-quinquies.patch, FELIX-962-richard.txt, FELIX-962-septies.patch, > FELIX-962-sexies.patch, FELIX-962-ter.patch, FELIX-962.new.patch, > FELIX-962.newer.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.