Hi Rafael, Lamdas and anonymous classes capture and serialize their Inner/OuterClass with all the fields, and classes of the fields of those fields, etc. In your case, ScanQueryClass was captured during the lamda serialization and that class was not found during deserialization on the other side:
Caused by: class org.apache.ignite.binary.BinaryObjectException: Failed to read field [name=capturingClass] at org.apache.ignite.internal.binary.BinaryFieldAccessor.read(BinaryFieldAccessor.java:192) at org.apache.ignite.internal.binary.BinaryClassDescriptor.read(BinaryClassDescriptor.java:874) ... 20 more Caused by: class org.apache.ignite.binary.BinaryInvalidTypeException: ScanQueryTest at org.apache.ignite.internal.binary.BinaryContext.descriptorForTypeId(BinaryContext.java:724) at org.apache.ignite.internal.binary.BinaryContext.descriptorForTypeId(BinaryContext.java:721) at org.apache.ignite.internal.binary.BinaryUtils.doReadClass(BinaryUtils.java:1638) at org.apache.ignite.internal.binary.BinaryUtils.doReadClass(BinaryUtils.java:1575) at org.apache.ignite.internal.binary.BinaryUtils.doReadClass(BinaryUtils.java:1552) at org.apache.ignite.internal.binary.BinaryReaderExImpl.readClass(BinaryReaderExImpl.java:383) at org.apache.ignite.internal.binary.BinaryFieldAccessor$DefaultFinalClassAccessor.readFixedType(BinaryFieldAccessor.java:907) at org.apache.ignite.internal.binary.BinaryFieldAccessor$DefaultFinalClassAccessor.read0(BinaryFieldAccessor.java:703) at org.apache.ignite.internal.binary.BinaryFieldAccessor.read(BinaryFieldAccessor.java:188) ... 21 more *Caused by: java.lang.ClassNotFoundException: ScanQueryTest* at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:581) at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:178) at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:522) at java.base/java.lang.Class.forName0(Native Method) at java.base/java.lang.Class.forName(Class.java:398) at org.apache.ignite.internal.util.IgniteUtils.forName(IgniteUtils.java:8828) at org.apache.ignite.internal.MarshallerContextImpl.getClass(MarshallerContextImpl.java:374) at org.apache.ignite.internal.binary.BinaryContext.descriptorForTypeId(BinaryContext.java:715) ... 29 more My advice is to avoid using lambdas and anonymous classes due to this specificity. Instead, you can create "private static classes" and Ignite will be serializing an instance of that class only: private static class MyFilter implements IgniteClosure { .... } Lamdas are nice for demos and simple code samples where Inner/OuterClasses are simple Java classes. While in real production environments, things can get messy. - Denis On Wed, Jul 1, 2020 at 9:36 AM Rafael Troilo <rafael.tro...@heigit.org> wrote: > Hey Guys, > > I have a strange problem with the Transform part of a ScanQuery that I get > a deserialize object exception for the SerializedLambda. > > javax.cache.CacheException: class > org.apache.ignite.IgniteCheckedException: Failed to deserialize object > [typeName=java.lang.invoke.SerializedLambda] > > Strange is that it works very well in other cases like: > > try (Ignite ignite = Ignition.start("ignite.xml")) { > IgniteCache<Integer,String> cache = > ignite.createCache("ScanTransformTest"); > cache.put(1, "Hello"); > > // 1 Just a broadcast with a IgniteClosure works! > compute.broadcast((a) -> 123L, "Hello").forEach(System.out::println); > > // 2 Running the ScanQuery on the remote server. Works too! > compute.broadcast(() -> { > try(QueryCursor<Long> cursor = cache.query(new > ScanQuery<>().setLocal(true), (a) -> 234L)){ > for( Long row : cursor) { > return row; > } > } > return 0; > }).forEach(System.out::println); > > > // 3 But running it from the client side it fails! > try(QueryCursor<Long> cursor = cache.query(new ScanQuery<>(), (a) -> > 345L)){ > for( Long row : cursor) { > System.out.println(row); > break; > } > } > > } > > Also changing the Lambda to a actually class implementing IgniteClosure > results in the same problem. > > Any idea what I'm doing wrong? > > We are running ignite ver. 2.8.0#20200226-sha1:341b01df > With java openjdk 11.0.7 2020-04-14 > > Thank you! > > Best, > Rafael > > > Error Log: > Exception in thread "main" javax.cache.CacheException: class > org.apache.ignite.IgniteCheckedException: Failed to deserialize object > [typeName=java.lang.invoke.SerializedLambda] > at > org.apache.ignite.internal.processors.cache.GridCacheUtils.convertToCacheException(GridCacheUtils.java:1317) > at > org.apache.ignite.internal.processors.cache.query.GridCacheQueryFutureAdapter.next(GridCacheQueryFutureAdapter.java:173) > at > org.apache.ignite.internal.processors.cache.query.GridCacheDistributedQueryManager$5.onHasNext(GridCacheDistributedQueryManager.java:645) > at > org.apache.ignite.internal.util.GridCloseableIteratorAdapter.hasNextX(GridCloseableIteratorAdapter.java:53) > at > org.apache.ignite.internal.util.lang.GridIteratorAdapter.hasNext(GridIteratorAdapter.java:45) > at > org.apache.ignite.internal.processors.cache.AutoClosableCursorIterator.hasNext(AutoClosableCursorIterator.java:49) > at ScanQueryTest.main(ScanQueryTest.java:49) > Caused by: class org.apache.ignite.IgniteCheckedException: Failed to > deserialize object [typeName=java.lang.invoke.SerializedLambda] > at > org.apache.ignite.internal.util.IgniteUtils.unmarshal(IgniteUtils.java:10310) > at > org.apache.ignite.internal.processors.cache.query.GridCacheQueryRequest.finishUnmarshal(GridCacheQueryRequest.java:389) > at > org.apache.ignite.internal.processors.cache.GridCacheIoManager.unmarshall(GridCacheIoManager.java:1625) > at > org.apache.ignite.internal.processors.cache.GridCacheIoManager.onMessage0(GridCacheIoManager.java:586) > at > org.apache.ignite.internal.processors.cache.GridCacheIoManager.handleMessage(GridCacheIoManager.java:392) > at > org.apache.ignite.internal.processors.cache.GridCacheIoManager.handleMessage(GridCacheIoManager.java:318) > at > org.apache.ignite.internal.processors.cache.GridCacheIoManager.access$100(GridCacheIoManager.java:109) > at > org.apache.ignite.internal.processors.cache.GridCacheIoManager$1.onMessage(GridCacheIoManager.java:308) > at > org.apache.ignite.internal.managers.communication.GridIoManager.invokeListener(GridIoManager.java:1843) > at > org.apache.ignite.internal.managers.communication.GridIoManager.processRegularMessage0(GridIoManager.java:1468) > at > org.apache.ignite.internal.managers.communication.GridIoManager.access$5200(GridIoManager.java:229) > at > org.apache.ignite.internal.managers.communication.GridIoManager$9.run(GridIoManager.java:1365) > at > java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128) > at > java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628) > at java.base/java.lang.Thread.run(Thread.java:834) > Caused by: class org.apache.ignite.binary.BinaryObjectException: Failed to > deserialize object [typeName=java.lang.invoke.SerializedLambda] > at > org.apache.ignite.internal.binary.BinaryClassDescriptor.read(BinaryClassDescriptor.java:913) > at > org.apache.ignite.internal.binary.BinaryReaderExImpl.deserialize0(BinaryReaderExImpl.java:1764) > at > org.apache.ignite.internal.binary.BinaryReaderExImpl.deserialize(BinaryReaderExImpl.java:1716) > at > org.apache.ignite.internal.binary.GridBinaryMarshaller.deserialize(GridBinaryMarshaller.java:307) > at > org.apache.ignite.internal.binary.BinaryMarshaller.unmarshal0(BinaryMarshaller.java:101) > at > org.apache.ignite.marshaller.AbstractNodeNameAwareMarshaller.unmarshal(AbstractNodeNameAwareMarshaller.java:81) > at > org.apache.ignite.internal.util.IgniteUtils.unmarshal(IgniteUtils.java:10304) > ... 14 more > Caused by: class org.apache.ignite.binary.BinaryObjectException: Failed to > read field [name=capturingClass] > at > org.apache.ignite.internal.binary.BinaryFieldAccessor.read(BinaryFieldAccessor.java:192) > at > org.apache.ignite.internal.binary.BinaryClassDescriptor.read(BinaryClassDescriptor.java:874) > ... 20 more > Caused by: class org.apache.ignite.binary.BinaryInvalidTypeException: > ScanQueryTest > at > org.apache.ignite.internal.binary.BinaryContext.descriptorForTypeId(BinaryContext.java:724) > at > org.apache.ignite.internal.binary.BinaryContext.descriptorForTypeId(BinaryContext.java:721) > at > org.apache.ignite.internal.binary.BinaryUtils.doReadClass(BinaryUtils.java:1638) > at > org.apache.ignite.internal.binary.BinaryUtils.doReadClass(BinaryUtils.java:1575) > at > org.apache.ignite.internal.binary.BinaryUtils.doReadClass(BinaryUtils.java:1552) > at > org.apache.ignite.internal.binary.BinaryReaderExImpl.readClass(BinaryReaderExImpl.java:383) > at > org.apache.ignite.internal.binary.BinaryFieldAccessor$DefaultFinalClassAccessor.readFixedType(BinaryFieldAccessor.java:907) > at > org.apache.ignite.internal.binary.BinaryFieldAccessor$DefaultFinalClassAccessor.read0(BinaryFieldAccessor.java:703) > at > org.apache.ignite.internal.binary.BinaryFieldAccessor.read(BinaryFieldAccessor.java:188) > ... 21 more > Caused by: java.lang.ClassNotFoundException: ScanQueryTest > at > java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:581) > at > java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:178) > at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:522) > at java.base/java.lang.Class.forName0(Native Method) > at java.base/java.lang.Class.forName(Class.java:398) > at > org.apache.ignite.internal.util.IgniteUtils.forName(IgniteUtils.java:8828) > at > org.apache.ignite.internal.MarshallerContextImpl.getClass(MarshallerContextImpl.java:374) > at > org.apache.ignite.internal.binary.BinaryContext.descriptorForTypeId(BinaryContext.java:715) > ... 29 more > > > > > > -- > Rafael Troilo > HeiGIT gGmbH > Heidelberg Institute for Geoinformation Technology at Heidelberg University > > https://heigit.org | rafael.tro...@heigit.org | phone +49-6221-533 484 > > Postal address: Schloss-Wolfsbrunnenweg 33 | 69118 Heidelberg | Germany > Offices: Berliner Str. 45 | 69120 Heidelberg | Germany > > Amtsgericht Mannheim | HRB 733765 > Managing Directors: Prof. Dr. Alexander Zipf | Dr. Gesa Schönberger >