0

我计划在运行在 JBoss AS 6 上的应用程序中使用 Cometd 库。因此我下载了 cometd 2.4.0 并尝试将示例战争(来自 cometd-demo/target)部署到我的 AS。我知道如果不进行修改这是不可能的,所以我在 web.xml 中进行了更改:

  1. 在 web-app 标记中更改为 servlet 3.0(它最初是 2.5)。使用CometD 常见问题解答中的完整标签。基于此描述,web.xml 中已经存在的未注释延续过滤器

  2. 基于常见问题解答,添加了支持异步的标签。但是,这会导致问题:如果我只是取消注释,则无法解析 web.xml。我发现这是由于 XML 中的标签顺序造成的,因此将支持异步的标签向下移动,就在启动时加载标签之后。但是,Jboss 仍然会抛出异常:

错误 [org.apache.catalina.core.ContainerBase.[jboss.web].[localhost].[/cometd-demo-2.4.0].[cometd]] Servlet.service() for servlet cometd 抛出异常:java。 lang.IllegalStateException:此请求正在使用的 servlet 或过滤器不支持异步操作

错误 [org.apache.catalina.core.ContainerBase.[jboss.web].[localhost].[/cometd-demo-2.4.0].[cometd]] Servlet.service() for servlet cometd 抛出异常:java。 lang.ClassNotFoundException:来自 BaseClassLoader@12a54b 的 org.eclipse.jetty.server.AbstractHttpConnection

我使用的完整 web.xml 文件在这里

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

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

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

4

2 回答 2

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

于 2012-04-20T11:42:40.877 回答
0

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

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

更新

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

于 2012-06-19T09:01:39.273 回答