There's some listener events that are directly associated with cache invocations, so
at first glance, it'd make sense to use whatever cache.with(CL) was passed by,
defaulting on the cache's (or cache manager's, depending on the granularity of the
listener event) class loader. However, this could only work on those events that are local
where the invocation context has any CL that has been associated with the invocation. In
remotely executed events, it'd be tricky to replicate the same thing. This is a very
similar problem to lazy deserialization, but in this case, lazy listener events or
something like that, where you only know the CL when a cache operation is called, but for
events this does not make sense and it'd be rather counter intuitive.
The least we can do here is simply use the classloader associated with the
cache/cachemanager depending on the granularity of the event.
On Aug 30, 2011, at 2:20 PM, Pete Muir wrote:
Agreed, but what do others think, what problems are there?
On 30 Aug 2011, at 13:01, Ales Justin wrote:
> While working on OpenShift Flex Infinispan demo, we came across a TCCL setup issue.
>
> ---
>
> Looking at the stack trace, and how listener is registered,
> I don't see how Ispan+CDI integration can change this behavior:
>
> Imo, it should be Ispan's job to properly change this.
> e.g. wrap each listener invocation with listener' classloader as tccl
>
> ---
>
> as imo it's not cdi integration's job
> as it cannot change this
> at least i don't see how
> and same issue can happen for any other framework
> where listener gets invoked, and that framework used later in the execution chain,
depends on the right tccl
> this issue only popped up due to cluster formation
> as the other node's code is invoked via Ispan' distribution mechanism
> 1:48
> in standalone you would always get this invoked via app' execution chain
>
> ---
>
> 12:01:24,243 ERROR [org.infinispan.interceptors.InvocationContextInterceptor]
(Incoming-9,demo,matej-ntb-32416) ISPN000136: Execution error:
org.infinispan.CacheException: Caught exception [java.
> lang.IllegalStateException] while invoking method [public void
org.infinispan.quickstart.jbossas7.LoggingListener.observeAdd(org.infinispan.notifications.cachelistener.event.CacheEntryCreatedEven
> t)] on listener instance: org.infinispan.quickstart.jbossas7.LoggingListener@301f417
> at
org.infinispan.notifications.AbstractListenerImpl$ListenerInvocation$1.run(AbstractListenerImpl.java:204)
[infinispan-core-5.0.0.FINAL.jar:5.0.0.FINAL]
> at
org.infinispan.util.concurrent.WithinThreadExecutor.execute(WithinThreadExecutor.java:48)
[infinispan-core-5.0.0.FINAL.jar:5.0.0.FINAL]
> at
org.infinispan.notifications.AbstractListenerImpl$ListenerInvocation.invoke(AbstractListenerImpl.java:217)
[infinispan-core-5.0.0.FINAL.jar:5.0.0.FINAL]
> at
org.infinispan.notifications.cachelistener.CacheNotifierImpl.notifyCacheEntryCreated(CacheNotifierImpl.java:151)
[infinispan-core-5.0.0.FINAL.jar:5.0.0.FINAL]
> at
org.infinispan.container.EntryFactoryImpl.wrapEntryForWriting(EntryFactoryImpl.java:174)
[infinispan-core-5.0.0.FINAL.jar:5.0.0.FINAL]
> at
org.infinispan.container.EntryFactoryImpl.wrapEntryForWriting(EntryFactoryImpl.java:109)
[infinispan-core-5.0.0.FINAL.jar:5.0.0.FINAL]
> at
org.infinispan.interceptors.LockingInterceptor.visitPutKeyValueCommand(LockingInterceptor.java:293)
[infinispan-core-5.0.0.FINAL.jar:5.0.0.FINAL]
> at
org.infinispan.commands.write.PutKeyValueCommand.acceptVisitor(PutKeyValueCommand.java:77)
[infinispan-core-5.0.0.FINAL.jar:5.0.0.FINAL]
> at
org.infinispan.interceptors.base.CommandInterceptor.invokeNextInterceptor(CommandInterceptor.java:119)
[infinispan-core-5.0.0.FINAL.jar:5.0.0.FINAL]
> at
org.infinispan.interceptors.base.CommandInterceptor.handleDefault(CommandInterceptor.java:133)
[infinispan-core-5.0.0.FINAL.jar:5.0.0.FINAL]
> at
org.infinispan.commands.AbstractVisitor.visitPutKeyValueCommand(AbstractVisitor.java:60)
[infinispan-core-5.0.0.FINAL.jar:5.0.0.FINAL]
> at
org.infinispan.commands.write.PutKeyValueCommand.acceptVisitor(PutKeyValueCommand.java:77)
[infinispan-core-5.0.0.FINAL.jar:5.0.0.FINAL]
> at
org.infinispan.interceptors.base.CommandInterceptor.invokeNextInterceptor(CommandInterceptor.java:119)
[infinispan-core-5.0.0.FINAL.jar:5.0.0.FINAL]
> at
org.infinispan.interceptors.MarshalledValueInterceptor.visitPutKeyValueCommand(MarshalledValueInterceptor.java:140)
[infinispan-core-5.0.0.FINAL.jar:5.0.0.FINAL]
> at
org.infinispan.commands.write.PutKeyValueCommand.acceptVisitor(PutKeyValueCommand.java:77)
[infinispan-core-5.0.0.FINAL.jar:5.0.0.FINAL]
> at
org.infinispan.interceptors.base.CommandInterceptor.invokeNextInterceptor(CommandInterceptor.java:119)
[infinispan-core-5.0.0.FINAL.jar:5.0.0.FINAL]
> at
org.infinispan.interceptors.TxInterceptor.enlistWriteAndInvokeNext(TxInterceptor.java:214)
[infinispan-core-5.0.0.FINAL.jar:5.0.0.FINAL]
> at
org.infinispan.interceptors.TxInterceptor.visitPutKeyValueCommand(TxInterceptor.java:162)
[infinispan-core-5.0.0.FINAL.jar:5.0.0.FINAL]
> at
org.infinispan.interceptors.DistTxInterceptor.visitPutKeyValueCommand(DistTxInterceptor.java:129)
[infinispan-core-5.0.0.FINAL.jar:5.0.0.FINAL]
> at
org.infinispan.commands.write.PutKeyValueCommand.acceptVisitor(PutKeyValueCommand.java:77)
[infinispan-core-5.0.0.FINAL.jar:5.0.0.FINAL]
> at
org.infinispan.interceptors.base.CommandInterceptor.invokeNextInterceptor(CommandInterceptor.java:119)
[infinispan-core-5.0.0.FINAL.jar:5.0.0.FINAL]
> at
org.infinispan.interceptors.CacheMgmtInterceptor.visitPutKeyValueCommand(CacheMgmtInterceptor.java:114)
[infinispan-core-5.0.0.FINAL.jar:5.0.0.FINAL]
> at
org.infinispan.commands.write.PutKeyValueCommand.acceptVisitor(PutKeyValueCommand.java:77)
[infinispan-core-5.0.0.FINAL.jar:5.0.0.FINAL]
> at
org.infinispan.interceptors.base.CommandInterceptor.invokeNextInterceptor(CommandInterceptor.java:119)
[infinispan-core-5.0.0.FINAL.jar:5.0.0.FINAL]
> at
org.infinispan.interceptors.InvocationContextInterceptor.handleAll(InvocationContextInterceptor.java:104)
[infinispan-core-5.0.0.FINAL.jar:5.0.0.FINAL]
> at
org.infinispan.interceptors.InvocationContextInterceptor.handleDefault(InvocationContextInterceptor.java:64)
[infinispan-core-5.0.0.FINAL.jar:5.0.0.FINAL]
> at
org.infinispan.commands.AbstractVisitor.visitPutKeyValueCommand(AbstractVisitor.java:60)
[infinispan-core-5.0.0.FINAL.jar:5.0.0.FINAL]
> at
org.infinispan.commands.write.PutKeyValueCommand.acceptVisitor(PutKeyValueCommand.java:77)
[infinispan-core-5.0.0.FINAL.jar:5.0.0.FINAL]
> at
org.infinispan.interceptors.base.CommandInterceptor.invokeNextInterceptor(CommandInterceptor.java:119)
[infinispan-core-5.0.0.FINAL.jar:5.0.0.FINAL]
> at
org.infinispan.interceptors.base.CommandInterceptor.handleDefault(CommandInterceptor.java:133)
[infinispan-core-5.0.0.FINAL.jar:5.0.0.FINAL]
> at
org.infinispan.commands.AbstractVisitor.visitPutKeyValueCommand(AbstractVisitor.java:60)
[infinispan-core-5.0.0.FINAL.jar:5.0.0.FINAL]
> at
org.infinispan.interceptors.IsMarshallableInterceptor.visitPutKeyValueCommand(IsMarshallableInterceptor.java:94)
[infinispan-core-5.0.0.FINAL.jar:5.0.0.FINAL]
> at
org.infinispan.commands.write.PutKeyValueCommand.acceptVisitor(PutKeyValueCommand.java:77)
[infinispan-core-5.0.0.FINAL.jar:5.0.0.FINAL]
> at
org.infinispan.interceptors.base.CommandInterceptor.invokeNextInterceptor(CommandInterceptor.java:119)
[infinispan-core-5.0.0.FINAL.jar:5.0.0.FINAL]
> at
org.infinispan.interceptors.BatchingInterceptor.handleDefault(BatchingInterceptor.java:61)
[infinispan-core-5.0.0.FINAL.jar:5.0.0.FINAL]
> at
org.infinispan.commands.AbstractVisitor.visitPutKeyValueCommand(AbstractVisitor.java:60)
[infinispan-core-5.0.0.FINAL.jar:5.0.0.FINAL]
> at
org.infinispan.commands.write.PutKeyValueCommand.acceptVisitor(PutKeyValueCommand.java:77)
[infinispan-core-5.0.0.FINAL.jar:5.0.0.FINAL]
> at
org.infinispan.interceptors.InterceptorChain.invoke(InterceptorChain.java:274)
[infinispan-core-5.0.0.FINAL.jar:5.0.0.FINAL]
> at
org.infinispan.commands.remote.BaseRpcInvokingCommand.processVisitableCommand(BaseRpcInvokingCommand.java:71)
[infinispan-core-5.0.0.FINAL.jar:5.0.0.FINAL]
> at
org.infinispan.commands.remote.SingleRpcCommand.perform(SingleRpcCommand.java:62)
[infinispan-core-5.0.0.FINAL.jar:5.0.0.FINAL]
> at
org.infinispan.remoting.InboundInvocationHandlerImpl.handleInternal(InboundInvocationHandlerImpl.java:181)
[infinispan-core-5.0.0.FINAL.jar:5.0.0.FINAL]
> at
org.infinispan.remoting.InboundInvocationHandlerImpl.handleWithWaitForBlocks(InboundInvocationHandlerImpl.java:195)
[infinispan-core-5.0.0.FINAL.jar:5.0.0.FINAL]
> at
org.infinispan.remoting.InboundInvocationHandlerImpl.handleWithRetry(InboundInvocationHandlerImpl.java:309)
[infinispan-core-5.0.0.FINAL.jar:5.0.0.FINAL]
> at
org.infinispan.remoting.InboundInvocationHandlerImpl.handle(InboundInvocationHandlerImpl.java:167)
[infinispan-core-5.0.0.FINAL.jar:5.0.0.FINAL]
> at
org.infinispan.remoting.transport.jgroups.CommandAwareRpcDispatcher.executeCommand(CommandAwareRpcDispatcher.java:165)
[infinispan-core-5.0.0.FINAL.jar:5.0.0.FINAL]
> at
org.infinispan.remoting.transport.jgroups.CommandAwareRpcDispatcher.handle(CommandAwareRpcDispatcher.java:144)
[infinispan-core-5.0.0.FINAL.jar:5.0.0.FINAL]
> at
org.jgroups.blocks.RequestCorrelator.handleRequest(RequestCorrelator.java:577)
[jgroups-2.12.1.3.Final.jar:2.12.1.3.Final]
> at
org.jgroups.blocks.RequestCorrelator.receiveMessage(RequestCorrelator.java:488)
[jgroups-2.12.1.3.Final.jar:2.12.1.3.Final]
> at org.jgroups.blocks.RequestCorrelator.receive(RequestCorrelator.java:364)
[jgroups-2.12.1.3.Final.jar:2.12.1.3.Final]
> at
org.jgroups.blocks.MessageDispatcher$ProtocolAdapter.up(MessageDispatcher.java:770)
[jgroups-2.12.1.3.Final.jar:2.12.1.3.Final]
> at org.jgroups.JChannel.up(JChannel.java:1484)
[jgroups-2.12.1.3.Final.jar:2.12.1.3.Final]
> at org.jgroups.stack.ProtocolStack.up(ProtocolStack.java:1074)
[jgroups-2.12.1.3.Final.jar:2.12.1.3.Final]
> at org.jgroups.protocols.pbcast.FLUSH.up(FLUSH.java:477)
[jgroups-2.12.1.3.Final.jar:2.12.1.3.Final]
> at
org.jgroups.protocols.pbcast.STREAMING_STATE_TRANSFER.up(STREAMING_STATE_TRANSFER.java:263)
[jgroups-2.12.1.3.Final.jar:2.12.1.3.Final]
> at org.jgroups.protocols.FRAG2.up(FRAG2.java:189)
[jgroups-2.12.1.3.Final.jar:2.12.1.3.Final]
> at org.jgroups.protocols.FlowControl.up(FlowControl.java:400)
[jgroups-2.12.1.3.Final.jar:2.12.1.3.Final]
> at org.jgroups.protocols.FlowControl.up(FlowControl.java:418)
[jgroups-2.12.1.3.Final.jar:2.12.1.3.Final]
> at org.jgroups.protocols.pbcast.GMS.up(GMS.java:908)
[jgroups-2.12.1.3.Final.jar:2.12.1.3.Final]
> at org.jgroups.protocols.VIEW_SYNC.up(VIEW_SYNC.java:170)
[jgroups-2.12.1.3.Final.jar:2.12.1.3.Final]
> at org.jgroups.protocols.pbcast.STABLE.up(STABLE.java:246)
[jgroups-2.12.1.3.Final.jar:2.12.1.3.Final]
> at org.jgroups.protocols.UNICAST.up(UNICAST.java:309)
[jgroups-2.12.1.3.Final.jar:2.12.1.3.Final]
> at org.jgroups.protocols.pbcast.NAKACK.handleMessage(NAKACK.java:838)
[jgroups-2.12.1.3.Final.jar:2.12.1.3.Final]
> at org.jgroups.protocols.pbcast.NAKACK.up(NAKACK.java:667)
[jgroups-2.12.1.3.Final.jar:2.12.1.3.Final]
> at org.jgroups.protocols.BARRIER.up(BARRIER.java:123)
[jgroups-2.12.1.3.Final.jar:2.12.1.3.Final]
> at org.jgroups.protocols.VERIFY_SUSPECT.up(VERIFY_SUSPECT.java:133)
[jgroups-2.12.1.3.Final.jar:2.12.1.3.Final]
> at org.jgroups.protocols.FD.up(FD.java:275)
[jgroups-2.12.1.3.Final.jar:2.12.1.3.Final]
> at org.jgroups.protocols.FD_SOCK.up(FD_SOCK.java:275)
[jgroups-2.12.1.3.Final.jar:2.12.1.3.Final]
> at org.jgroups.protocols.MERGE2.up(MERGE2.java:209)
[jgroups-2.12.1.3.Final.jar:2.12.1.3.Final]
> at org.jgroups.protocols.Discovery.up(Discovery.java:293)
[jgroups-2.12.1.3.Final.jar:2.12.1.3.Final]
> at org.jgroups.protocols.PING.up(PING.java:69)
[jgroups-2.12.1.3.Final.jar:2.12.1.3.Final]
> at org.jgroups.protocols.TP.passMessageUp(TP.java:1109)
[jgroups-2.12.1.3.Final.jar:2.12.1.3.Final]
> at org.jgroups.protocols.TP$IncomingPacket.handleMyMessage(TP.java:1665)
[jgroups-2.12.1.3.Final.jar:2.12.1.3.Final]
> at org.jgroups.protocols.TP$IncomingPacket.run(TP.java:1647)
[jgroups-2.12.1.3.Final.jar:2.12.1.3.Final]
> at
java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
[:1.6.0_23]
> at
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
[:1.6.0_23]
> at java.lang.Thread.run(Thread.java:662) [:1.6.0_23]
> Caused by: java.lang.IllegalStateException: Singleton not set for ModuleClassLoader
for Module "org.jboss.as.clustering.infinispan:main" from local module loader
@624b035d (roots: D:\java\runtime
> s\jboss-as-7.1.0.Alpha1-SNAPSHOT-B\modules)
> at
org.jboss.as.weld.services.ModuleGroupSingletonProvider$TCCLSingleton.get(ModuleGroupSingletonProvider.java:71)
> at org.jboss.weld.Container.instance(Container.java:58)
> at
org.jboss.weld.bean.proxy.ContextBeanInstance.getInstance(ContextBeanInstance.java:72)
> at
org.jboss.weld.bean.proxy.ProxyMethodHandler.invoke(ProxyMethodHandler.java:87)
> at
org.infinispan.quickstart.jbossas7.CacheEventsManager$Proxy$_$$_WeldClientProxy.addEvent(CacheEventsManager$Proxy$_$$_WeldClientProxy.java)
> at
org.infinispan.quickstart.jbossas7.LoggingListener.observeAdd(LoggingListener.java:30)
> at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) [:1.6.0_23]
> at
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) [:1.6.0_23]
> at
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
[:1.6.0_23]
> at java.lang.reflect.Method.invoke(Method.java:597) [:1.6.0_23]
> at
org.infinispan.notifications.AbstractListenerImpl$ListenerInvocation$1.run(AbstractListenerImpl.java:200)
[infinispan-core-5.0.0.FINAL.jar:5.0.0.FINAL]
> _______________________________________________
> infinispan-dev mailing list
> infinispan-dev(a)lists.jboss.org
>
https://lists.jboss.org/mailman/listinfo/infinispan-dev
_______________________________________________
infinispan-dev mailing list
infinispan-dev(a)lists.jboss.org
https://lists.jboss.org/mailman/listinfo/infinispan-dev
--
Galder Zamarreño
Sr. Software Engineer
Infinispan, JBoss Cache