RemoteClassLoader doesn't provide ClassFile information for Lambdas

Brian Oliver brian.oliver at oracle.com
Fri Mar 10 23:04:07 UTC 2017


Hi Robert,

So it’s seems that any dynamically created or referenced serializable class, abstract, anonymous, lambda, method reference can’t be serialized.

eg: I replaced by previous example with a simple stateless serializable anonymous inner-class and it failed to be loaded.  I also tried to use method references and they too failed to be located.   

I guess the synthetic wrapping of classes is causing this problem, which is unfortunate as these things work perfectly fine with “regular” compiled Java.

I wonder if there’s some way around this?   Why can’t the RemoteClassLoader provide the underlying bytecode for the wrapped class?

As it stands, I don’t think we or anyone else that wants serializable lambdas can use JShell.

— Brian

people.compute("Brian", new Remote.BiFunction<String, String, String>() { public String apply(String key, String value) { return "Byrd"; } });
|  com.tangosol.util.WrapperException thrown: (Wrapped: Failed request execution for PartitionedCache service on Member(Id=2, Timestamp=2017-03-10 17:48:50.069, Address=127.0.0.1:50597, MachineId=10131, Location=machine:localhost,process:1563, Role=CoherenceServer) (Wrapped) readObject failed: java.lang.ClassNotFoundException: REPL.$JShell$22$1
	at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:533)
	at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:186)
	at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:476)
	at java.base/java.lang.Class.forName0(Native Method)
	at java.base/java.lang.Class.forName(Class.java:375)
	at java.base/java.io.ObjectInputStream.resolveClass(ObjectInputStream.java:685)
	at com.tangosol.io.ResolvingObjectInputStream.resolveClass(ResolvingObjectInputStream.java:66)
	at java.base/java.io.ObjectInputStream.readNonProxyDesc(ObjectInputStream.java:1841)
	at java.base/java.io.ObjectInputStream.readClassDesc(ObjectInputStream.java:1735)
	at java.base/java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:2008)
	at java.base/java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1557)
	at java.base/java.io.ObjectInputStream.readObject(ObjectInputStream.java:422)
	at com.tangosol.util.ExternalizableHelper.readSerializable(ExternalizableHelper.java:2445)
	at com.tangosol.util.ExternalizableHelper.readObjectInternal(ExternalizableHelper.java:2582)
	at com.tangosol.util.ExternalizableHelper.readObject(ExternalizableHelper.java:2524)
	at com.tangosol.util.ExternalizableHelper.readObject(ExternalizableHelper.java:2502)
	at com.tangosol.internal.util.invoke.RemoteConstructor.readExternal(RemoteConstructor.java:182)
	at com.tangosol.util.ExternalizableHelper.readExternalizableLite(ExternalizableHelper.java:2265)
	at com.tangosol.util.ExternalizableHelper.readObjectInternal(ExternalizableHelper.java:2579)
	at com.tangosol.util.ExternalizableHelper.deserializeInternal(ExternalizableHelper.java:3098)
	at com.tangosol.util.ExternalizableHelper.fromBinary(ExternalizableHelper.java:334)
	at com.tangosol.coherence.component.util.daemon.queueProcessor.service.grid.partitionedService.PartitionedCache$InvokeRequest.deserializeProcessor(PartitionedCache.CDB:7)
	at com.tangosol.coherence.component.util.daemon.queueProcessor.service.grid.partitionedService.PartitionedCache.onInvokeRequest(PartitionedCache.CDB:47)
	at com.tangosol.coherence.component.util.daemon.queueProcessor.service.grid.partitionedService.PartitionedCache$InvokeRequest.run(PartitionedCache.CDB:1)
	at com.tangosol.coherence.component.util.DaemonPool$WrapperTask.run(DaemonPool.CDB:1)
	at com.tangosol.coherence.component.util.DaemonPool$WrapperTask.run(DaemonPool.CDB:32)
	at com.tangosol.coherence.component.util.daemon.queueProcessor.service.grid.PartitionedService$DaemonPool$WrapperTask.run(PartitionedService.CDB:1)
	at com.tangosol.coherence.component.util.DaemonPool$Daemon.onNotify(DaemonPool.CDB:66)
	at com.tangosol.coherence.component.util.Daemon.run(Daemon.CDB:54)
	at java.base/java.lang.Thread.run(Thread.java:844)

