2013-06-05 77 views
0

我們的CometD/Gigaspaces應用程序創建Bayeux服務器的重複實例時遇到了問題。看到我之前發佈的問題here。 使用Gigaspaces調查此問題後,我們的應用程序上下文文件中定義的每個bean都創建了兩次,如 GigaSpaces對應用程序上下文文件PU.XML有特殊待遇。我們已經通過重命名PU.XML文件解決了這個問題,但是我們現在的問題是我們沒有收到客戶端的任何數據,並收到以下錯誤「NetworkError:400 Unknown Bayeux Transport - http://localhost:9292/cometd」。Bayeux服務器配置問題

此前,當應用程序創建了一個Bayeux服務器的重複實例時,我們放置了一個解決方法來終止運行Bayeux服務器的線程的第一個實例,因此我們能夠發佈數據在我們的頻道上使用我們在 應用程序上下文文件中配置的Web套接字。

您可以查看我們當前的配置,並讓我知道是否有其他解決方案使用Spring正確配置和導出Bayeux服務器? Bayeux bean是否可能無法正確導出,或者導出得太晚?

我已經在下面發佈了我們更新的Web.XML和應用程序環境配置。我們的POM.XML中的CometD Version/Jars與我之前的文章相同。如果您需要更多信息。請告訴我。

當前的web.xml:

<?xml version="1.0" encoding="UTF-8"?> 
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" 
    xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" 
    id="WebApp_ID" version="2.5"> 
    <display-name>CometDApplication</display-name>   
    <servlet> 
     <servlet-name>cometd</servlet-name> 
     <servlet-class>org.cometd.server.CometdServlet</servlet-class> 
    </servlet> 
    <servlet-mapping> 
     <servlet-name>cometd</servlet-name> 
     <url-pattern>/cometd/*</url-pattern> 
    </servlet-mapping> 
    <listener> 
     <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> 
    </listener> 
    <!-- <listener> 
     <listener-class>org.openspaces.pu.container.jee.context.ProcessingUnitContextLoaderListener</listener-class> 
    </listener>--> 
    <context-param> 
     <param-name>contextConfigLocation</param-name> 
     <param-value>/WEB-INF/applicationContext-gigaspaces.xml</param-value> 
    </context-param> 
</web-app> 

當前的applicationContext-gigaspaces.XML:

<bean id="Bayeux" class="org.cometd.server.BayeuxServerImpl" 
     init-method="start" destroy-method="stop"> 
     <property name="options"> 
      <map> 
       <entry key="logLevel" value="0" /> 
       <entry key="timeout" value="15000" /> 
      </map> 
     </property> 
     <property name="transports"> 
      <list> 
       <!-- The order of the following transports dictates the type of transport 
        used i.e. Web Sockets then JsonTransport (a.k.a long-polling) --> 
       <bean id="websocketTransport" class="org.cometd.websocket.server.WebSocketTransport"> 
        <constructor-arg ref="Bayeux" /> 
       </bean> 
       <bean id="jsonTransport" class="org.cometd.server.transport.JSONTransport"> 
        <constructor-arg ref="Bayeux" /> 
       </bean> 
       <bean id="jsonpTransport" class="org.cometd.server.transport.JSONPTransport"> 
        <constructor-arg ref="Bayeux" /> 
       </bean> 
      </list> 
     </property> 
    </bean> 

    <!-- Export the Bayeux Server to the servlet context via springs ServletContextAttributeExporter --> 
    <bean id="ContextExporter" 
     class="org.springframework.web.context.support.ServletContextAttributeExporter"> 
     <property name="attributes"> 
      <map> 
       <entry key="org.cometd.bayeux"> 
        <ref local="Bayeux" /> 
       </entry> 
      </map> 
     </property> 
    </bean> 

回答

0

您發佈的代碼是正確的,幾乎等同於目前在的cometd測試,看herehere

您還有其他事情正在進行,客戶端和服務器上的調試日誌將幫助您理解。