2013-06-05 5 views
0

우리는 Bayeux 서버의 복제 인스턴스를 생성하는 CometD/Gigaspaces 애플리케이션에 문제가있었습니다. 내 이전 질문은 here으로 게시 됨. Gigaspaces로이 문제를 조사한 후 응용 프로그램 컨텍스트 파일에 정의 된 각 빈이 으로 두 번 생성되었음을 알게되었습니다. GigaSpaces는 PU.XML이라는 응용 프로그램 컨텍스트 파일에 대한 특별한 처리를합니다. 우리는 PU.XML 파일의 이름을 변경하여이 문제를 해결했지만 우리가 지금 가지고있는 문제는 클라이언트 측에서 데이터를받지 못하고 "NetworkError : 400 Unknown Bayeux Transport - http://localhost:9292/cometd"오류가 발생한다는 것입니다.Bayeux 서버 설정 문제

이전에는 응용 프로그램이 Bayeux Server의 중복 인스턴스를 생성 할 때 Bayeux Server가 실행중인 스레드의 첫 번째 인스턴스를 종료하기위한 임시 해결책을 제시 했으므로 데이터를 게시 할 수있었습니다 응용 프로그램 컨텍스트 파일에서 구성한 웹 소켓을 사용하여 우리 채널에 있습니다.

현재 구성을 살펴보고 Spring을 사용하여 Bayeux Server를 올바르게 구성하고 내보낼 수있는 대안이 있는지 알려주십시오. Bayeux 빈이 올바르게 반출되지 않거나 너무 늦게 반출 될 가능성이 있습니까 ??

업데이트 된 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 .

뭔가 다른 일이 있으며 클라이언트와 서버의 디버그 로그가 이해를 돕습니다.