PAX-WEB + PAX-CDI + WELD = Problem scavenging sessions' java.lang.IllegalStateException
by Alex Sviridov
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@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
7 years, 6 months
Interceptor & Interceptors
by Emily Jiang
Hi Martin,
In the updated Interceptor spec, it has the following statement:
"The Interceptor annotation is ignored on interceptor classes bound using
the Interceptors annotation."
I assume this already the case in Weld 2.x, CDI 1.2 implementation. Right?
Many thanks,
Emily
===========================
Emily Jiang
WebSphere Application Server, CDI & MicroProfile Development Lead
MP 211, DE3A20, Winchester, Hampshire, England, SO21 2JN
Phone: +44 (0)1962 816278 Internal: 246278
Email: emijiang(a)uk.ibm.com
Lotus Notes: Emily Jiang/UK/IBM@IBMGB
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
7 years, 6 months