[hibernate-issues] [Hibernate-JIRA] Commented: (HHH-5552) Infinispan cache regions need to load entities and keys using application classloader.

Galder Zamarreno (JIRA) noreply at atlassian.com
Wed Sep 15 08:51:22 EDT 2010


    [ http://opensource.atlassian.com/projects/hibernate/browse/HHH-5552?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=38400#action_38400 ] 

Galder Zamarreno commented on HHH-5552:
---------------------------------------

Hmmm, I'm not sure about your approach. handleEvictAllModification here is only trying to figure out whether an EvictAll put was put in the cache. It shouldn't need to deserialize the PK cos it has no need real need for it. It only needs to know of the key is EvictAll or not. I'm checking for alternative ways to solve this.

> Infinispan cache regions need to load entities and keys using application classloader.
> --------------------------------------------------------------------------------------
>
>                 Key: HHH-5552
>                 URL: http://opensource.atlassian.com/projects/hibernate/browse/HHH-5552
>             Project: Hibernate Core
>          Issue Type: Bug
>          Components: caching (L2)
>    Affects Versions: 3.5.5, 3.6.0.Beta4
>            Reporter: Paul Ferraro
>            Assignee: Galder Zamarreno
>            Priority: Critical
>         Attachments: patch.txt, patch.txt
>
>
> While testing hibernate-infinispan, I see ClassNotFoundExceptions when the jgroups receiver thread attempts to deserialize an entity PK (in this case within the BaseRegion cache listener).  Deserialization throw a CNFE since the custom key is not known to the context classloader of the jgroups up handler.  It would appear that lazy deserialization is not sufficient to prevent this.  Consequently, I think we need to reproduce the classloader handling from the jbosscache provider.  That is, store a reference to the application classloader and swap thread context classloaders any time a key or an entity needs to be deserialized.
> 2010-09-10 13:46:53,339 ERROR [org.infinispan.interceptors.InvocationContextInterceptor] (Incoming-2,null) Execution error: : org.infinispan.CacheException: Caught exception invoking method public void org.hibernate.cache.infinispan.impl.BaseRegion.entryModified(org.infinispan.notifications.cachelistener.event.CacheEntryModifiedEvent) on listener instance org.hibernate.cache.infinispan.query.QueryResultsRegionImpl at 70099d73
> 	at org.infinispan.notifications.AbstractListenerImpl$ListenerInvocation$1.run(AbstractListenerImpl.java:179) [:4.1.1.CR0]
> 	at org.infinispan.util.concurrent.WithinThreadExecutor.execute(WithinThreadExecutor.java:47) [:4.1.1.CR0]
> 	at org.infinispan.notifications.AbstractListenerImpl$ListenerInvocation.invoke(AbstractListenerImpl.java:189) [:4.1.1.CR0]
> 	at org.infinispan.notifications.cachelistener.CacheNotifierImpl.notifyCacheEntryModified(CacheNotifierImpl.java:146) [:4.1.1.CR0]
> 	at org.infinispan.commands.write.PutKeyValueCommand.perform(PutKeyValueCommand.java:108) [:4.1.1.CR0]
> 	at org.infinispan.interceptors.CallInterceptor.handleDefault(CallInterceptor.java:72) [:4.1.1.CR0]
> 	at org.infinispan.commands.AbstractVisitor.visitPutKeyValueCommand(AbstractVisitor.java:57) [:4.1.1.CR0]
> 	at org.infinispan.commands.write.PutKeyValueCommand.acceptVisitor(PutKeyValueCommand.java:76) [:4.1.1.CR0]
> 	at org.infinispan.interceptors.base.CommandInterceptor.invokeNextInterceptor(CommandInterceptor.java:118) [:4.1.1.CR0]
> 	at org.infinispan.interceptors.ReplicationInterceptor.handleCrudMethod(ReplicationInterceptor.java:107) [:4.1.1.CR0]
> 	at org.infinispan.interceptors.ReplicationInterceptor.visitPutKeyValueCommand(ReplicationInterceptor.java:78) [:4.1.1.CR0]
> 	at org.infinispan.commands.write.PutKeyValueCommand.acceptVisitor(PutKeyValueCommand.java:76) [:4.1.1.CR0]
> 	at org.infinispan.interceptors.base.CommandInterceptor.invokeNextInterceptor(CommandInterceptor.java:118) [:4.1.1.CR0]
> 	at org.infinispan.interceptors.LockingInterceptor.visitPutKeyValueCommand(LockingInterceptor.java:198) [:4.1.1.CR0]
> 	at org.infinispan.commands.write.PutKeyValueCommand.acceptVisitor(PutKeyValueCommand.java:76) [:4.1.1.CR0]
> 	at org.infinispan.interceptors.base.CommandInterceptor.invokeNextInterceptor(CommandInterceptor.java:118) [:4.1.1.CR0]
> 	at org.infinispan.interceptors.base.CommandInterceptor.handleDefault(CommandInterceptor.java:132) [:4.1.1.CR0]
> 	at org.infinispan.commands.AbstractVisitor.visitPutKeyValueCommand(AbstractVisitor.java:57) [:4.1.1.CR0]
> 	at org.infinispan.commands.write.PutKeyValueCommand.acceptVisitor(PutKeyValueCommand.java:76) [:4.1.1.CR0]
> 	at org.infinispan.interceptors.base.CommandInterceptor.invokeNextInterceptor(CommandInterceptor.java:118) [:4.1.1.CR0]
> 	at org.infinispan.interceptors.MarshalledValueInterceptor.visitPutKeyValueCommand(MarshalledValueInterceptor.java:116) [:4.1.1.CR0]
> 	at org.infinispan.commands.write.PutKeyValueCommand.acceptVisitor(PutKeyValueCommand.java:76) [:4.1.1.CR0]
> 	at org.infinispan.interceptors.base.CommandInterceptor.invokeNextInterceptor(CommandInterceptor.java:118) [:4.1.1.CR0]
> 	at org.infinispan.interceptors.TxInterceptor.visitPrepareCommand(TxInterceptor.java:82) [:4.1.1.CR0]
> 	at org.infinispan.commands.tx.PrepareCommand.acceptVisitor(PrepareCommand.java:120) [:4.1.1.CR0]
> 	at org.infinispan.interceptors.base.CommandInterceptor.invokeNextInterceptor(CommandInterceptor.java:118) [:4.1.1.CR0]
> 	at org.infinispan.interceptors.InvocationContextInterceptor.handleAll(InvocationContextInterceptor.java:57) [:4.1.1.CR0]
> 	at org.infinispan.interceptors.InvocationContextInterceptor.handleDefault(InvocationContextInterceptor.java:38) [:4.1.1.CR0]
> 	at org.infinispan.commands.AbstractVisitor.visitPrepareCommand(AbstractVisitor.java:105) [:4.1.1.CR0]
> 	at org.infinispan.commands.tx.PrepareCommand.acceptVisitor(PrepareCommand.java:120) [:4.1.1.CR0]
> 	at org.infinispan.interceptors.InterceptorChain.invoke(InterceptorChain.java:273) [:4.1.1.CR0]
> 	at org.infinispan.commands.tx.PrepareCommand.perform(PrepareCommand.java:111) [:4.1.1.CR0]
> 	at org.infinispan.remoting.InboundInvocationHandlerImpl.handle(InboundInvocationHandlerImpl.java:81) [:4.1.1.CR0]
> 	at org.infinispan.remoting.transport.jgroups.CommandAwareRpcDispatcher.executeCommand(CommandAwareRpcDispatcher.java:176) [:4.1.1.CR0]
> 	at org.infinispan.remoting.transport.jgroups.CommandAwareRpcDispatcher.handle(CommandAwareRpcDispatcher.java:148) [:4.1.1.CR0]
> 	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:474) [: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:877) [: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: org.infinispan.CacheException: Unable to unmarshall value
> 	at org.infinispan.marshall.MarshalledValue.deserialize(MarshalledValue.java:114) [:4.1.1.CR0]
> 	at org.infinispan.marshall.MarshalledValue.get(MarshalledValue.java:167) [:4.1.1.CR0]
> 	at org.infinispan.notifications.cachelistener.event.EventImpl.getKey(EventImpl.java:66) [:4.1.1.CR0]
> 	at org.hibernate.cache.infinispan.impl.BaseRegion.handleEvictAllModification(BaseRegion.java:264) [:3.5.6-SNAPSHOT]
> 	at org.hibernate.cache.infinispan.impl.BaseRegion.entryModified(BaseRegion.java:260) [:3.5.6-SNAPSHOT]
> 	at sun.reflect.GeneratedMethodAccessor271.invoke(Unknown Source) [:1.6.0_20]
> 	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) [:1.6.0_20]
> 	at java.lang.reflect.Method.invoke(Method.java:616) [:1.6.0_20]
> 	at org.infinispan.notifications.AbstractListenerImpl$ListenerInvocation$1.run(AbstractListenerImpl.java:175) [:4.1.1.CR0]
> 	... 66 more
> Caused by: java.lang.ClassNotFoundException: org.jboss.test.cluster.clusteredentity.classloader.AccountHolderPK from BaseClassLoader at 620968f9{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:1247) [:]
> 	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.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.MarshallUtil.unmarshallMap(MarshallUtil.java:65) [:4.1.1.CR0]
> 	at org.infinispan.marshall.exts.MapExternalizer.readObject(MapExternalizer.java:78) [:4.1.1.CR0]
> 	at org.infinispan.marshall.jboss.ConstantObjectTable$ExternalizerAdapter.readObject(ConstantObjectTable.java:266) [:4.1.1.CR0]
> 	at org.infinispan.marshall.jboss.ConstantObjectTable.readObject(ConstantObjectTable.java:253) [:4.1.1.CR0]
> 	at org.jboss.marshalling.river.RiverUnmarshaller.doReadObject(RiverUnmarshaller.java:351) [:]
> 	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.RiverObjectInputStream.defaultReadObject(RiverObjectInputStream.java:73) [:]
> 	at org.hibernate.cache.QueryKey.readObject(QueryKey.java:192) [:3.5.6-SNAPSHOT]
> 	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) [:1.6.0_20]
> 	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) [:1.6.0_20]
> 	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) [:1.6.0_20]
> 	at java.lang.reflect.Method.invoke(Method.java:616) [:1.6.0_20]
> 	at org.jboss.marshalling.reflect.SerializableClass.callReadObject(SerializableClass.java:224) [:]
> 	at org.jboss.marshalling.river.RiverUnmarshaller.doInitSerializable(RiverUnmarshaller.java:1513) [:]
> 	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.1.CR0]
> 	at org.infinispan.marshall.VersionAwareMarshaller.objectFromByteBuffer(VersionAwareMarshaller.java:111) [:4.1.1.CR0]
> 	at org.infinispan.marshall.AbstractMarshaller.objectFromByteBuffer(AbstractMarshaller.java:49) [:4.1.1.CR0]
> 	at org.infinispan.marshall.MarshalledValue.deserialize(MarshalledValue.java:111) [:4.1.1.CR0]
> 	... 74 more

-- 
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators: http://opensource.atlassian.com/projects/hibernate/secure/Administrators.jspa
-
For more information on JIRA, see: http://www.atlassian.com/software/jira

        


More information about the hibernate-issues mailing list