Hi, i think it is a bug of the jdk something like now (since 1.6 u18 or u17) it is impossible to load an inner class before the containing class. Maybe doing a loadClass(StartupServiceEJB.class.getName()) before can help.
- Romain 2011/5/24 David Blevins <[email protected]> > Begin forwarded message: > > > From: David Blevins <[email protected]> > > Date: May 23, 2011 2:49:11 PM PDT > > To: [email protected] > > Subject: Re: java.lang.LinkageError > > > > > > On May 13, 2011, at 3:17 AM, joe wrote: > > > >> The attached stacktrace is produced everytime the client invokes the > call2Methods method after a server restart. All subsequent invocations seem > to be ok. > > > > Hmm. I've seen that in Geronimo due to issues in the Karaf classloader, > but this is the first I've seen of the same bug in the VM classloader. > > > > In the situation of Karaf, simply "trying again" worked. We could > probably update the 'LocalBeanProxyGeneratorImpl.createProxy' method to > catch the LinkageError and simply try creating the proxy again. > > > > Will suggest this on the dev list and see if someone has some time to > work on it (I'm neck deep in CDI changes currently). > > Anyone want to hack on this? > > We'd need it in trunk and 3.2. > > > -David > > > >> > >> OpenEJB 3.1.4 > >> Windows/Unix > >> JDK 1.6.x > >> > >> > >> Exception in thread "Thread-1" javax.ejb.EJBException: Cannot obtain a > free instance.; nested exception is: > >> java.lang.LinkageError: loader (instance of > java/net/URLClassLoader): attempted duplicate class definition for name: > "de/test/dc5/ejb/StartupServiceEJB$LocalBeanProxy" > >> at > org.apache.openejb.client.EJBInvocationHandler.convertException(EJBInvocationHandler.java:215) > >> at > org.apache.openejb.client.EJBObjectHandler._invoke(EJBObjectHandler.java:168) > >> at > org.apache.openejb.client.EJBInvocationHandler.invoke(EJBInvocationHandler.java:118) > >> at > org.apache.openejb.client.proxy.Jdk13InvocationHandler.invoke(Jdk13InvocationHandler.java:52) > >> at $Proxy0.testMethod(Unknown Source) > >> at > de.test.dc.disp_exec.OpenEjbContainer$1.run(OpenEjbContainer.java:34) > >> at java.lang.Thread.run(Unknown Source) > >> Caused by: java.lang.LinkageError: loader (instance of > java/net/URLClassLoader): attempted duplicate class definition for name: > "de/test/dc5/ejb/StartupServiceEJB$LocalBeanProxy" > >> at sun.misc.Unsafe.defineClass(Native Method) > >> at > org.apache.openejb.util.proxy.LocalBeanProxyGeneratorImpl.createProxy(LocalBeanProxyGeneratorImpl.java:68) > >> at > org.apache.openejb.util.proxy.LocalBeanProxyGeneratorImpl.createProxy(LocalBeanProxyGeneratorImpl.java:51) > >> at > org.apache.openejb.util.proxy.LocalBeanProxyFactory.newProxyInstance(LocalBeanProxyFactory.java:27) > >> at > org.apache.openejb.core.ivm.EjbHomeProxyHandler.createProxy(EjbHomeProxyHandler.java:139) > >> at > org.apache.openejb.core.ivm.EjbHomeProxyHandler.create(EjbHomeProxyHandler.java:286) > >> at > org.apache.openejb.core.ivm.EjbHomeProxyHandler._invoke(EjbHomeProxyHandler.java:169) > >> at > org.apache.openejb.core.ivm.BaseEjbProxyHandler.invoke(BaseEjbProxyHandler.java:282) > >> at $Proxy60.create(Unknown Source) > >> at > org.apache.openejb.core.ivm.naming.openejb.BusinessLocalBeanReference.getObject(BusinessLocalBeanReference.java:34) > >> at > org.apache.openejb.core.ivm.naming.IvmContext.lookup(IvmContext.java:171) > >> at > org.apache.openejb.core.ivm.naming.IntraVmJndiReference.getObject(IntraVmJndiReference.java:38) > >> at > org.apache.openejb.core.ivm.naming.IvmContext.lookup(IvmContext.java:171) > >> at > org.apache.openejb.InjectionProcessor.fillInjectionProperties(InjectionProcessor.java:182) > >> at > org.apache.openejb.InjectionProcessor.construct(InjectionProcessor.java:110) > >> at > org.apache.openejb.InjectionProcessor.createInstance(InjectionProcessor.java:83) > >> at > org.apache.openejb.core.stateless.StatelessInstanceManager.ceateInstance(StatelessInstanceManager.java:204) > >> at > org.apache.openejb.core.stateless.StatelessInstanceManager.getInstance(StatelessInstanceManager.java:165) > >> at > org.apache.openejb.core.stateless.StatelessContainer.invoke(StatelessContainer.java:165) > >> at > org.apache.openejb.core.stateless.StatelessContainer.invoke(StatelessContainer.java:136) > >> at > org.apache.openejb.server.ejbd.EjbRequestHandler.doEjbObject_BUSINESS_METHOD(EjbRequestHandler.java:238) > >> at > org.apache.openejb.server.ejbd.EjbRequestHandler.processRequest(EjbRequestHandler.java:129) > >> at > org.apache.openejb.server.ejbd.EjbDaemon.processEjbRequest(EjbDaemon.java:196) > >> at > org.apache.openejb.server.ejbd.EjbDaemon.service(EjbDaemon.java:149) > >> at > org.apache.openejb.server.ejbd.EjbServer.service(EjbServer.java:71) > >> at > org.apache.openejb.server.ejbd.KeepAliveServer$Session.service(KeepAliveServer.java:213) > >> at > org.apache.openejb.server.ejbd.KeepAliveServer.service(KeepAliveServer.java:233) > >> at > org.apache.openejb.server.ejbd.EjbServer.service(EjbServer.java:66) > >> at org.apache.openejb.server.ServicePool$2.run(ServicePool.java:91) > >> at > org.apache.openejb.server.ServicePool$3.run(ServicePool.java:120) > >> at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(Unknown > Source) > >> at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown > Source) > >> ... 1 more > >> > >> > > > >
