JBoss 6 中的异步处理(“Comet”)

3

编辑:由于这可能是关于嵌入在JBoss 6中的Tomcat而不是JBoss本身的问题,因此已重新标记为 tomcat / jboss

我有一个非常简单的servlet,在Glassfish v3上运行。它使用Servlet 3.0异步处理。这是一个简化版本(没有做太多):

@WebServlet(asyncSupported=true)
public class SimpleServlet extends HttpServlet {

    @Override
    protected void doGet(HttpServletRequest request,
            HttpServletResponse response)
            throws ServletException, IOException {

        final AsyncContext ac = request.startAsync();
        ac.setTimeout(3000);
    }
}

在 JBoss 6.0.0 里的 Milestone 2 版本上,我遇到了以下异常:
java.lang.IllegalStateException: The servlet or filters that are being used
          by this request do not support async operation
    at org.apache.catalina.connector.Request.startAsync(Request.java:3096)
    at org.apache.catalina.connector.Request.startAsync(Request.java:3090)
    at org.apache.catalina.connector.RequestFacade.startAsync(RequestFacade.java:990)
    at playcomet.SimpleServlet.doGet(SimpleServlet.java:18)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:734)
    ...

我需要在JBoss 6中启用异步处理时,是否需要做一些特殊的事情?或者我需要额外的部署描述符吗?...


@skaffman:感谢您提供有关Tomcat的提示!但是,JBoss 6.0.0 Milestone 2包括一种全新的异步处理方法(基于Servlet 3.0),据我所知,这在Tomcat版本中尚不可用-我不是100%确定。 - Chris Lercher
1个回答

2
如果您已经将web.xml与..部署在一起,请将其删除。结构应该是
test.war - WEB-INF/ - WEB-INF/classes/*.class - WEB-INF/lib/*.jar
您的web.xml正在覆盖asyncSupported=true注释,因此出现错误。

感谢您找出我的旧问题并回答!通常我不能只删除web.xml,因为我通常需要它 - 那么有没有一种通过修改web.xml来实现asyncSupported=true的方法?我记不得在web.xml中明确将其设置为false。 (我不再拥有我的旧项目设置,但我仍然很感兴趣。) - Chris Lercher
@Chris:你仍然可以拥有web.xml文件,但不要在其中定义异步servlet,让注释为该servlet提供支持。然而,我还没有探索web.xml中asyncSupported=true属性的可能性。 - Rohit Chourasia

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接