我计划在运行在 JBoss AS 6 上的应用程序中使用 Cometd 库。因此我下载了 cometd 2.4.0 并尝试将示例战争(来自 cometd-demo/target)部署到我的 AS。我知道如果不进行修改这是不可能的,所以我在 web.xml 中进行了更改:
在 web-app 标记中更改为 servlet 3.0(它最初是 2.5)。使用CometD 常见问题解答中的完整标签。基于此描述,web.xml 中已经存在的未注释延续过滤器
基于常见问题解答,添加了支持异步的标签。但是,这会导致问题:如果我只是取消注释,则无法解析 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 一起工作?如何?我在这里做错了什么?