[
https://jira.jboss.org/browse/ISPN-637?page=com.atlassian.jira.plugin.sys...
]
Galder Zamarreño edited comment on ISPN-637 at 9/10/10 10:54 AM:
-----------------------------------------------------------------
A potential solution would be to have two types of MarshalledValues for keys. One with
equalityPreferenceForInstance = false and another with equalityPreferenceForInstance =
true. The first would be for operations originating remotely and the latter for ops
originating locally. So, for example:
- If a MV originates remotely goes through the MarshalledValueInterceptor, it's
equalityPreferenceForInstance would become false. With the improved comparison in
MV.equals provided by Paul [1], this would lead to raw equality.
- If a MV originates locally goes through the MarshalledValueInterceptor, it's
equalityPreferenceForInstance would become true. With the improved comparison in MV.equals
provided by Paul [1], this would lead to instance equality.
This would make sure that local comparisons are done efficiently. This is just an idea
though, I need to check if could be implemented properly.
[1] if (equalityPreferenceForInstance && that.equalityPreferenceForInstance)
{
was (Author: galder.zamarreno(a)jboss.com):
A potential solution would be to have two types of MarshalledValues for keys. One with
equalityPreferenceForInstance = false and another with equalityPreferenceForInstance =
true. The first would be for operations originating remotely and the latter for ops
originating locally. So, for example:
- If a MarshalledValue originating remotely goes through the MarshalledValueInterceptor,
it's equalityPreferenceForInstance would become false. With the improved comparison in
MV.equals provided by Paul [1], this would lead to raw equality.
- If a MV originating locally go remotely goes through the MarshalledValueInterceptor,
it's equalityPreferenceForInstance would become true. With the improved comparison in
MV.equals provided by Paul [1], this would lead to instance equality.
This would make sure that local comparisons are done efficiently. This is just an idea
though, I need to check if could be implemented properly.
[1] if (equalityPreferenceForInstance && that.equalityPreferenceForInstance)
{
MarshalledValue.equals(...) causing ClassNotFoundException during
remote invalidation handling
----------------------------------------------------------------------------------------------
Key: ISPN-637
URL:
https://jira.jboss.org/browse/ISPN-637
Project: Infinispan
Issue Type: Bug
Components: Marshalling
Affects Versions: 4.0.0.Final, 4.1.0.Final
Reporter: Paul Ferraro
Assignee: Galder Zamarreño
Fix For: 4.2.0.BETA1, 5.0.0.BETA1
Attachments: patch.txt
Using lazy deserialization with application specific cache keys, remote handling of a
cache invalidation operation triggers MarshalledValue.equals(...) on the cache key,
triggering deserialization and causes a ClassNotFoundException in my environment, due to
the class not being found in the context classloader of the jgroups receiver thread.
The user of the cache in this case is the 2nd level cache of an entity manager via the
hibernate-infinispan cache provider. While the cache is specific to the application, the
cache manager is not, and is managed via the AS, which probably accounts for the
classloader issue.
2010-09-09 14:43:31,481 ERROR [org.infinispan.interceptors.InvocationContextInterceptor]
(OOB-19,null) Execution error: : org.infinispan.CacheException: Unable to unmarshall
value
at org.infinispan.marshall.MarshalledValue.deserialize(MarshalledValue.java:114)
[:4.1.0.FINAL]
at org.infinispan.marshall.MarshalledValue.equals(MarshalledValue.java:184)
[:4.1.0.FINAL]
at java.util.concurrent.ConcurrentHashMap$Segment.get(ConcurrentHashMap.java:366)
[:1.6.0_20]
at java.util.concurrent.ConcurrentHashMap.get(ConcurrentHashMap.java:797) [:1.6.0_20]
at org.infinispan.container.DefaultDataContainer.peek(DefaultDataContainer.java:105)
[:4.1.0.FINAL]
at org.infinispan.container.DefaultDataContainer.get(DefaultDataContainer.java:110)
[:4.1.0.FINAL]
at
org.infinispan.container.EntryFactoryImpl.wrapEntryForWriting(EntryFactoryImpl.java:156)
[:4.1.0.FINAL]
at
org.infinispan.container.EntryFactoryImpl.wrapEntryForWriting(EntryFactoryImpl.java:106)
[:4.1.0.FINAL]
at
org.infinispan.interceptors.LockingInterceptor.visitInvalidateCommand(LockingInterceptor.java:186)
[:4.1.0.FINAL]
at
org.infinispan.commands.write.InvalidateCommand.acceptVisitor(InvalidateCommand.java:119)
[:4.1.0.FINAL]
at
org.infinispan.interceptors.base.CommandInterceptor.invokeNextInterceptor(CommandInterceptor.java:118)
[:4.1.0.FINAL]
at
org.infinispan.interceptors.base.CommandInterceptor.handleDefault(CommandInterceptor.java:132)
[:4.1.0.FINAL]
at
org.infinispan.commands.AbstractVisitor.visitInvalidateCommand(AbstractVisitor.java:117)
[:4.1.0.FINAL]
at
org.infinispan.commands.write.InvalidateCommand.acceptVisitor(InvalidateCommand.java:119)
[:4.1.0.FINAL]
at
org.infinispan.interceptors.base.CommandInterceptor.invokeNextInterceptor(CommandInterceptor.java:118)
[:4.1.0.FINAL]
at
org.infinispan.interceptors.base.CommandInterceptor.handleDefault(CommandInterceptor.java:132)
[:4.1.0.FINAL]
at
org.infinispan.commands.AbstractVisitor.visitInvalidateCommand(AbstractVisitor.java:117)
[:4.1.0.FINAL]
at
org.infinispan.commands.write.InvalidateCommand.acceptVisitor(InvalidateCommand.java:119)
[:4.1.0.FINAL]
at
org.infinispan.interceptors.base.CommandInterceptor.invokeNextInterceptor(CommandInterceptor.java:118)
[:4.1.0.FINAL]
at
org.infinispan.interceptors.TxInterceptor.enlistWriteAndInvokeNext(TxInterceptor.java:183)
[:4.1.0.FINAL]
at
org.infinispan.interceptors.TxInterceptor.visitInvalidateCommand(TxInterceptor.java:157)
[:4.1.0.FINAL]
at
org.infinispan.commands.write.InvalidateCommand.acceptVisitor(InvalidateCommand.java:119)
[:4.1.0.FINAL]
at
org.infinispan.interceptors.base.CommandInterceptor.invokeNextInterceptor(CommandInterceptor.java:118)
[:4.1.0.FINAL]
at
org.infinispan.interceptors.InvocationContextInterceptor.handleAll(InvocationContextInterceptor.java:57)
[:4.1.0.FINAL]
at
org.infinispan.interceptors.InvocationContextInterceptor.handleDefault(InvocationContextInterceptor.java:38)
[:4.1.0.FINAL]
at
org.infinispan.commands.AbstractVisitor.visitInvalidateCommand(AbstractVisitor.java:117)
[:4.1.0.FINAL]
at
org.infinispan.commands.write.InvalidateCommand.acceptVisitor(InvalidateCommand.java:119)
[:4.1.0.FINAL]
at org.infinispan.interceptors.InterceptorChain.invoke(InterceptorChain.java:273)
[:4.1.0.FINAL]
at
org.infinispan.commands.remote.BaseRpcInvokingCommand.processVisitableCommand(BaseRpcInvokingCommand.java:42)
[:4.1.0.FINAL]
at org.infinispan.commands.remote.SingleRpcCommand.perform(SingleRpcCommand.java:44)
[:4.1.0.FINAL]
at
org.infinispan.remoting.InboundInvocationHandlerImpl.handle(InboundInvocationHandlerImpl.java:76)
[:4.1.0.FINAL]
at
org.infinispan.remoting.transport.jgroups.CommandAwareRpcDispatcher.executeCommand(CommandAwareRpcDispatcher.java:176)
[:4.1.0.FINAL]
at
org.infinispan.remoting.transport.jgroups.CommandAwareRpcDispatcher.handle(CommandAwareRpcDispatcher.java:148)
[:4.1.0.FINAL]
at org.jgroups.blocks.RequestCorrelator.handleRequest(RequestCorrelator.java:575)
[:2.10.0.GA]
at org.jgroups.blocks.RequestCorrelator.receiveMessage(RequestCorrelator.java:486)
[:2.10.0.GA]
at org.jgroups.blocks.RequestCorrelator.receive(RequestCorrelator.java:362)
[:2.10.0.GA]
at org.jgroups.blocks.MessageDispatcher$ProtocolAdapter.up(MessageDispatcher.java:771)
[:2.10.0.GA]
at org.jgroups.blocks.mux.MuxUpHandler.up(MuxUpHandler.java:136) [:2.10.0.GA]
at org.jgroups.JChannel.up(JChannel.java:1453) [:2.10.0.GA]
at org.jgroups.stack.ProtocolStack.up(ProtocolStack.java:887) [:2.10.0.GA]
at org.jgroups.protocols.pbcast.FLUSH.up(FLUSH.java:483) [:2.10.0.GA]
at
org.jgroups.protocols.pbcast.STREAMING_STATE_TRANSFER.up(STREAMING_STATE_TRANSFER.java:265)
[:2.10.0.GA]
at org.jgroups.protocols.FRAG2.up(FRAG2.java:188) [:2.10.0.GA]
at org.jgroups.protocols.FC.up(FC.java:494) [:2.10.0.GA]
at org.jgroups.protocols.pbcast.GMS.up(GMS.java:888) [:2.10.0.GA]
at org.jgroups.protocols.VIEW_SYNC.up(VIEW_SYNC.java:171) [:2.10.0.GA]
at org.jgroups.protocols.pbcast.STABLE.up(STABLE.java:234) [:2.10.0.GA]
at org.jgroups.protocols.UNICAST.up(UNICAST.java:309) [:2.10.0.GA]
at org.jgroups.protocols.pbcast.NAKACK.handleMessage(NAKACK.java:813) [:2.10.0.GA]
at org.jgroups.protocols.pbcast.NAKACK.up(NAKACK.java:671) [:2.10.0.GA]
at org.jgroups.protocols.BARRIER.up(BARRIER.java:120) [:2.10.0.GA]
at org.jgroups.protocols.VERIFY_SUSPECT.up(VERIFY_SUSPECT.java:132) [:2.10.0.GA]
at org.jgroups.protocols.FD.up(FD.java:266) [:2.10.0.GA]
at org.jgroups.protocols.FD_SOCK.up(FD_SOCK.java:270) [:2.10.0.GA]
at org.jgroups.protocols.MERGE2.up(MERGE2.java:210) [:2.10.0.GA]
at org.jgroups.protocols.Discovery.up(Discovery.java:281) [:2.10.0.GA]
at org.jgroups.protocols.PING.up(PING.java:67) [:2.10.0.GA]
at org.jgroups.stack.Protocol.up(Protocol.java:371) [:2.10.0.GA]
at org.jgroups.protocols.TP.passMessageUp(TP.java:1009) [:2.10.0.GA]
at org.jgroups.protocols.TP.access$100(TP.java:56) [:2.10.0.GA]
at org.jgroups.protocols.TP$IncomingPacket.handleMyMessage(TP.java:1549) [:2.10.0.GA]
at org.jgroups.protocols.TP$IncomingPacket.run(TP.java:1531) [:2.10.0.GA]
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1110)
[:1.6.0_20]
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:603)
[:1.6.0_20]
at java.lang.Thread.run(Thread.java:636) [:1.6.0_20]
Caused by: java.lang.ClassNotFoundException:
org.jboss.test.cluster.clusteredentity.embeddedid.MusicianPK from
BaseClassLoader@4dd761d0{vfs:///home/paul/jboss/as/infinispan-int/build/target/jboss-6.0.0-SNAPSHOT/server/cluster-udp-1/conf/jboss-service.xml}
at org.jboss.classloader.spi.base.BaseClassLoader.loadClass(BaseClassLoader.java:480)
[jboss-classloader.jar:2.2.0.Alpha7]
at java.lang.ClassLoader.loadClass(ClassLoader.java:266) [:1.6.0_20]
at java.lang.Class.forName0(Native Method) [:1.6.0_20]
at java.lang.Class.forName(Class.java:264) [:1.6.0_20]
at org.jboss.marshalling.AbstractClassResolver.loadClass(AbstractClassResolver.java:135)
[:]
at
org.jboss.marshalling.AbstractClassResolver.resolveClass(AbstractClassResolver.java:116)
[:]
at
org.jboss.marshalling.river.RiverUnmarshaller.doReadClassDescriptor(RiverUnmarshaller.java:845)
[:]
at
org.jboss.marshalling.river.RiverUnmarshaller.doReadNewObject(RiverUnmarshaller.java:1144)
[:]
at
org.jboss.marshalling.river.RiverUnmarshaller.doReadObject(RiverUnmarshaller.java:272)
[:]
at
org.jboss.marshalling.river.RiverUnmarshaller.doReadObject(RiverUnmarshaller.java:209)
[:]
at org.jboss.marshalling.river.RiverUnmarshaller.readFields(RiverUnmarshaller.java:1610)
[:]
at
org.jboss.marshalling.river.RiverUnmarshaller.doInitSerializable(RiverUnmarshaller.java:1526)
[:]
at
org.jboss.marshalling.river.RiverUnmarshaller.doReadNewObject(RiverUnmarshaller.java:1175)
[:]
at
org.jboss.marshalling.river.RiverUnmarshaller.doReadObject(RiverUnmarshaller.java:272)
[:]
at
org.jboss.marshalling.river.RiverUnmarshaller.doReadObject(RiverUnmarshaller.java:209)
[:]
at org.jboss.marshalling.AbstractObjectInput.readObject(AbstractObjectInput.java:36)
[:]
at
org.infinispan.marshall.jboss.GenericJBossMarshaller.objectFromObjectStream(GenericJBossMarshaller.java:162)
[:4.1.0.FINAL]
at
org.infinispan.marshall.VersionAwareMarshaller.objectFromByteBuffer(VersionAwareMarshaller.java:111)
[:4.1.0.FINAL]
at
org.infinispan.marshall.AbstractMarshaller.objectFromByteBuffer(AbstractMarshaller.java:49)
[:4.1.0.FINAL]
at org.infinispan.marshall.MarshalledValue.deserialize(MarshalledValue.java:111)
[:4.1.0.FINAL]
... 64 more
--
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators:
https://jira.jboss.org/secure/Administrators.jspa
-
For more information on JIRA, see:
http://www.atlassian.com/software/jira