我打算在我的JBoss AS 6上运行的应用程序中使用Cometd库。因此我下载了cometd 2.4.0并试图将示例war(从cometd-demo / target)部署到我的AS。我知道没有修改就不可能这样做,所以我在web.xml中进行了更改:
在web-app标记中更改为servlet 3.0(最初为2.5)。来自CometD faq answer的完整标记。也是基于this description
基于faq answer,添加了异步支持的标记。但是,这会导致问题:如果我只是取消注释,则无法解析web.xml。我发现这是由于XML中的标记顺序,因此在 load-on-startup 标记之后移动了 async-supported 标记。但是,Jboss仍然会抛出异常:
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一起工作以及如何使用?我在这里做错了什么?
答案 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