-
1. Re: Weld equivalence to ContextualHttpServletRequest
nickarls Mar 12, 2010 1:02 PM (in response to tiarossi)Not tested but you could try something like
public abstract class WeldRequest { protected HttpServletRequest request; protected ServletLifecycle servletLifecycle; public WeldRequest(HttpServletRequest request) { this.request = request; servletLifecycle = new ServletLifecycle(Container.instance().services().get(ContextLifecycle.class)); } public abstract void process(); public void run() throws ServletException { try { servletLifecycle.beginRequest(request); process(); } catch (Exception e) { throw new ServletException("Error processing Weld request", e); } finally { servletLifecycle.endRequest(request); } } }
You might need to fiddle with the setup/teardown process a bit but the code might get you started.
-
2. Re: Weld equivalence to ContextualHttpServletRequest
tiarossi Mar 15, 2010 5:39 PM (in response to tiarossi)Thank you Nicklass, but i think i'll need to do something more, beacuse i'm getting an IllegalStateException on Container.getInstance.
java.lang.IllegalStateException: Singleton not set for java.net.URLClassLoader@f7ba93
at org.glassfish.weld.ACLSingletonProvider$ACLSingleton.get(ACLSingletonProvider.java:107)
at org.jboss.weld.Container.instance(Container.java:98)
at com.ati.sglweb.sglclient.server.comet.WeldContextualServletRequest.<init>(WeldContextualServletRequest.java:21)
at com.ati.sglweb.sglclient.server.comet.GWTCometHandler$1.<init>(GWTCometHandler.java:80)
at com.ati.sglweb.sglclient.server.comet.GWTCometHandler.onEvent(GWTCometHandler.java:80)
at com.sun.grizzly.comet.DefaultNotificationHandler.notify0(DefaultNotificationHandler.java:189)
at com.sun.grizzly.comet.DefaultNotificationHandler$1.run(DefaultNotificationHandler.java:133)
at com.sun.grizzly.util.AbstractThreadPool$Worker.doWork(AbstractThreadPool.java:330)
at com.sun.grizzly.util.AbstractThreadPool$Worker.run(AbstractThreadPool.java:309)
at java.lang.Thread.run(Thread.java:619) -
3. Re: Weld equivalence to ContextualHttpServletRequest
nickarls Mar 16, 2010 7:47 AM (in response to tiarossi)Hmm. It indicates that Weld hasn't booted or something. Are you sure you have a beans.xml in your web app and that you see the Weld boot message at deployment? Some more info on your environment?
-
4. Re: Weld equivalence to ContextualHttpServletRequest
tiarossi Mar 16, 2010 1:11 PM (in response to tiarossi)I'm using glassifish 3 with embeded weld.
I have a servlet working in async mode with grizzly comet, so after the request is made, i enqueue it (plus HttpServletRequest and HttpServletResponse) in a CometContext and serlet is released(since i'm in async mode).
A new thread created on Servlet init method is responsable for prepare the answers and notify the CometContext.In the CometHandler, that is started by the notification of the CometContext, i want to restore the SessionContext
of the request and inject SessionScoped objets on it.
Injection works fine inside the doPost method of the servlet, also i can get the Conteiner.instance inside it,
but on the CometHandler it seams not to be instantiated.Ps.: From your code i have to replace the
Container.instance().services() by Container.instance().deploymentServices().Thanks,
Tiago. -
5. Re: Weld equivalence to ContextualHttpServletRequest
nickarls Mar 16, 2010 8:45 PM (in response to tiarossi)The separate thread is probably the problem (the singleton is not set there).
Perhaps you could register a custom context for the stuff and access the BeanManager from JNDI? It's a bit tricky to access the normal contexts in a portable way since you can't get non-active contexts from the BeanManager.
There are probably better ways of doing this so if anyone has better suggestions, feel free...
-
6. Re: Weld equivalence to ContextualHttpServletRequest
tdtappe Mar 29, 2012 2:50 AM (in response to nickarls)I wanted to take this approach with weld 1.1.2 but I can't find the class ServletLifecycle.