[
https://issues.jboss.org/browse/WFLY-12032?page=com.atlassian.jira.plugin...
]
Dennis Reed commented on WFLY-12032:
------------------------------------
It should actually already be set by the deserialization code.
The TCCL is not being set. I've tracked down the version where it stopped working to
EAP 7.1.0.
If you actually look at the source code of `MarshalInputStream` and
follow what it's doing, it uses
`jdk.internal.misc.VM#latestUserDefinedLoader0` to determine the class loader to use.
This method
searches the call stack for the class loader that it thinks the user meant to use.
Unfortunately that's never going to give the right answer.
Then it might be a coincidence that RMI is using the same classloader as the incorrect
TCCL?
(We can open separate JIRAs if needed for the exact same error without the RMI part).
Follow-up: java.rmi is not visible from EJBServerChannel
--------------------------------------------------------
Key: WFLY-12032
URL:
https://issues.jboss.org/browse/WFLY-12032
Project: WildFly
Issue Type: Bug
Affects Versions: 16.0.0.Final
Reporter: Tomas Hofman
Priority: Major
This is follow up issue for JBEAP-16725, which was resolved with a workaround - javax.rmi
was added as a dependency of wildfly.extension.io module.
The root cause is probably inside jboss-modules.
The issue is following:
* a standalone EJB client invokes remote EJB, and passes an object as an argument;
* server (trying to use the remote object) fails with
"java.lang.ClassNotFoundException: java.rmi.dgc.Lease" (stacktrace bellow).
If a short delay ({{Thread.sleep(100)}}) is introduced on the server side, before
manipulating the remote object, the invocation succeeds.
{code}
java.lang.ClassNotFoundException: java.rmi.dgc.Lease from [Module
"org.wildfly.extension.io" version 6.0.12.Final-redhat-00001 from local module
loader @6a024a67 (finder: local module finder @7921b0a2 (roots:
/tmp/jboss-eap-7.2/modules,/tmp/jboss-eap-7.2/modules/system/layers/base))] (no security
manager: RMI class loader disabled)
(default task-2)
java.lang.ClassNotFoundException.<init>(ClassNotFoundException.java:97)
(default task-2) sun.rmi.server.LoaderHandler.loadClass(LoaderHandler.java:396)
(default task-2) sun.rmi.server.LoaderHandler.loadClass(LoaderHandler.java:186)
(default task-2) java.rmi.server.RMIClassLoader$2.loadClass(RMIClassLoader.java:637)
(default task-2) java.rmi.server.RMIClassLoader.loadClass(RMIClassLoader.java:264)
(default task-2)
sun.rmi.server.MarshalInputStream.resolveClass(MarshalInputStream.java:219)
(default task-2) java.io.ObjectInputStream.readNonProxyDesc(ObjectInputStream.java:1868)
(default task-2) java.io.ObjectInputStream.readClassDesc(ObjectInputStream.java:1751)
(default task-2)
java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:2042)
(default task-2) java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1573)
(default task-2) java.io.ObjectInputStream.readObject(ObjectInputStream.java:431)
(default task-2) sun.rmi.transport.DGCImpl_Stub.dirty(DGCImpl_Stub.java:125)
(default task-2)
sun.rmi.transport.DGCClient$EndpointEntry.makeDirtyCall(DGCClient.java:382)
(default task-2)
sun.rmi.transport.DGCClient$EndpointEntry.registerRefs(DGCClient.java:324)
(default task-2) sun.rmi.transport.DGCClient.registerRefs(DGCClient.java:160)
(default task-2) sun.rmi.transport.LiveRef.read(LiveRef.java:312)
(default task-2) sun.rmi.server.UnicastRef.readExternal(UnicastRef.java:489)
(default task-2) java.rmi.server.RemoteObject.readObject(RemoteObject.java:455)
(default task-2)
sun.reflect.NativeMethodAccessorImpl.invoke0(NativeMethodAccessorImpl.java:-2)
(default task-2)
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
(default task-2)
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
(default task-2) java.lang.reflect.Method.invoke(Method.java:498)
(default task-2)
org.jboss.marshalling.reflect.JDKSpecific$SerMethods.callReadObject(JDKSpecific.java:179)
(default task-2)
org.jboss.marshalling.reflect.SerializableClass.callReadObject(SerializableClass.java:212)
(default task-2)
org.jboss.marshalling.river.RiverUnmarshaller.doInitSerializable(RiverUnmarshaller.java:1746)
(default task-2)
org.jboss.marshalling.river.RiverUnmarshaller.doInitSerializable(RiverUnmarshaller.java:1715)
(default task-2)
org.jboss.marshalling.river.RiverUnmarshaller.doInitSerializable(RiverUnmarshaller.java:1715)
(default task-2)
org.jboss.marshalling.river.RiverUnmarshaller.doReadNewObject(RiverUnmarshaller.java:1395)
(default task-2)
org.jboss.marshalling.river.RiverUnmarshaller.doReadObject(RiverUnmarshaller.java:272)
(default task-2)
org.jboss.marshalling.river.RiverUnmarshaller.doReadObject(RiverUnmarshaller.java:205)
(default task-2)
org.jboss.marshalling.AbstractObjectInput.readObject(AbstractObjectInput.java:41)
(default task-2)
org.jboss.ejb.protocol.remote.EJBServerChannel$RemotingInvocationRequest.getRequestContent(EJBServerChannel.java:813)
(default task-2)
org.jboss.as.ejb3.remote.AssociationImpl.receiveInvocationRequest(AssociationImpl.java:130)
(default task-2)
org.jboss.ejb.protocol.remote.EJBServerChannel$ReceiverImpl.handleInvocationRequest(EJBServerChannel.java:451)
(default task-2)
org.jboss.ejb.protocol.remote.EJBServerChannel$ReceiverImpl.handleMessage(EJBServerChannel.java:189)
(default task-2)
org.jboss.remoting3.remote.RemoteConnectionChannel.lambda$handleMessageData$3(RemoteConnectionChannel.java:430)
(default task-2)
org.jboss.remoting3.EndpointImpl$TrackingExecutor.lambda$execute$0(EndpointImpl.java:949)
(default task-2)
org.jboss.threads.ContextClassLoaderSavingRunnable.run(ContextClassLoaderSavingRunnable.java:35)
(default task-2)
org.jboss.threads.EnhancedQueueExecutor.safeRun(EnhancedQueueExecutor.java:1985)
(default task-2)
org.jboss.threads.EnhancedQueueExecutor$ThreadBody.doRunTask(EnhancedQueueExecutor.java:1487)
(default task-2)
org.jboss.threads.EnhancedQueueExecutor$ThreadBody.run(EnhancedQueueExecutor.java:1378)
(default task-2) java.lang.Thread.run(Thread.java:748)
{code}
--
This message was sent by Atlassian Jira
(v7.12.1#712002)