[weld-dev] RquestScoped not active inside WeldInitialListener.requestDestroyed

Benjamin Confino BENJAMIC at uk.ibm.com
Wed Jun 13 10:23:07 EDT 2018


Hello Matej

I spoke to the customer, who kindly provided the following source on 
github: https://github.com/elexx/was9_bugs/tree/master/bug21

It looks like the code is bound to a @PreDestroy method on the 
@SessionScoped annotated class UserSessionData. The PreDestroy fires 
because session.invalidate() is called in LogoutServlet. 

Looking at 
http://docs.jboss.org/cdi/spec/1.2/cdi-spec.html#request_context it 
doesn't seem like any of the four cases when the spec applies here. We 
have left LogoutServlet's service() method before the new thread calls the 
preDestroy method. So I think this is an application issue. 

Regards
Benjamin



From:   Matej Novotny <manovotn at redhat.com>
To:     Benjamin Confino <BENJAMIC at uk.ibm.com>
Cc:     weld-dev at lists.jboss.org
Date:   12/06/2018 13:17
Subject:        Re: [weld-dev] RquestScoped not active inside 
WeldInitialListener.requestDestroyed



Hi,

what does user code look like?
Does he have an event listener?

I'd say this depends on *precisely* what is his code bound to.
At some point (after the invalidation), you should be getting 
ContextNotActiveException so I guess we need to know more about the code 
to determine this.
If the user has some code bound to "generic" servlet events, it may well 
happen that they fire after CDI events.

Matej

