[
http://jira.jboss.com/jira/browse/JBAS-3198?page=all ]
Dimitris Andreadis updated JBAS-3198:
-------------------------------------
Fix Version/s: JBossAS-5.0.0.CR1
JBossAS-4.2.0.CR1
JBossAS-4.0.5.SP1
Priority: Critical (was: Major)
Raising the priority to fix it in the 4.0.x branch for 4.0.5.SP1.
Should it be fixed in 4.2.x and 5.0.x, too.
Problems with separated ClassLoaders for EARs and pooled invoker
(PooledInvokerHA).
-----------------------------------------------------------------------------------
Key: JBAS-3198
URL:
http://jira.jboss.com/jira/browse/JBAS-3198
Project: JBoss Application Server
Issue Type: Bug
Security Level: Public(Everyone can see)
Components: ClassLoading
Affects Versions: JBossAS-4.0.5.CR1
Environment: Windows XP, HP-UX 11, JDK 1.4.2 and 1.5
Reporter: Eric Hambuch
Assigned To: Tom Elrod
Priority: Critical
Fix For: JBossAS-5.0.0.CR1, JBossAS-4.2.0.CR1, JBossAS-4.0.5.SP1
When using the pooled invoker (PooledInvokerHA) in the "all" configuration with
separated classloaders for each EAR (as described in Wiki:ClassLoadingConfiguration) an
invocation to a bean causes confusion to the separated classloaders.
More detailed:
I switched from jrmpha-invoker (which creates a new thread for each request which is
really bad) to pooledha invoker in a clustered environment. I have to Stateless Session
Beans that share the same bean interface. Each Session Bean is deployed in a separate EAR.
In "ear-deployer.xml" I switched "isolated" to "true" to
separate the classloaders of the EARs.
When I call the first bean everything works fine. But when I try to call the second bean
(same interface, but different bean!) JBoss throws the following exception:
java.rmi.ServerException: RuntimeException; nested exception is:
java.lang.IllegalArgumentException: argument type mismatch
at org.jboss.ejb.plugins.LogInterceptor.handleException(LogInterceptor.java:386)
at org.jboss.ejb.plugins.LogInterceptor.invoke(LogInterceptor.java:196)
at
org.jboss.ejb.plugins.CleanShutdownInterceptor.invoke(CleanShutdownInterceptor.java:264)
at
org.jboss.ejb.plugins.ProxyFactoryFinderInterceptor.invoke(ProxyFactoryFinderInterceptor.java:122)
at org.jboss.ejb.SessionContainer.internalInvoke(SessionContainer.java:624)
at org.jboss.ejb.Container.invoke(Container.java:873)
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:324)
at org.jboss.mx.interceptor.ReflectedDispatcher.invoke(ReflectedDispatcher.java:141)
at org.jboss.mx.server.Invocation.dispatch(Invocation.java:80)
at org.jboss.mx.server.Invocation.invoke(Invocation.java:72)
at org.jboss.mx.server.AbstractMBeanInvoker.invoke(AbstractMBeanInvoker.java:245)
at org.jboss.mx.server.MBeanServerImpl.invoke(MBeanServerImpl.java:644)
at org.jboss.invocation.pooled.server.PooledInvokerHA.invoke(PooledInvokerHA.java:146)
at
org.jboss.invocation.pooled.server.ServerThread.processInvocation(ServerThread.java:213)
at org.jboss.invocation.pooled.server.ServerThread.dorun(ServerThread.java:268)
at org.jboss.invocation.pooled.server.ServerThread.run(ServerThread.java:139)
Caused by: java.lang.IllegalArgumentException: argument type mismatch
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:324)
at org.jboss.invocation.Invocation.performCall(Invocation.java:345)
at
org.jboss.ejb.StatelessSessionContainer$ContainerInterceptor.invoke(StatelessSessionContainer.java:214)
at
org.jboss.resource.connectionmanager.CachedConnectionInterceptor.invoke(CachedConnectionInterceptor.java:149)
at
org.jboss.ejb.plugins.CallValidationInterceptor.invoke(CallValidationInterceptor.java:48)
at
org.jboss.ejb.plugins.AbstractTxInterceptor.invokeNext(AbstractTxInterceptor.java:106)
at
org.jboss.ejb.plugins.AbstractTxInterceptorBMT.invokeNext(AbstractTxInterceptorBMT.java:158)
at org.jboss.ejb.plugins.TxInterceptorBMT.invoke(TxInterceptorBMT.java:62)
at
org.jboss.ejb.plugins.StatelessSessionInstanceInterceptor.invoke(StatelessSessionInstanceInterceptor.java:154)
at org.jboss.ejb.plugins.SecurityInterceptor.invoke(SecurityInterceptor.java:153)
at org.jboss.ejb.plugins.LogInterceptor.invoke(LogInterceptor.java:192)
The IllegalArgumentException comes from the fact that the Method.invoke() is called with
a class of the wrong classloader (class from other EAR).
With jrmpha-invoker everything works fine. Maybe the thread pool causes a mixture of the
classloaders?
I created a minimized example that can be provided if required.
--
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators:
http://jira.jboss.com/jira/secure/Administrators.jspa
-
For more information on JIRA, see:
http://www.atlassian.com/software/jira