JBoss 6上的CometD演示

时间:2012-03-20 11:38:01

标签: jboss6.x server-push cometd

我打算在我的JBoss AS 6上运行的应用程序中使用Cometd库。因此我下载了cometd 2.4.0并试图将示例war(从cometd-demo / target)部署到我的AS。我知道没有修改就不可能这样做,所以我在web.xml中进行了更改:

  1. 在web-app标记中更改为servlet 3.0(最初为2.5)。来自CometD faq answer的完整标记。也是基于this description

  2. 的web.xml中已取消注释的延迟过滤器
  3. 基于faq answer,添加了异步支持的标记。但是,这会导致问题:如果我只是取消注释,则无法解析web.xml。我发现这是由于XML中的标记顺序,因此在 load-on-startup 标记之后移动了 async-supported 标记。但是,Jboss仍然会抛出异常:

  4.   

    ERROR   [org.apache.catalina.core.ContainerBase [jboss.web]。[本地主机]。[/的cometd-演示2.4.0] [的cometd]]   Servlet Cometd的Servlet.service()抛出异常:   java.lang.IllegalStateException:正在进行的servlet   此请求使用的不支持异步操作

         

    ERROR   [org.apache.catalina.core.ContainerBase [jboss.web]。[本地主机]。[/的cometd-演示2.4.0] [的cometd]]   Servlet Cometd的Servlet.service()抛出异常:   抛出java.lang.ClassNotFoundException:   org.eclipse.jetty.server.AbstractHttpConnection来自   BaseClassLoader @ 12a54b

    我使用的完整web.xml文件是here

    尽管报告了所有错误,但示例运行没有我的Jboss,但通过观察firebug,我可以看到它快速汇集而不是长池。似乎服务器认为浏览器打开了多个连接,但情况并非如此(参见下面的JSON):

    [{"id":"137","successful":true,"advice":{"interval":2000,"reconnect":"retry","multiple-clients":true,"timeout":20000},"channel":"/meta/connect"}]
    

    有没有人设法让例子与JBoss as6一起工作以及如何使用?我在这里做错了什么?

2 个答案:

答案 0 :(得分:1)

删除:

<!-- Portability Filter, needed only to run on non Jetty or non Servlet-3.0 containers -->
<filter>
    <filter-name>continuation</filter-name>
    <filter-class>org.eclipse.jetty.continuation.ContinuationFilter</filter-class>
</filter>
<filter-mapping>
    <filter-name>continuation</filter-name>
    <url-pattern>/cometd/*</url-pattern>
</filter-mapping>

来自web.xml

答案 1 :(得分:0)

即使我从web.xml中删除了连续过滤器,我也有相同的设置和相同的问题。

我发现一个关于cometd-users组的帖子抱怨Tomcat 7上的多客户端问题,原因似乎是Content-Type的Tomcat错误未设置为“application / json”。 但是我检查了数据包,在JBossAS6上,内容类型在服务器响应上正确设置。

<强>更新

我尝试使用Jetty 7,问题就消失了。 “多客户端”问题会影响Tomcat以及JBoss6 AS