ClassLoader: null) readObject failed: java.lang.ClassNotFoundException: REPL.$JShell$22$1
	at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:533)
	at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:186)
	at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:476)
	at java.base/java.lang.Class.forName0(Native Method)
	at java.base/java.lang.Class.forName(Class.java:375)
	at java.base/java.io.ObjectInputStream.resolveClass(ObjectInputStream.java:685)
	at com.tangosol.io.ResolvingObjectInputStream.resolveClass(ResolvingObjectInputStream.java:66)
	at java.base/java.io.ObjectInputStream.readNonProxyDesc(ObjectInputStream.java:1841)
	at java.base/java.io.ObjectInputStream.readClassDesc(ObjectInputStream.java:1735)
	at java.base/java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:2008)
	at java.base/java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1557)
	at java.base/java.io.ObjectInputStream.readObject(ObjectInputStream.java:422)
	at com.tangosol.util.ExternalizableHelper.readSerializable(ExternalizableHelper.java:2445)
	at com.tangosol.util.ExternalizableHelper.readObjectInternal(ExternalizableHelper.java:2582)
	at com.tangosol.util.ExternalizableHelper.readObject(ExternalizableHelper.java:2524)
	at com.tangosol.util.ExternalizableHelper.readObject(ExternalizableHelper.java:2502)
	at com.tangosol.internal.util.invoke.RemoteConstructor.readExternal(RemoteConstructor.java:182)
	at com.tangosol.util.ExternalizableHelper.readExternalizableLite(ExternalizableHelper.java:2265)
	at com.tangosol.util.ExternalizableHelper.readObjectInternal(ExternalizableHelper.java:2579)
	at com.tangosol.util.ExternalizableHelper.deserializeInternal(ExternalizableHelper.java:3098)
	at com.tangosol.util.ExternalizableHelper.fromBinary(ExternalizableHelper.java:334)
	at com.tangosol.coherence.component.util.daemon.queueProcessor.service.grid.partitionedService.PartitionedCache$InvokeRequest.deserializeProcessor(PartitionedCache.CDB:7)
	at com.tangosol.coherence.component.util.daemon.queueProcessor.service.grid.partitionedService.PartitionedCache.onInvokeRequest(PartitionedCache.CDB:47)
	at com.tangosol.coherence.component.util.daemon.queueProcessor.service.grid.partitionedService.PartitionedCache$InvokeRequest.run(PartitionedCache.CDB:1)
	at com.tangosol.coherence.component.util.DaemonPool$WrapperTask.run(DaemonPool.CDB:1)
	at com.tangosol.coherence.component.util.DaemonPool$WrapperTask.run(DaemonPool.CDB:32)
	at com.tangosol.coherence.component.util.daemon.queueProcessor.service.grid.PartitionedService$DaemonPool$WrapperTask.run(PartitionedService.CDB:1)
	at com.tangosol.coherence.component.util.DaemonPool$Daemon.onNotify(DaemonPool.CDB:66)
	at com.tangosol.coherence.component.util.Daemon.run(Daemon.CDB:54)
	at java.base/java.lang.Thread.run(Thread.java:844)

ClassLoader: null
|        at Base.ensureRuntimeException (Base.java:296)
|        at Grid.tagException (Grid.CDB:61)
|        at PartitionedCache.onInvokeRequest (PartitionedCache.CDB:92)
|        at PartitionedCache$InvokeRequest.run (PartitionedCache.CDB:1)
|        at DaemonPool$WrapperTask.run (DaemonPool.CDB:1)
|        at DaemonPool$WrapperTask.run (DaemonPool.CDB:32)
|        at PartitionedService$DaemonPool$WrapperTask.run (PartitionedService.CDB:1)
|        at DaemonPool$Daemon.onNotify (DaemonPool.CDB:66)
|        at Daemon.run (Daemon.CDB:54)
|        at Thread.run (Thread.java:844)













More information about the kulla-dev mailing list