You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@tomee.apache.org by zeddius <av...@gmail.com> on 2012/07/23 07:29:19 UTC

Attempted duplicate class definition in LocalBeanProxyGeneratorImpl

Hi,

It seems there is an issue when a stateless bean accessed from multiple
threads is trying to define a proxy class of a dependent bean multiple
times. See the below case:

@Singleton
@Startup
@ConcurrencyManagement(ConcurrencyManagementType.BEAN)
public class StartupBean {

	@EJB
	private AsyncBean asyncBean;
	
	@PostConstruct
	public void init() {
		asyncBean.asyncHello();
		asyncBean.asyncHello();
	}
	
}

@Stateless
public class AsyncBean {

	@EJB
	private HelloBean helloBean;
	
	@Asynchronous
	public void asyncHello() {
		helloBean.sayHello();
	}
	
}

@Singleton
@ConcurrencyManagement(ConcurrencyManagementType.BEAN)
public class HelloBean {

	public void sayHello() {
		System.out.println("Hello");
	}
	
}

Causes:
@Asynch invokation-test thread 0: class com.db.test.HelloBean
@Asynch invokation-test thread 0: com/db/test/HelloBean$LocalBeanProxy
@Asynch invokation-test thread 1: class com.db.test.HelloBean
@Asynch invokation-test thread 1: com/db/test/HelloBean$LocalBeanProxy
23.07.2012 9:14:25 org.apache.openejb.assembler.classic.Assembler
createApplication
INFO: Started Ejb(deployment-id=StartupBean, ejb-name=StartupBean,
container=My Singleton Container)
23.07.2012 9:14:25 org.apache.openejb.assembler.classic.Assembler
createApplication
INFO: Started Ejb(deployment-id=HelloBean, ejb-name=HelloBean, container=My
Singleton Container)
java.lang.reflect.InvocationTargetException
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
	at
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	at java.lang.reflect.Method.invoke(Method.java:597)
	at
org.apache.openejb.util.proxy.LocalBeanProxyGeneratorImpl.createProxy(LocalBeanProxyGeneratorImpl.java:119)
	at
org.apache.openejb.util.proxy.LocalBeanProxyGeneratorImpl.createProxy(LocalBeanProxyGeneratorImpl.java:93)
	at
org.apache.openejb.util.proxy.LocalBeanProxyFactory.newProxyInstance(LocalBeanProxyFactory.java:32)
	at
org.apache.openejb.core.ivm.EjbHomeProxyHandler.createProxy(EjbHomeProxyHandler.java:138)
	at
org.apache.openejb.core.ivm.EjbHomeProxyHandler.create(EjbHomeProxyHandler.java:289)
	at
org.apache.openejb.core.ivm.EjbHomeProxyHandler._invoke(EjbHomeProxyHandler.java:174)
	at
org.apache.openejb.core.ivm.BaseEjbProxyHandler.invoke(BaseEjbProxyHandler.java:284)
	at $Proxy54.create(Unknown Source)
	at
org.apache.openejb.core.ivm.naming.BusinessLocalBeanReference.getObject(BusinessLocalBeanReference.java:33)
	at
org.apache.openejb.core.ivm.naming.IvmContext.lookup(IvmContext.java:173)
	at
org.apache.openejb.core.ivm.naming.IntraVmJndiReference.getObject(IntraVmJndiReference.java:41)
23.07.2012 9:14:25 org.apache.openejb.assembler.classic.Assembler
createApplication
INFO: Deployed
Application(path=C:\Developer\apache-tomee-webprofile-1.0.0\wtpwebapps\invokation-test)
	at
org.apache.openejb.core.ivm.naming.IvmContext.lookup(IvmContext.java:173)
	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.BeanContext.newInstance(BeanContext.java:1284)
	at
org.apache.openejb.core.stateless.StatelessInstanceManager.ceateInstance(StatelessInstanceManager.java:188)
	at
org.apache.openejb.core.stateless.StatelessInstanceManager.getInstance(StatelessInstanceManager.java:181)
	at
