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@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 beans for 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