Guice can't create async servlet
See original GitHub issueFrom swapii on August 30, 2011 07:39:51
I’ve connect Guice to my project, write web.xml and everything gone right until I wan’t to realize async servlet. I using Tomcat 7.0.20 and Guice 3.0. Servlets spec version is 3.0.
Test Comet servlet:
@
Singleton
@
WebServlet(name = “comet”, urlPatterns = {“/comet”}, asyncSupported = true)
public class CometServlet extends HttpServlet {
private class TestThread implements Runnable {
private AsyncContext context;
public TestThread(AsyncContext ctx) { context = ctx; }
@
Override
public void run() {
try {
Thread.sleep(5000);
context.getResponse().getWriter().write(“TEST!”);
} catch (InterruptedException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}
@
Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
AsyncContext ctx = req.startAsync(req, resp);
new Thread(new TestThread(ctx)).start();
}
}
Servlet created, it placed at “/comet” path, but async not working and error was printed:
HTTP Status 500
java.lang.IllegalStateException: Not supported. org.apache.catalina.connector.Request.startAsync(Request.java:1638) org.apache.catalina.connector.RequestFacade.startAsync(RequestFacade.java:1031) javax.servlet.ServletRequestWrapper.startAsync(ServletRequestWrapper.java:379) javax.servlet.ServletRequestWrapper.startAsync(ServletRequestWrapper.java:379) ru.unimobi.cinema.server.server.servlets.CometServlet.service(CometServlet.java:46) javax.servlet.http.HttpServlet.service(HttpServlet.java:722) com.google.inject.servlet.ServletDefinition.doService(ServletDefinition.java:216) com.google.inject.servlet.ServletDefinition.service(ServletDefinition.java:141) com.google.inject.servlet.ManagedServletPipeline.service(ManagedServletPipeline.java:93) com.google.inject.servlet.FilterChainInvocation.doFilter(FilterChainInvocation.java:63) com.google.inject.servlet.FilterDefinition.doFilter(FilterDefinition.java:134) com.google.inject.servlet.FilterChainInvocation.doFilter(FilterChainInvocation.java:59) com.google.inject.servlet.ManagedFilterPipeline.dispatch(ManagedFilterPipeline.java:122) com.google.inject.servlet.GuiceFilter.doFilter(GuiceFilter.java:110)
I think this is bug, because I write web.xml directly without Guice and it working as expected.
_Original issue: http://code.google.com/p/google-guice/issues/detail?id=650_
Issue Analytics
- State:
- Created 9 years ago
- Comments:8 (2 by maintainers)
Top GitHub Comments
I think this issue, at least it’s title is wrong: “Guice can’t create async servlet” is not true.
Guice can create async servlet (just don’t forget to set
<async-supported>true</async-supported>
on guice filter inweb.xml
).Just FTR, as I got puzzled by this opened issue, while creating a POC that basically proved the opposite of this issue.
There is yet another way to register the async servlet in guice context. It works with constructor injection and no annotations.