2012-03-20 41 views
0

我打算在運行於JBoss AS 6上的應用程序中使用Cometd庫。因此我下載了cometd 2.4.0並嘗試將example war(從cometd-demo/target)部署到我的AS。我知道,這是不可能沒有修改,所以我沒有在web.xml中的變化:改到在Servlet web應用程序標籤3.0JBoss 6上的CometD演示

  1. (它最初是2.5)。從CometD faq answer使用完整標籤。還取消了已註冊到web.xml中的繼續過濾器,基於this description

  2. 基於faq answer,添加了異步支持的標記。但是,這會導致問題:如果我只取消註釋,則不能分析web.xml。我發現這是由於XML中的標籤順序所致,因此移動異步支持標記了訂單,僅在加載啓動標記。然而,Jboss的還是拋出異常:

錯誤 [org.apache.catalina.core.ContainerBase [jboss.web] [本地主機] [/的cometd-演示2.4.0]。 [的cometd]] Servlet.service()進行的servlet的cometd拋出異常: java.lang.IllegalStateException:正在使用由該請求不支持異步操作

ERROR [org.apache servlet或過濾器.catalina.core.ContainerBase。[jboss.web]。[localhost]。[/ cometd-demo-2.4.0]。[cometd]] Ser vlet.service()進行的servlet的cometd拋出異常: 拋出java.lang.ClassNotFoundException: org.eclipse.jetty.server.AbstractHttpConnection從 BaseClassLoader @ 12a54b

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

儘管報告了所有錯誤,但沒有我的Jboss運行示例,但通過觀看螢火蟲,我可以看到它可以快速合併而不是長池。看來,服務器認爲該瀏覽器有多個連接打開,這是不是這種情況(見下面的JSON):

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

這兒還有沒有人管理,以使示例與JBoss AS6以及如何工作的?我在這裏做錯了什麼?

回答

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中

0

我有相同的設置,即使我從web.xml中刪除過濾器延續了同樣的問題。

我在cometd-users組發現了一個線程,抱怨Tomcat 7上出現多客戶端問題,原因似乎是未設置爲「application/json」的Content-Type的Tomcat bug。 但是我檢查了數據包,並在JBossAS6上正確設置了服務器響應的內容類型。

UPDATE

我已經放棄使用碼頭7試一試,問題就消失了。「多客戶端」問題影響Tomcat以及JBoss6 AS