Re: ScanQuery throwing Exception for java Thin client while peerclassloading is enabled
Hi Ilya, Thanks for your response, yes I had tried with withKeepBinary() option. If I call with withKeepBinary() option then there no deserialization related exception is coming but the returned entries are being wrapped to 'BinaryObjectImpl' and hence getting ClassCastException. Is there any option to get the entries of rawtype? I'm using the following code snippet to fetch the data: public class Predicate implements IgniteBiPredicate { /** * */ private static final long serialVersionUID = 1L; @Override public boolean apply(K e1, V e2) { return true; } } public class IgniteValueClass implements Binarylizable, Serializable { private static final long serialVersionUID = 50283244369719L; @QuerySqlField(index = true) String id; @QuerySqlField(index = true) String val1; @QuerySqlField String val2; public String getId() { return id; } public void setId(String id) { this.id = id; } public String getVal1() { return val1; } public void setVal1(String val1) { this.val1 = val1; } public String getVal2() { return val2; } public void setVal2(String val2) { this.val2 = val2; } @Override public void writeBinary(BinaryWriter writer) throws BinaryObjectException { writer.writeString("id", id); writer.writeString("val1", val1); writer.writeString("val2", val2); } @Override public void readBinary(BinaryReader reader) throws BinaryObjectException { id = reader.readString("id"); val1 = reader.readString("val1"); val2 = reader.readString("val2"); } } public Iterator> getAllEntries(String areaName) throws NotClientException { checkConnectedAndExists(areaName); Query> sql = new ScanQuery<>(new Predicate<>()); try (QueryCursor> cursor = ignite.cache(areaName).withKeepBinary().query(sql)) { return returnEntry(cursor); } } Thanks Saby -- Sent from: http://apache-ignite-users.70518.x6.nabble.com/
Re: ScanQuery throwing Exception for java Thin client while peerclassloading is enabled
Hi Ilya, I tested it with nightly build of 17/09/2018(ver. 2.7.0.20180917#19700101-sha1:DEV), but getting the same exception. Getting the following exception while trying to fetch the data from cache using ScanQuery from Java Thin client, but SqlQuery giving the correct result. ScanQuery excepting cached class's description in the server class path. The definition of the cached class is- public class IgniteValueClass implements Binarylizable, Serializable { private static final long serialVersionUID = 50283244369719L; @QuerySqlField(index = true) String id; @QuerySqlField(index = true) String val1; @QuerySqlField String val2; public String getId() { return id; } public void setId(String id) { this.id = id; } public String getVal1() { return val1; } public void setVal1(String val1) { this.val1 = val1; } public String getVal2() { return val2; } public void setVal2(String val2) { this.val2 = val2; } @Override public boolean equals(Object obj) { if (obj == null) return false; IgniteValueClass newObj = (IgniteValueClass) obj; if (newObj == this) return true; return check(id, newObj.id) && check(val1, newObj.val1) && check(val2, newObj.val2); } private boolean check(String v1, String v2) { if (v1 == v2 || (v1 != null && v1.equals(v2))) return true; return false; } @Override public void writeBinary(BinaryWriter writer) throws BinaryObjectException { writer.writeString("id", id); writer.writeString("val1", val1); writer.writeString("val2", val2); } @Override public void readBinary(BinaryReader reader) throws BinaryObjectException { id = reader.readString("id"); val1 = reader.readString("val1"); val2 = reader.readString("val2"); } @Override public String toString() { return "ID:" + id + " Val1:" + val1 + " Val2:" + val2; } } The server is throwing this exception: [13:05:12,104][SEVERE][client-connector-#75][ClientListenerNioListener] Failed to process client request [req=o.a.i.i.processors.platform.client.cache.ClientCacheScanQueryRequest@490c852e] class org.apache.ignite.binary.BinaryInvalidTypeException: xxx.imdg.ignite.test.IgniteValueClass at org.apache.ignite.internal.binary.BinaryContext.descriptorForTypeId(BinaryContext.java:707) at org.apache.ignite.internal.binary.BinaryReaderExImpl.deserialize0(BinaryReaderExImpl.java:1757) at org.apache.ignite.internal.binary.BinaryReaderExImpl.deserialize(BinaryReaderExImpl.java:1716) at org.apache.ignite.internal.binary.BinaryObjectImpl.deserializeValue(BinaryObjectImpl.java:798) at org.apache.ignite.internal.binary.BinaryObjectImpl.value(BinaryObjectImpl.java:143) at org.apache.ignite.internal.processors.cache.CacheObjectUtils.unwrapBinary(CacheObjectUtils.java:177) at org.apache.ignite.internal.processors.cache.CacheObjectUtils.unwrapBinaryIfNeeded(CacheObjectUtils.java:39) at org.apache.ignite.internal.processors.cache.query.GridCacheQueryManager$ScanQueryIterator.advance(GridCacheQueryManager.java:3082) at org.apache.ignite.internal.processors.cache.query.GridCacheQueryManager$ScanQueryIterator.onHasNext(GridCacheQueryManager.java:2984) 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.platform.client.cache.ClientCacheQueryCursor.writePage(ClientCacheQueryCursor.java:77) at org.apache.ignite.internal.processors.platform.client.cache.ClientCacheQueryResponse.encode(ClientCacheQueryResponse.java:50) at org.apache.ignite.internal.processors.platform.client.ClientMessageParser.encode(ClientMessageParser.java:387) at org.apache.ignite.internal.processors.odbc.ClientListenerNioListener.onMessage(ClientListenerNioListener.java:172) at org.apache.ignite.internal.processors.odbc.ClientListenerNioListener.onMessage(ClientListenerNioListener.java:45) at org.apache.ignite.internal.util.nio.GridNioFilterChain$TailFilter.onMessageReceived(GridNioFilterChain.java:279) at org.apache.ignite.internal.util.nio.GridNioFilterAdapter.proceedMessageReceived(GridNioFilterAdapter.java:109) at org.apache.ignite.internal.util.nio.GridNioAsyncNotifyFilter$3.body(GridNioAsyncNotifyFilter.java:97
Re: ScanQuery throwing Exception for java Thin client while peerclassloading is enabled
Hi Ilya, Thanks for your response. Is the fix included in the Nightly build? I took the nightly build of 3rt Sep, but it didn't work. It(ScanQuery) is still expecting all the pojos and predicate classes in the Server lib when trying to fetch the data using Thin client. [16:50:15,180][SEVERE][client-connector-#64][ClientListenerNioListener] Failed to process client request [req=o.a.i.i.processors.platform.client.cache.ClientCacheScanQueryRequest@32b13991] class org.apache.ignite.binary.BinaryInvalidTypeException: XXX.dm.imdg.ignite.test.IgniteValueClass at org.apache.ignite.internal.binary.BinaryContext.descriptorForTypeId(BinaryContext.java:707) at org.apache.ignite.internal.binary.BinaryReaderExImpl.deserialize0(BinaryReaderExImpl.java:1757) at org.apache.ignite.internal.binary.BinaryReaderExImpl.deserialize(BinaryReaderExImpl.java:1716) at org.apache.ignite.internal.binary.BinaryObjectImpl.deserializeValue(BinaryObjectImpl.java:798) at org.apache.ignite.internal.binary.BinaryObjectImpl.value(BinaryObjectImpl.java:143) at org.apache.ignite.internal.processors.cache.CacheObjectUtils.unwrapBinary(CacheObjectUtils.java:177) at org.apache.ignite.internal.processors.cache.CacheObjectUtils.unwrapBinaryIfNeeded(CacheObjectUtils.java:39) at org.apache.ignite.internal.processors.cache.query.GridCacheQueryManager$ScanQueryIterator.advance(GridCacheQueryManager.java:3080) at org.apache.ignite.internal.processors.cache.query.GridCacheQueryManager$ScanQueryIterator.onHasNext(GridCacheQueryManager.java:2982) 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.platform.client.cache.ClientCacheQueryCursor.writePage(ClientCacheQueryCursor.java:77) at org.apache.ignite.internal.processors.platform.client.cache.ClientCacheQueryResponse.encode(ClientCacheQueryResponse.java:50) at org.apache.ignite.internal.processors.platform.client.ClientMessageParser.encode(ClientMessageParser.java:387) at org.apache.ignite.internal.processors.odbc.ClientListenerNioListener.onMessage(ClientListenerNioListener.java:172) at org.apache.ignite.internal.processors.odbc.ClientListenerNioListener.onMessage(ClientListenerNioListener.java:45) at org.apache.ignite.internal.util.nio.GridNioFilterChain$TailFilter.onMessageReceived(GridNioFilterChain.java:279) at org.apache.ignite.internal.util.nio.GridNioFilterAdapter.proceedMessageReceived(GridNioFilterAdapter.java:109) at org.apache.ignite.internal.util.nio.GridNioAsyncNotifyFilter$3.body(GridNioAsyncNotifyFilter.java:97) at org.apache.ignite.internal.util.worker.GridWorker.run(GridWorker.java:110) at org.apache.ignite.internal.util.worker.GridWorkerPool$1.run(GridWorkerPool.java:70) at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source) at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source) at java.lang.Thread.run(Unknown Source) Caused by: java.lang.ClassNotFoundException: XXX.dm.imdg.ignite.test.IgniteValueClass at java.net.URLClassLoader.findClass(Unknown Source) at java.lang.ClassLoader.loadClass(Unknown Source) at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source) at java.lang.ClassLoader.loadClass(Unknown Source) at java.lang.Class.forName0(Native Method) at java.lang.Class.forName(Unknown Source) at org.apache.ignite.internal.util.IgniteUtils.forName(IgniteUtils.java:8665) at org.apache.ignite.internal.MarshallerContextImpl.getClass(MarshallerContextImpl.java:349) at org.apache.ignite.internal.binary.BinaryContext.descriptorForTypeId(BinaryContext.java:698) ... 23 more Thanks Saby -- Sent from: http://apache-ignite-users.70518.x6.nabble.com/
ScanQuery throwing Exception for java Thin client while peerclassloading is enabled
ScanQuery is reporting the following exception while trying to fetch the data from remote Ignite Server through the Java thing client keeping the peerClassLoading is enabled, But SqlQuery is fetching the correct result and is sending it back to the client. If Lamda expression is used as filter in the ScanQuery then Ignite Server reporting "java.lang.IllegalArgumentException: Invalid lambda deserialization" Is there any way to use ScanQuery to fetch data from remote server using Thin Client without copying jar(s) to the remote server(s)? public class Predicate implements IgniteBiPredicate { public boolean apply(K e1, V e2) { return true; } } [10:48:39,126][SEVERE][client-connector-#65][ClientListenerNioListener] Failed to process client request [req=o.a.i.i.processors.platform.client.cache.ClientCacheScanQueryRequest@504d875d] class org.apache.ignite.binary.BinaryInvalidTypeException: XXX.datamigration.imdg.abstractionlayer.connections.impl.ignite.Predicate at org.apache.ignite.internal.binary.BinaryContext.descriptorForTypeId(BinaryContext.java:697) at org.apache.ignite.internal.binary.BinaryReaderExImpl.deserialize0(BinaryReaderExImpl.java:1755) at org.apache.ignite.internal.binary.BinaryReaderExImpl.deserialize(BinaryReaderExImpl.java:1714) at org.apache.ignite.internal.binary.BinaryObjectImpl.deserializeValue(BinaryObjectImpl.java:798) at org.apache.ignite.internal.binary.BinaryObjectImpl.deserialize(BinaryObjectImpl.java:640) at org.apache.ignite.internal.processors.platform.client.cache.ClientCacheScanQueryRequest.createFilter(ClientCacheScanQueryRequest.java:126) at org.apache.ignite.internal.processors.platform.client.cache.ClientCacheScanQueryRequest.process(ClientCacheScanQueryRequest.java:92) at org.apache.ignite.internal.processors.platform.client.ClientRequestHandler.handle(ClientRequestHandler.java:57) at org.apache.ignite.internal.processors.odbc.ClientListenerNioListener.onMessage(ClientListenerNioListener.java:160) at org.apache.ignite.internal.processors.odbc.ClientListenerNioListener.onMessage(ClientListenerNioListener.java:44) at org.apache.ignite.internal.util.nio.GridNioFilterChain$TailFilter.onMessageReceived(GridNioFilterChain.java:279) at org.apache.ignite.internal.util.nio.GridNioFilterAdapter.proceedMessageReceived(GridNioFilterAdapter.java:109) at org.apache.ignite.internal.util.nio.GridNioAsyncNotifyFilter$3.body(GridNioAsyncNotifyFilter.java:97) at org.apache.ignite.internal.util.worker.GridWorker.run(GridWorker.java:110) at org.apache.ignite.internal.util.worker.GridWorkerPool$1.run(GridWorkerPool.java:70) at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source) at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source) at java.lang.Thread.run(Unknown Source) Caused by: java.lang.ClassNotFoundException: XXX.datamigration.imdg.abstractionlayer.connections.impl.ignite.Predicate at java.net.URLClassLoader.findClass(Unknown Source) at java.lang.ClassLoader.loadClass(Unknown Source) at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source) at java.lang.ClassLoader.loadClass(Unknown Source) at java.lang.Class.forName0(Native Method) at java.lang.Class.forName(Unknown Source) at org.apache.ignite.internal.util.IgniteUtils.forName(IgniteUtils.java:8608) at org.apache.ignite.internal.MarshallerContextImpl.getClass(MarshallerContextImpl.java:349) at org.apache.ignite.internal.binary.BinaryContext.descriptorForTypeId(BinaryContext.java:688) -- Sent from: http://apache-ignite-users.70518.x6.nabble.com/