]
Tristan Tarrant updated ISPN-5463:
----------------------------------
Fix Version/s: 8.0.0.Alpha2
(was: 8.0.0.Alpha1)
ClassCastException:
org.infinispan.query.remote.indexing.ProtobufValueWrapper cannot be cast to [B
--------------------------------------------------------------------------------------------------
Key: ISPN-5463
URL:
https://issues.jboss.org/browse/ISPN-5463
Project: Infinispan
Issue Type: Bug
Components: Remote Querying
Affects Versions: 7.2.1.Final
Reporter: Philippe Cuvecle
Assignee: Adrian Nistor
Fix For: 7.2.2.Final, 8.0.0.Alpha2, 8.0.0.Final
I try to use hotrod + protobuf + event notification and get a Class cast exception on
Infinispan server side when trying to put an object
Server side :
---------------
Infinispan 7.2.1 in server mode
I have declared my proto file in the MBean ProtobufMetadataManager
Cache config :
<replicated-cache name="myReplicatedCache" mode="SYNC"
start="EAGER">
<indexing index="ALL" auto-config="true"/>
</replicated-cache>
Client side
-------------
My cache object is modeled as a POJO with 5 string fields and its proto definition file
I am able to put and get and even query successfully until I try to register a
ClientListener. When doing this, the first put fails with this stacktrace :
16:37:36,186 ERROR [org.infinispan.interceptors.InvocationContextInterceptor]
(HotRodServerWorker-7-5) ISPN000136: Execution error:
org.infinispan.commons.CacheListenerException: ISPN000280: Caught exception
[java.lang.ClassCastException] while invoking method [public void
org.infinispan.server.hotrod.ClientListenerRegistry$BaseClientEventSender.onCacheEvent(org.infinispan.notifications.cachelistener.event.CacheEntryEvent)]
on listener instance:
org.infinispan.server.hotrod.ClientListenerRegistry$StatelessClientEventSender@3909d917
at
org.infinispan.notifications.impl.AbstractListenerImpl$ListenerInvocationImpl$1.run(AbstractListenerImpl.java:291)
[infinispan-core.jar:7.2.1.Final]
at
org.infinispan.util.concurrent.WithinThreadExecutor.execute(WithinThreadExecutor.java:22)
[infinispan-core.jar:7.2.1.Final]
at
org.infinispan.notifications.impl.AbstractListenerImpl$ListenerInvocationImpl.invoke(AbstractListenerImpl.java:309)
[infinispan-core.jar:7.2.1.Final]
at
org.infinispan.notifications.cachelistener.CacheNotifierImpl$BaseCacheEntryListenerInvocation.doRealInvocation(CacheNotifierImpl.java:1160)
[infinispan-core.jar:7.2.1.Final]
at
org.infinispan.notifications.cachelistener.CacheNotifierImpl$BaseCacheEntryListenerInvocation.invokeNoChecks(CacheNotifierImpl.java:1155)
[infinispan-core.jar:7.2.1.Final]
at
org.infinispan.notifications.cachelistener.CacheNotifierImpl$BaseCacheEntryListenerInvocation.invoke(CacheNotifierImpl.java:1132)
[infinispan-core.jar:7.2.1.Final]
at
org.infinispan.notifications.cachelistener.CacheNotifierImpl.notifyCacheEntryCreated(CacheNotifierImpl.java:290)
[infinispan-core.jar:7.2.1.Final]
at
org.infinispan.interceptors.locking.ClusteringDependentLogic$AbstractClusteringDependentLogic.notifyCommitEntry(ClusteringDependentLogic.java:138)
[infinispan-core.jar:7.2.1.Final]
at
org.infinispan.interceptors.locking.ClusteringDependentLogic$InvalidationLogic.commitSingleEntry(ClusteringDependentLogic.java:331)
[infinispan-core.jar:7.2.1.Final]
at
org.infinispan.interceptors.locking.ClusteringDependentLogic$ReplicationLogic.commitSingleEntry(ClusteringDependentLogic.java:372)
[infinispan-core.jar:7.2.1.Final]
at
org.infinispan.interceptors.locking.ClusteringDependentLogic$AbstractClusteringDependentLogic.commitEntry(ClusteringDependentLogic.java:108)
[infinispan-core.jar:7.2.1.Final]
at
org.infinispan.interceptors.EntryWrappingInterceptor.commitContextEntry(EntryWrappingInterceptor.java:371)
[infinispan-core.jar:7.2.1.Final]
at
org.infinispan.interceptors.EntryWrappingInterceptor.commitEntryIfNeeded(EntryWrappingInterceptor.java:549)
[infinispan-core.jar:7.2.1.Final]
at
org.infinispan.interceptors.EntryWrappingInterceptor.commitContextEntries(EntryWrappingInterceptor.java:348)
[infinispan-core.jar:7.2.1.Final]
at
org.infinispan.interceptors.EntryWrappingInterceptor.invokeNextAndApplyChanges(EntryWrappingInterceptor.java:422)
[infinispan-core.jar:7.2.1.Final]
at
org.infinispan.interceptors.EntryWrappingInterceptor.setSkipRemoteGetsAndInvokeNextForDataCommand(EntryWrappingInterceptor.java:453)
[infinispan-core.jar:7.2.1.Final]
at
org.infinispan.interceptors.EntryWrappingInterceptor.visitPutKeyValueCommand(EntryWrappingInterceptor.java:195)
[infinispan-core.jar:7.2.1.Final]
at
org.infinispan.commands.write.PutKeyValueCommand.acceptVisitor(PutKeyValueCommand.java:71)
[infinispan-core.jar:7.2.1.Final]
at
org.infinispan.interceptors.base.CommandInterceptor.invokeNextInterceptor(CommandInterceptor.java:97)
[infinispan-core.jar:7.2.1.Final]
at
org.infinispan.query.backend.QueryInterceptor.visitPutKeyValueCommand(QueryInterceptor.java:164)
at
org.infinispan.commands.write.PutKeyValueCommand.acceptVisitor(PutKeyValueCommand.java:71)
[infinispan-core.jar:7.2.1.Final]
at
org.infinispan.interceptors.base.CommandInterceptor.invokeNextInterceptor(CommandInterceptor.java:97)
[infinispan-core.jar:7.2.1.Final]
at
org.infinispan.interceptors.locking.AbstractLockingInterceptor.visitNonTxDataWriteCommand(AbstractLockingInterceptor.java:88)
[infinispan-core.jar:7.2.1.Final]
at
org.infinispan.interceptors.locking.NonTransactionalLockingInterceptor.visitDataWriteCommand(NonTransactionalLockingInterceptor.java:40)
[infinispan-core.jar:7.2.1.Final]
at
org.infinispan.interceptors.locking.AbstractLockingInterceptor.visitPutKeyValueCommand(AbstractLockingInterceptor.java:55)
[infinispan-core.jar:7.2.1.Final]
at
org.infinispan.commands.write.PutKeyValueCommand.acceptVisitor(PutKeyValueCommand.java:71)
[infinispan-core.jar:7.2.1.Final]
at
org.infinispan.interceptors.base.CommandInterceptor.invokeNextInterceptor(CommandInterceptor.java:97)
[infinispan-core.jar:7.2.1.Final]
at
org.infinispan.interceptors.base.CommandInterceptor.handleDefault(CommandInterceptor.java:111)
[infinispan-core.jar:7.2.1.Final]
at
org.infinispan.commands.AbstractVisitor.visitPutKeyValueCommand(AbstractVisitor.java:44)
[infinispan-core.jar:7.2.1.Final]
at
org.infinispan.commands.write.PutKeyValueCommand.acceptVisitor(PutKeyValueCommand.java:71)
[infinispan-core.jar:7.2.1.Final]
at
org.infinispan.interceptors.base.CommandInterceptor.invokeNextInterceptor(CommandInterceptor.java:97)
[infinispan-core.jar:7.2.1.Final]
at
org.infinispan.statetransfer.StateTransferInterceptor.handleNonTxWriteCommand(StateTransferInterceptor.java:324)
[infinispan-core.jar:7.2.1.Final]
at
org.infinispan.statetransfer.StateTransferInterceptor.handleWriteCommand(StateTransferInterceptor.java:256)
[infinispan-core.jar:7.2.1.Final]
at
org.infinispan.statetransfer.StateTransferInterceptor.visitPutKeyValueCommand(StateTransferInterceptor.java:115)
[infinispan-core.jar:7.2.1.Final]
at
org.infinispan.commands.write.PutKeyValueCommand.acceptVisitor(PutKeyValueCommand.java:71)
[infinispan-core.jar:7.2.1.Final]
at
org.infinispan.interceptors.base.CommandInterceptor.invokeNextInterceptor(CommandInterceptor.java:97)
[infinispan-core.jar:7.2.1.Final]
at
org.infinispan.interceptors.CacheMgmtInterceptor.updateStoreStatistics(CacheMgmtInterceptor.java:191)
[infinispan-core.jar:7.2.1.Final]
at
org.infinispan.interceptors.CacheMgmtInterceptor.visitPutKeyValueCommand(CacheMgmtInterceptor.java:177)
[infinispan-core.jar:7.2.1.Final]
at
org.infinispan.commands.write.PutKeyValueCommand.acceptVisitor(PutKeyValueCommand.java:71)
[infinispan-core.jar:7.2.1.Final]
at
org.infinispan.interceptors.base.CommandInterceptor.invokeNextInterceptor(CommandInterceptor.java:97)
[infinispan-core.jar:7.2.1.Final]
at
org.infinispan.interceptors.compat.BaseTypeConverterInterceptor.visitPutKeyValueCommand(BaseTypeConverterInterceptor.java:69)
[infinispan-core.jar:7.2.1.Final]
at
org.infinispan.commands.write.PutKeyValueCommand.acceptVisitor(PutKeyValueCommand.java:71)
[infinispan-core.jar:7.2.1.Final]
at
org.infinispan.interceptors.base.CommandInterceptor.invokeNextInterceptor(CommandInterceptor.java:97)
[infinispan-core.jar:7.2.1.Final]
at
org.infinispan.interceptors.InvocationContextInterceptor.handleAll(InvocationContextInterceptor.java:102)
[infinispan-core.jar:7.2.1.Final]
at
org.infinispan.interceptors.InvocationContextInterceptor.handleDefault(InvocationContextInterceptor.java:71)
[infinispan-core.jar:7.2.1.Final]
at
org.infinispan.commands.AbstractVisitor.visitPutKeyValueCommand(AbstractVisitor.java:44)
[infinispan-core.jar:7.2.1.Final]
at
org.infinispan.commands.write.PutKeyValueCommand.acceptVisitor(PutKeyValueCommand.java:71)
[infinispan-core.jar:7.2.1.Final]
at org.infinispan.interceptors.InterceptorChain.invoke(InterceptorChain.java:336)
[infinispan-core.jar:7.2.1.Final]
at
org.infinispan.cache.impl.CacheImpl.executeCommandAndCommitIfNeeded(CacheImpl.java:1617)
[infinispan-core.jar:7.2.1.Final]
at org.infinispan.cache.impl.CacheImpl.putInternal(CacheImpl.java:1097)
[infinispan-core.jar:7.2.1.Final]
at org.infinispan.cache.impl.CacheImpl.put(CacheImpl.java:1089)
[infinispan-core.jar:7.2.1.Final]
at org.infinispan.cache.impl.DecoratedCache.put(DecoratedCache.java:522)
[infinispan-core.jar:7.2.1.Final]
at
org.infinispan.cache.impl.AbstractDelegatingAdvancedCache.put(AbstractDelegatingAdvancedCache.java:236)
[infinispan-core.jar:7.2.1.Final]
at
org.infinispan.server.hotrod.CacheDecodeContext.put(CacheDecodeContext.scala:215)
[infinispan-server-hotrod.jar:7.2.1.Final]
at
org.infinispan.server.hotrod.HotRodDecoder.org$infinispan$server$hotrod$HotRodDecoder$$decodeValue(HotRodDecoder.scala:132)
[infinispan-server-hotrod.jar:7.2.1.Final]
at
org.infinispan.server.hotrod.HotRodDecoder$$anonfun$decode$1.apply$mcV$sp(HotRodDecoder.scala:50)
[infinispan-server-hotrod.jar:7.2.1.Final]
at
org.infinispan.server.hotrod.HotRodDecoder.wrapSecurity(HotRodDecoder.scala:208)
[infinispan-server-hotrod.jar:7.2.1.Final]
at org.infinispan.server.hotrod.HotRodDecoder.decode(HotRodDecoder.scala:45)
[infinispan-server-hotrod.jar:7.2.1.Final]
at io.netty.handler.codec.ReplayingDecoder.callDecode(ReplayingDecoder.java:370)
[netty-all-4.0.25.Final.jar:4.0.25.Final]
at
io.netty.handler.codec.ByteToMessageDecoder.channelRead(ByteToMessageDecoder.java:168)
[netty-all-4.0.25.Final.jar:4.0.25.Final]
at
org.infinispan.server.hotrod.HotRodDecoder.org$infinispan$server$core$transport$StatsChannelHandler$$super$channelRead(HotRodDecoder.scala:31)
[infinispan-server-hotrod.jar:7.2.1.Final]
at
org.infinispan.server.core.transport.StatsChannelHandler$class.channelRead(StatsChannelHandler.scala:32)
[infinispan-server-core.jar:7.2.1.Final]
at org.infinispan.server.hotrod.HotRodDecoder.channelRead(HotRodDecoder.scala:31)
[infinispan-server-hotrod.jar:7.2.1.Final]
at
io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:308)
[netty-all-4.0.25.Final.jar:4.0.25.Final]
at
io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:294)
[netty-all-4.0.25.Final.jar:4.0.25.Final]
at
io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:846)
[netty-all-4.0.25.Final.jar:4.0.25.Final]
at
io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:130)
[netty-all-4.0.25.Final.jar:4.0.25.Final]
at io.netty.channel.nio.NioEventLoop.processSelectedKey(NioEventLoop.java:511)
[netty-all-4.0.25.Final.jar:4.0.25.Final]
at
io.netty.channel.nio.NioEventLoop.processSelectedKeysOptimized(NioEventLoop.java:468)
[netty-all-4.0.25.Final.jar:4.0.25.Final]
at io.netty.channel.nio.NioEventLoop.processSelectedKeys(NioEventLoop.java:382)
[netty-all-4.0.25.Final.jar:4.0.25.Final]
at io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:354)
[netty-all-4.0.25.Final.jar:4.0.25.Final]
at
io.netty.util.concurrent.SingleThreadEventExecutor$2.run(SingleThreadEventExecutor.java:116)
[netty-all-4.0.25.Final.jar:4.0.25.Final]
at
io.netty.util.concurrent.DefaultThreadFactory$DefaultRunnableDecorator.run(DefaultThreadFactory.java:137)
[netty-all-4.0.25.Final.jar:4.0.25.Final]
at java.lang.Thread.run(Thread.java:745) [rt.jar:1.7.0_65]
Caused by: java.lang.ClassCastException:
org.infinispan.query.remote.indexing.ProtobufValueWrapper cannot be cast to [B
at
org.infinispan.server.hotrod.ClientListenerRegistry$BaseClientEventSender.onCacheEvent(ClientListenerRegistry.scala:183)
[infinispan-server-hotrod.jar:7.2.1.Final]
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) [rt.jar:1.7.0_65]
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
[rt.jar:1.7.0_65]
at
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
[rt.jar:1.7.0_65]
at java.lang.reflect.Method.invoke(Method.java:606) [rt.jar:1.7.0_65]
at
org.infinispan.notifications.impl.AbstractListenerImpl$ListenerInvocationImpl$1.run(AbstractListenerImpl.java:286)
[infinispan-core.jar:7.2.1.Final]
... 73 more
Client side code :
----------------------
...
ConfigurationBuilder configurationBuilder = new ConfigurationBuilder();
configurationBuilder.addServer().host(IP_ADDRESS).port(11222).marshaller(new
ProtoStreamMarshaller());
RemoteCacheManager remoteCacheManager = new
RemoteCacheManager(configurationBuilder.build());
EventPrintListener listener = new EventPrintListener();
SerializationContext srcCtx =
ProtoStreamMarshaller.getSerializationContext(remoteCacheManager);
srcCtx.registerProtoFiles(FileDescriptorSource.fromResources("/myObject.proto"));
srcCtx.registerMarshaller(new MyObjectMarshaller());
// Obtain the cache
RemoteCache<Integer, MyObject> remoteCache =
remoteCacheManager.getCache("myReplicatedCache");
// Add remote listener
remoteCache.addClientListener(listener); // no issue if this is removed
MyObject o = new MyObject();
o.setA("XXXX");
o.setB("YYYY");
o.setC("ZZZZ");
o.setD("AAAA");
o.setE("BBBB");
remoteCache.put(1, o); // server stacktrace
Listener :
-----------
@ClientListener
public class EventPrintListener<K> {
@ClientCacheEntryCreated
public void createdEntry(ClientCacheEntryCreatedEvent<K> event) {
System.out.printf("** Key '%s' was created\n", event.getKey());
}
@ClientCacheEntryModified
public void modifiedEntry(ClientCacheEntryModifiedEvent<K> event) {
System.out.printf("** Key '%s' was modified\n", event.getKey());
}
@ClientCacheEntryRemoved
public void removedEntry(ClientCacheEntryRemovedEvent<K> event) {
System.out.printf("** Key '%s' was removed\n", event.getKey());
}
}