The second bug related to class loading problems(#521058) is
another problem that occurs when a MarshalledObject value
is gotten and Class.forName(String, boolean, ClassLoader) is
used. This time, the call occurs when a non-proxy class is being
resolved and the code does not try to use the thread context
class loader. Rather, it walks the call stack to find the first
non-system ClassLoader on the stack. The stack that is in effect
is:

java.lang.Exception: Stack trace
 at java.lang.Thread.dumpStack(Thread.java:993)
 at java.lang.Class.forName(Class.java:205)
 at java.io.ObjectInputStream.resolveClass(ObjectInputStream.java:654)
  at
sun.rmi.server.MarshalInputStream.resolveClass(MarshalInputStream.java:121)
 at
java.io.ObjectInputStream.inputClassDescriptor(ObjectInputStream.java:918)
  at java.io.ObjectInputStream.readObject(ObjectInputStream.java:366)
  at java.io.ObjectInputStream.readObject(ObjectInputStream.java:236)
  at java.io.ObjectInputStream.inputObject(ObjectInputStream.java:1186)
  at java.io.ObjectInputStream.readObject(ObjectInputStream.java:386)
  at java.io.ObjectInputStream.inputArray(ObjectInputStream.java:1142)
  at java.io.ObjectInputStream.readObject(ObjectInputStream.java:374)
  at java.io.ObjectInputStream.readObject(ObjectInputStream.java:236)
  at java.rmi.MarshalledObject.get(MarshalledObject.java:138)
  at
org.jboss.invocation.MarshalledInvocation.getValue(MarshalledInvocation.java
:281)
  at org.jboss.invocation.Invocation.getArguments(Invocation.java:167)
  at
org.jboss.ejb.StatelessSessionContainer$ContainerInterceptor.invoke(Stateles
sSessionContainer.java:649)
  at
org.jboss.ejb.plugins.StatelessSessionInstanceInterceptor.invoke(StatelessSe
ssionInstanceInterceptor.java:77)
  at
org.jboss.ejb.plugins.AbstractTxInterceptor.invokeNext(AbstractTxInterceptor
.java:96)
...

The first class loader from a non-system ClassLoader is
org.jboss.invocation.MarshalledInvocation which is loaded
by the jboss.jar class loader. Since this class loader does
not change when an ejb is redeployed, any ejb calls that
pass in types that are loaded from the ejb jar are seen to
be in conflict with the reployed values because Class.forName
is returning the previously loaded byte code due to the
jboss.jar ClassLoader to VM cache match.

We need more control over which class loader is being used when
accessing MarshalledObject value contents.

xxxxxxxxxxxxxxxxxxxxxxxx
Scott Stark
Chief Technology Officer
JBoss Group, LLC
xxxxxxxxxxxxxxxxxxxxxxxx


_______________________________________________
Jboss-development mailing list
[EMAIL PROTECTED]
https://lists.sourceforge.net/lists/listinfo/jboss-development

Reply via email to