----- Original Message -----
> From: "Benjamin Confino" <BENJAMIC at uk.ibm.com>
> To: weld-dev at lists.jboss.org
> Sent: Monday, June 11, 2018 10:46:31 AM
> Subject: [weld-dev] RquestScoped not active inside 
WeldInitialListener.requestDestroyed
> 
> Hello.
> 
> I have a customer who's getting ContextNotActiveExceptions for the
> RequestScoped Context. This happens inside the invocation of
> WeldInitialListener.requestDestroyed() after the customer's application
> invalidated the session. DefaultLifecycleCallbackInvoker.invokeMethods
> invokes a method in application code, which calls a method on a proxy, 
which
> results in weld attempting to get the context from the BeanManager and 
the
> ContextNotActiveException.
> 
> My question is simple. Is this an integration issue or is this an 
application
> issue?
> 
> Here is the stack:
> 
> org.jboss.weld.context.ContextNotActiveException: WELD-001303: No active
> contexts for scope type javax.enterprise.context.RequestScoped
> at
> 
org.jboss.weld.manager.BeanManagerImpl.getContext(BeanManagerImpl.java:731)
> at
> 
org.jboss.weld.bean.ContextualInstanceStrategy$DefaultContextualInstanceStrategy.getIfExists(ContextualInstanceStrategy.java:89)
> at
> 
org.jboss.weld.bean.ContextualInstanceStrategy$CachingContextualInstanceStrategy.getIfExists(ContextualInstanceStrategy.java:164)
> at
> 
org.jboss.weld.bean.ContextualInstance.getIfExists(ContextualInstance.java:63)
> at
> 
org.jboss.weld.bean.proxy.ContextBeanInstance.getInstance(ContextBeanInstance.java:83)
> at
> 
org.jboss.weld.bean.proxy.ProxyMethodHandler.getInstance(ProxyMethodHandler.java:125)
> <CustomerClass>$$_WeldClientProxy.getUserId(Unknown Source)
> 
> <Application Code>
> 
> at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
> at
> 
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:90)
> at
> 
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:55)
> at java.lang.reflect.Method.invoke(Method.java:508)
> at
> 
org.jboss.weld.injection.producer.DefaultLifecycleCallbackInvoker.invokeMethods(DefaultLifecycleCallbackInvoker.java:97)
> at
> 
org.jboss.weld.injection.producer.DefaultLifecycleCallbackInvoker.preDestroy(DefaultLifecycleCallbackInvoker.java:90)
> at
> 
org.jboss.weld.injection.producer.BasicInjectionTarget.preDestroy(BasicInjectionTarget.java:127)
> at org.jboss.weld.bean.ManagedBean.destroy(ManagedBean.java:191)
> at
> 
org.jboss.weld.util.bean.IsolatedForwardingBean.destroy(IsolatedForwardingBean.java:50)
> at
> 
org.jboss.weld.context.AbstractContext.destroyContextualInstance(AbstractContext.java:139)
> at 
org.jboss.weld.context.AbstractContext.destroy(AbstractContext.java:153)
> at
> 
org.jboss.weld.context.AbstractManagedContext.deactivate(AbstractManagedContext.java:58)
> at
> 
org.jboss.weld.context.AbstractBoundContext.deactivate(AbstractBoundContext.java:72)
> at
> 
org.jboss.weld.servlet.HttpContextLifecycle.safelyDeactivate(HttpContextLifecycle.java:378)
> at
> 
org.jboss.weld.servlet.HttpContextLifecycle.requestDestroyed(HttpContextLifecycle.java:311)
> at
> 
org.jboss.weld.servlet.WeldInitialListener.requestDestroyed(WeldInitialListener.java:135)
> at
> 
com.ibm.ws.webcontainer.managedobject.ManagedObjectListenerWrapper.requestDestroyed(ManagedObjectListenerWrapper.java:98)
> at
> 
com.ibm.ws.webcontainer.webapp.WebApp.notifyServletRequestDestroyed(WebApp.java:2042)
> at
> 
com.ibm.wsspi.webcontainer.collaborator.CollaboratorHelper.postInvokeCollaborators(CollaboratorHelper.java:532)
> at
> 
com.ibm.ws.webcontainer.filter.WebAppFilterManager.invokeFilters(WebAppFilterManager.java:1282)
> at
> 
com.ibm.ws.webcontainer.servlet.CacheServletWrapper.handleRequest(CacheServletWrapper.java:82)
> at 
com.ibm.ws.webcontainer.WebContainer.handleRequest(WebContainer.java:963)
> at
> 
com.ibm.ws.webcontainer.WSWebContainer.handleRequest(WSWebContainer.java:1817)
> at
> 
com.ibm.ws.webcontainer.channel.WCChannelLink.ready(WCChannelLink.java:382)
> at
> 
com.ibm.ws.http.channel.inbound.impl.HttpInboundLink.handleDiscrimination(HttpInboundLink.java:465)
> at
> 
com.ibm.ws.http.channel.inbound.impl.HttpInboundLink.handleNewRequest(HttpInboundLink.java:532)
> at
> 
com.ibm.ws.http.channel.inbound.impl.HttpInboundLink.processRequest(HttpInboundLink.java:318)
> at
> 
com.ibm.ws.http.channel.inbound.impl.HttpICLReadCallback.complete(HttpICLReadCallback.java:88)
> at
> 
com.ibm.ws.tcp.channel.impl.AioReadCompletionListener.futureCompleted(AioReadCompletionListener.java:175)
> at
> 
com.ibm.io.async.AbstractAsyncFuture.invokeCallback(AbstractAsyncFuture.java:217)
> at
> 
com.ibm.io.async.AsyncChannelFuture.fireCompletionActions(AsyncChannelFuture.java:161)
> at com.ibm.io.async.AsyncFuture.completed(AsyncFuture.java:138)
> at com.ibm.io.async.ResultHandler.complete(ResultHandler.java:204)
> at
> 
com.ibm.io.async.ResultHandler.runEventProcessingLoop(ResultHandler.java:775)
> at com.ibm.io.async.ResultHandler$2.run(ResultHandler.java:905)
> at com.ibm.ws.util.ThreadPool$Worker.run(ThreadPool.java:1909)
> 
> Unless stated otherwise above:
> IBM United Kingdom Limited - Registered in England and Wales with number
> 741598.
> Registered office: PO Box 41, North Harbour, Portsmouth, Hampshire PO6 
3AU
> 
> _______________________________________________
> weld-dev mailing list
> weld-dev at lists.jboss.org
> 
https://lists.jboss.org/mailman/listinfo/weld-dev





Unless stated otherwise above:
IBM United Kingdom Limited - Registered in England and Wales with number 
741598. 
Registered office: PO Box 41, North Harbour, Portsmouth, Hampshire PO6 3AU
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.jboss.org/pipermail/weld-dev/attachments/20180613/86084a41/attachment.html 


More information about the weld-dev mailing list