Hello, Can you please share the full stacktrace so we can see where the original ClassCastException is initiated? If it is not printed on a client, it should be printed on one of the server nodes.
Thanks! вт, 5 июн. 2018 г. в 18:35, Cong Guo <cong.g...@huawei.com>: > Hello, > > > > Can anyone see this email? > > > > *From:* Cong Guo > *Sent:* 2018年6月1日 13:11 > *To:* 'user@ignite.apache.org' <user@ignite.apache.org> > *Subject:* ClassCastException When Using CacheEntryProcessor in > StreamVisitor > > > > Hi, > > > > I want to use IgniteDataStreamer to handle data updates. Is it possible to > use CacheEntryProcessor in StreamVisitor? I write a simple program as > follows. It works on a single node, but gets a ClassCastException on two > nodes. The two nodes are on two physical machines. I have set > peerClassLoadingEnabled to true on both the nodes. How do I use > CacheEntryProcessor in StreamVisitor? > > > > The function is like: > > > > private static void streamUpdate(Ignite ignite, IgniteCache<Long, Person> > personCache) { > > CacheConfiguration<Long, Double> updateCfg > = new CacheConfiguration<>("updateCache"); > > try(IgniteCache<Long, Double> updateCache > = ignite.getOrCreateCache(updateCfg)) { > > try > (IgniteDataStreamer<Long, Double> updateStmr = > ignite.dataStreamer(updateCache.getName())) { > > > > > updateStmr.receiver(StreamVisitor.from((cache,e) -> { > > > Long id = e.getKey(); > > > Double newVal = e.getValue(); > > > personCache.<Long, BinaryObject>withKeepBinary().invoke(id, > > > new CacheEntryProcessor<Long, BinaryObject, Object>() { > > > public Object process(MutableEntry<Long, BinaryObject> entry, > Object...objects) throws EntryProcessorException { > > > BinaryObjectBuilder bldr = entry.getValue().toBuilder(); > > > double salary = bldr.getField("salary"); > > > bldr.setField("salary", salary+newVal); > > > entry.setValue(bldr.build()); > > > return null; > > > } > > > }); > > })); > > > > Random > generator = new Random(); > > for(long > i=1;i<=EXP_SIZE;i++) { > > > long rankey = 1+generator.nextInt(EXP_SIZE); > > > updateStmr.addData(rankey, 10.0); > > } > > }//end second try > > }//end first try > > } > > > > Here the Person class is from the ignite example. There is no exception on > a single node. > > The exception is like: > > > > javax.cache.processor.EntryProcessorException: > java.lang.ClassCastException: com.huawei.clusterexperiment.model.Person > cannot be cast to org.apache.ignite.binary.BinaryObject > > at > org.apache.ignite.internal.processors.cache.CacheInvokeResult.get(CacheInvokeResult.java:102) > > at > org.apache.ignite.internal.processors.cache.IgniteCacheProxyImpl.invoke(IgniteCacheProxyImpl.java:1361) > > at > org.apache.ignite.internal.processors.cache.IgniteCacheProxyImpl.invoke(IgniteCacheProxyImpl.java:1405) > > at > org.apache.ignite.internal.processors.cache.GatewayProtectedCacheProxy.invoke(GatewayProtectedCacheProxy.java:1362) > > at > com.huawei.clusterexperiment.Client.lambda$streamUpdate$a02be2b7$1(Client.java:310) > > at > org.apache.ignite.stream.StreamVisitor$1.apply(StreamVisitor.java:50) > > at > org.apache.ignite.stream.StreamVisitor$1.apply(StreamVisitor.java:48) > > at > org.apache.ignite.stream.StreamVisitor.receive(StreamVisitor.java:38) > > at > org.apache.ignite.internal.processors.datastreamer.DataStreamerUpdateJob.call(DataStreamerUpdateJob.java:137) > > at > org.apache.ignite.internal.processors.datastreamer.DataStreamProcessor.localUpdate(DataStreamProcessor.java:397) > > at > org.apache.ignite.internal.processors.datastreamer.DataStreamProcessor.processRequest(DataStreamProcessor.java:302) > > at > org.apache.ignite.internal.processors.datastreamer.DataStreamProcessor.access$000(DataStreamProcessor.java:59) > > at > org.apache.ignite.internal.processors.datastreamer.DataStreamProcessor$1.onMessage(DataStreamProcessor.java:89) > > at > org.apache.ignite.internal.managers.communication.GridIoManager.invokeListener(GridIoManager.java:1555) > > at > org.apache.ignite.internal.managers.communication.GridIoManager.processRegularMessage0(GridIoManager.java:1183) > > at > org.apache.ignite.internal.managers.communication.GridIoManager.access$4200(GridIoManager.java:126) > > at > org.apache.ignite.internal.managers.communication.GridIoManager$9.run(GridIoManager.java:1090) > > at > org.apache.ignite.internal.util.StripedExecutor$Stripe.run(StripedExecutor.java:505) > > at java.lang.Thread.run(Thread.java:745) > > > > >