org.apache.openejb.core.stateless.StatelessContainer.invoke(StatelessContainer.java:173)
	at
org.apache.openejb.core.ivm.EjbObjectProxyHandler$AsynchronousCall.call(EjbObjectProxyHandler.java:296)
	at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
	at java.util.concurrent.FutureTask.run(FutureTask.java:138)
	at
java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
	at
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
	at java.lang.Thread.run(Thread.java:662)
Caused by: java.lang.LinkageError: loader (instance of 
org/apache/catalina/loader/WebappClassLoader): attempted  duplicate class
definition for name: "com/db/test/HelloBean$LocalBeanProxy"
	at sun.misc.Unsafe.defineClass(Native Method)
	... 29 more
23.07.2012 9:14:25
org.apache.openejb.core.stateless.StatelessInstanceManager ceateInstance
SEVERE: The bean instance AsyncBean threw a system
exception:java.lang.InternalError:
java.lang.reflect.InvocationTargetException
java.lang.InternalError: java.lang.reflect.InvocationTargetException
	at
org.apache.openejb.util.proxy.LocalBeanProxyGeneratorImpl.createProxy(LocalBeanProxyGeneratorImpl.java:122)
	at
org.apache.openejb.util.proxy.LocalBeanProxyGeneratorImpl.createProxy(LocalBeanProxyGeneratorImpl.java:93)
	at
org.apache.openejb.util.proxy.LocalBeanProxyFactory.newProxyInstance(LocalBeanProxyFactory.java:32)
	at
org.apache.openejb.core.ivm.EjbHomeProxyHandler.createProxy(EjbHomeProxyHandler.java:138)
	at
org.apache.openejb.core.ivm.EjbHomeProxyHandler.create(EjbHomeProxyHandler.java:289)
	at
org.apache.openejb.core.ivm.EjbHomeProxyHandler._invoke(EjbHomeProxyHandler.java:174)
	at
org.apache.openejb.core.ivm.BaseEjbProxyHandler.invoke(BaseEjbProxyHandler.java:284)
	at $Proxy54.create(Unknown Source)
	at
org.apache.openejb.core.ivm.naming.BusinessLocalBeanReference.getObject(BusinessLocalBeanReference.java:33)
	at
org.apache.openejb.core.ivm.naming.IvmContext.lookup(IvmContext.java:173)
	at
org.apache.openejb.core.ivm.naming.IntraVmJndiReference.getObject(IntraVmJndiReference.java:41)
	at
org.apache.openejb.core.ivm.naming.IvmContext.lookup(IvmContext.java:173)
	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.BeanContext.newInstance(BeanContext.java:1284)
	at
org.apache.openejb.core.stateless.StatelessInstanceManager.ceateInstance(StatelessInstanceManager.java:188)
	at
org.apache.openejb.core.stateless.StatelessInstanceManager.getInstance(StatelessInstanceManager.java:181)
	at
org.apache.openejb.core.stateless.StatelessContainer.invoke(StatelessContainer.java:173)
	at
org.apache.openejb.core.ivm.EjbObjectProxyHandler$AsynchronousCall.call(EjbObjectProxyHandler.java:296)
	at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
	at java.util.concurrent.FutureTask.run(FutureTask.java:138)
	at
java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
	at
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
	at java.lang.Thread.run(Thread.java:662)



--
View this message in context: http://openejb.979440.n4.nabble.com/Attempted-duplicate-class-definition-in-LocalBeanProxyGeneratorImpl-tp4656496.html
Sent from the OpenEJB User mailing list archive at Nabble.com.

Re: Attempted duplicate class definition in LocalBeanProxyGeneratorImpl

Posted by Romain Manni-Bucau <rm...@gmail.com>.
Hi, should be fixee on trunk.

- Romain
Le 23 juil. 2012 07:29, "zeddius" <av...@gmail.com> a écrit :

