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