[weld-dev] PAX-WEB + PAX-CDI + WELD = Problem scavenging sessions' java.lang.IllegalStateException

Martin Kouba mkouba at redhat.com
Thu Jun 1 08:58:54 EDT 2017


Hi Alex,

what does Bundle.update actually do? Is the HTTP session destroyed? Are 
the HttpSessionListener instances thrown away?

It looks like the Weld container is restarted but the Weld listener is 
reused and thus is referencing the previous container which is cleaned 
up and shutdown.

Martin

Dne 1.6.2017 v 09:01 Alex Sviridov napsal(a):
> Hi all
> 
> The question is about using Pax-Web (osgi servlet container) + Pax-Cdi + 
> Weld.
> There is a bug in pax-web https://ops4j1.jira.com/browse/PAXWEB-760 than 
> can't
> be fixed about 2.5 year. And it seems that it is linked with weld. So I post
> my question here - maybe someone of weld developers can give any hints, 
> ideas
> etc that can help us. So, the situation.
> 
> Configuration: jetty 9.3.11.v20160721, weld 2.2.12.Final, pax-cdi 
> 0.13.0-SNAPSHOT,
> pax-swissbox 1.8.0 , pax-web 6.0.0-SNAPSHOT.We must have a war bundle with
> servlet + cdi bean. In servlet we do
> 
> private  void processRequest(HttpServletRequest request, HttpServletResponse response){
>          HttpSession session = request.getSession();
>          session.setMaxInactiveInterval(60);//Note, these are seconds.        ....call some cdi bean method
> }
> 
> The problem appears when we update war bundle on osgi when there is a 
> live session.
> So, timing is very important here. What we do by steps and time:
> hr:min:sec
> 1) at 00:00:00 we start our war bundle
> 2) at 00:00:10 we make the first http request to our servlet with cdi 
> bean call
> 3) at 00:00:30 we update our war bundle on osgi (Bundle.update)
> 4) at 00:00:40 we make the second http request to our servlet with cdi 
> bean call
> 5) at 00:01:40 we get the following exception:
> 
> 2016-08-28 16:40:53,385 | WARN  | er at 57af3ea4Timer | 39 - org.ops4j.pax.web.pax-web-jetty - 6.0.0.SNAPSHOT | org.ops4j.pax.web.service.jetty.internal.LateInvalidatingHashSessionManager | Problem scavenging sessions
> java.lang.RuntimeException: Error accessing invisible AbstractSession method via reflection
> 	at org.ops4j.pax.web.service.jetty.internal.LateInvalidatingHashSessionManager.sessionTimeout(LateInvalidatingHashSessionManager.java:169)
> 	at org.ops4j.pax.web.service.jetty.internal.LateInvalidatingHashSessionManager.scavenge(LateInvalidatingHashSessionManager.java:82)
> 	at org.eclipse.jetty.server.session.HashSessionManager$Scavenger.run(HashSessionManager.java:84)
> 	at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
> 	at java.util.concurrent.FutureTask.run(FutureTask.java:266)
> 	at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$201(ScheduledThreadPoolExecutor.java:180)
> 	at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:293)
> 	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
> 	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
> 	at java.lang.Thread.run(Thread.java:745)
> Caused by: java.lang.reflect.InvocationTargetException
> 	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
> 	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
> 	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
> 	at java.lang.reflect.Method.invoke(Method.java:497)
> 	at org.ops4j.pax.web.service.jetty.internal.LateInvalidatingHashSessionManager.sessionTimeout(LateInvalidatingHashSessionManager.java:166)
> 	... 9 more
> Caused by: org.jboss.weld.exceptions.UnsatisfiedResolutionException: WELD-001308: Unable to resolve any beansfor  Type:class org.jboss.weld.context.http.HttpSessionDestructionContext; Qualifiers: []
> 	at org.jboss.weld.bean.builtin.InstanceImpl.get(InstanceImpl.java:101)
> 	at org.jboss.weld.servlet.HttpContextLifecycle.getSessionDestructionContext(HttpContextLifecycle.java:112)
> 	at org.jboss.weld.servlet.HttpContextLifecycle.deactivateSessionDestructionContext(HttpContextLifecycle.java:172)
> 	at org.jboss.weld.servlet.HttpContextLifecycle.sessionDestroyed(HttpContextLifecycle.java:153)
> 	at org.jboss.weld.servlet.WeldInitialListener.sessionDestroyed(WeldInitialListener.java:144)
> 	at org.jboss.weld.servlet.api.helpers.ForwardingServletListener.sessionDestroyed(ForwardingServletListener.java:50)
> 	at org.eclipse.jetty.server.session.AbstractSessionManager.removeSession(AbstractSessionManager.java:794)
> 	at org.eclipse.jetty.server.session.AbstractSession.timeout(AbstractSession.java:310)
> 	... 14 more
> 
> 
> Any help is highly appreciated.
> 
> Best regards, Alex Sviridov
> 
> 
> 
> _______________________________________________
> weld-dev mailing list
> weld-dev at lists.jboss.org
> https://lists.jboss.org/mailman/listinfo/weld-dev
> 

-- 
Martin Kouba
Senior Software Engineer
Red Hat, Czech Republic


More information about the weld-dev mailing list