> Hi,
>
> It seems there is an issue when a stateless bean accessed from multiple
> threads is trying to define a proxy class of a dependent bean multiple
> times. See the below case:
>
> @Singleton
> @Startup
> @ConcurrencyManagement(ConcurrencyManagementType.BEAN)
> public class StartupBean {
>
>         @EJB
>         private AsyncBean asyncBean;
>
>         @PostConstruct
>         public void init() {
>                 asyncBean.asyncHello();
>                 asyncBean.asyncHello();
>         }
>
> }
>
> @Stateless
> public class AsyncBean {
>
>         @EJB
>         private HelloBean helloBean;
>
>         @Asynchronous
>         public void asyncHello() {
>                 helloBean.sayHello();
>         }
>
> }
>
> @Singleton
> @ConcurrencyManagement(ConcurrencyManagementType.BEAN)
> public class HelloBean {
>
>         public void sayHello() {
>                 System.out.println("Hello");
>         }
>
> }
>
> Causes:
> @Asynch invokation-test thread 0: class com.db.test.HelloBean
> @Asynch invokation-test thread 0: com/db/test/HelloBean$LocalBeanProxy
> @Asynch invokation-test thread 1: class com.db.test.HelloBean
> @Asynch invokation-test thread 1: com/db/test/HelloBean$LocalBeanProxy
> 23.07.2012 9:14:25 org.apache.openejb.assembler.classic.Assembler
> createApplication
> INFO: Started Ejb(deployment-id=StartupBean, ejb-name=StartupBean,
> container=My Singleton Container)
> 23.07.2012 9:14:25 org.apache.openejb.assembler.classic.Assembler
> createApplication
> INFO: Started Ejb(deployment-id=HelloBean, ejb-name=HelloBean, container=My
> Singleton Container)
> java.lang.reflect.InvocationTargetException
>         at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
>         at
>
> sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
>         at
>
> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
>         at java.lang.reflect.Method.invoke(Method.java:597)
>         at
>
> org.apache.openejb.util.proxy.LocalBeanProxyGeneratorImpl.createProxy(LocalBeanProxyGeneratorImpl.java:119)
>         at
>
> org.apache.openejb.util.proxy.LocalBeanProxyGeneratorImpl.createProxy(LocalBeanProxyGeneratorImpl.java:93)
>         at
>
> org.apache.openejb.util.proxy.LocalBeanProxyFactory.newProxyInstance(LocalBeanProxyFactory.java:32)
>         at
>
> org.apache.openejb.core.ivm.EjbHomeProxyHandler.createProxy(EjbHomeProxyHandler.java:138)
>         at
>
> org.apache.openejb.core.ivm.EjbHomeProxyHandler.create(EjbHomeProxyHandler.java:289)
>         at
>
> org.apache.openejb.core.ivm.EjbHomeProxyHandler._invoke(EjbHomeProxyHandler.java:174)
>         at
>
> org.apache.openejb.core.ivm.BaseEjbProxyHandler.invoke(BaseEjbProxyHandler.java:284)
>         at $Proxy54.create(Unknown Source)
>         at
>
> org.apache.openejb.core.ivm.naming.BusinessLocalBeanReference.getObject(BusinessLocalBeanReference.java:33)
>         at
> org.apache.openejb.core.ivm.naming.IvmContext.lookup(IvmContext.java:173)
>         at
>
> org.apache.openejb.core.ivm.naming.IntraVmJndiReference.getObject(IntraVmJndiReference.java:41)
> 23.07.2012 9:14:25 org.apache.openejb.assembler.classic.Assembler
> createApplication
> INFO: Deployed
>
> Application(path=C:\Developer\apache-tomee-webprofile-1.0.0\wtpwebapps\invokation-test)
>         at
> org.apache.openejb.core.ivm.naming.IvmContext.lookup(IvmContext.java:173)
>         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.BeanContext.newInstance(BeanContext.java:1284)
>         at
>
> org.apache.openejb.core.stateless.StatelessInstanceManager.ceateInstance(StatelessInstanceManager.java:188)
>         at
>
> org.apache.openejb.core.stateless.StatelessInstanceManager.getInstance(StatelessInstanceManager.java:181)
>         at
>
> org.apache.openejb.core.stateless.StatelessContainer.invoke(StatelessContainer.java:173)
>         at
>
> org.apache.openejb.core.ivm.EjbObjectProxyHandler$AsynchronousCall.call(EjbObjectProxyHandler.java:296)
>         at
> java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
>         at java.util.concurrent.FutureTask.run(FutureTask.java:138)
>         at
>
> java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
>         at
>
> java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
>         at java.lang.Thread.run(Thread.java:662)
> Caused by: java.lang.LinkageError: loader (instance of
> org/apache/catalina/loader/WebappClassLoader): attempted  duplicate class
> definition for name: "com/db/test/HelloBean$LocalBeanProxy"
>         at sun.misc.Unsafe.defineClass(Native Method)
>         ... 29 more
> 23.07.2012 9:14:25
> org.apache.openejb.core.stateless.StatelessInstanceManager ceateInstance
> SEVERE: The bean instance AsyncBean threw a system
> exception:java.lang.InternalError:
> java.lang.reflect.InvocationTargetException
> java.lang.InternalError: java.lang.reflect.InvocationTargetException
>         at
>
> org.apache.openejb.util.proxy.LocalBeanProxyGeneratorImpl.createProxy(LocalBeanProxyGeneratorImpl.java:122)
>         at
>
> org.apache.openejb.util.proxy.LocalBeanProxyGeneratorImpl.createProxy(LocalBeanProxyGeneratorImpl.java:93)
>         at
>
> org.apache.openejb.util.proxy.LocalBeanProxyFactory.newProxyInstance(LocalBeanProxyFactory.java:32)
>         at
>
> org.apache.openejb.core.ivm.EjbHomeProxyHandler.createProxy(EjbHomeProxyHandler.java:138)
>         at
>
> org.apache.openejb.core.ivm.EjbHomeProxyHandler.create(EjbHomeProxyHandler.java:289)
>         at
>
> org.apache.openejb.core.ivm.EjbHomeProxyHandler._invoke(EjbHomeProxyHandler.java:174)
>         at
>
> org.apache.openejb.core.ivm.BaseEjbProxyHandler.invoke(BaseEjbProxyHandler.java:284)
>         at $Proxy54.create(Unknown Source)
>         at
>
> org.apache.openejb.core.ivm.naming.BusinessLocalBeanReference.getObject(BusinessLocalBeanReference.java:33)
>         at
> org.apache.openejb.core.ivm.naming.IvmContext.lookup(IvmContext.java:173)
>         at
>
> org.apache.openejb.core.ivm.naming.IntraVmJndiReference.getObject(IntraVmJndiReference.java:41)
>         at
> org.apache.openejb.core.ivm.naming.IvmContext.lookup(IvmContext.java:173)
>         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.BeanContext.newInstance(BeanContext.java:1284)
>         at
>
> org.apache.openejb.core.stateless.StatelessInstanceManager.ceateInstance(StatelessInstanceManager.java:188)
>         at
>
> org.apache.openejb.core.stateless.StatelessInstanceManager.getInstance(StatelessInstanceManager.java:181)
>         at
>
> org.apache.openejb.core.stateless.StatelessContainer.invoke(StatelessContainer.java:173)
>         at
>
> org.apache.openejb.core.ivm.EjbObjectProxyHandler$AsynchronousCall.call(EjbObjectProxyHandler.java:296)
>         at
> java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
>         at java.util.concurrent.FutureTask.run(FutureTask.java:138)
>         at
>
> java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
>         at
>
> java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
>         at java.lang.Thread.run(Thread.java:662)
>
>
>
> --
> View this message in context:
> http://openejb.979440.n4.nabble.com/Attempted-duplicate-class-definition-in-LocalBeanProxyGeneratorImpl-tp4656496.html
> Sent from the OpenEJB User mailing list archive at Nabble.com.
>