2013-05-17 5 views
1

CometD 어플리케이션에 문제가 있습니다. Bayeux Server의 다중 인스턴스를 만드는 것처럼 보입니다. 내 구성 파일은 다음과 같으며 웹 소켓을 전송/GigaSpaces로 사용하여 응용 프로그램을 배포합니다 (자체 임베디드 부두 서버 사용). 다음 설정에서 뭔가 잘못 구성했는지 궁금합니다.중복 된 Bayeux Server 인스턴스 생성

의 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>  
     <init-param> 
      <param-name>jsonContext</param-name> 
      <param-value>org.cometd.server.JacksonJSONContextServer</param-value> 
     </init-param> 
     <init-param> 
      <param-name>transports</param-name>  
      <param-value>org.cometd.websocket.server.WebSocketTransport</param-value> 
     </init-param> 
     <load-on-startup>1</load-on-startup> 
    </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>/META-INF/spring/pu.xml</param-value> 
    </context-param> 
</web-app> 

의 pom.xml :

<dependency> 
      <groupId>org.cometd.java</groupId> 
      <artifactId>bayeux-api</artifactId> 
      <version>2.5.1</version>    
     </dependency> 
     <dependency> 
      <groupId>org.cometd.java</groupId> 
      <artifactId>cometd-java-server</artifactId> 
      <version>2.5.1</version>    
     </dependency> 
     <dependency> 
      <groupId>org.cometd.java</groupId> 
      <artifactId>cometd-java-annotations</artifactId> 
      <version>2.5.1</version> 
     </dependency>  
     <dependency> 
      <groupId>org.cometd.java</groupId> 
      <artifactId>cometd-websocket-jetty</artifactId> 
      <version>2.5.1</version>    
     </dependency> 
     <dependency> 
      <groupId>org.eclipse.jetty</groupId> 
      <artifactId>jetty-websocket</artifactId>       
      <version>7.6.8.v20121106</version> 
     </dependency> 

내 Applcation 컨텍스트 파일 (pu.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>   
      <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> 


<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> 

답변

1

BayeuxServer, CometdServlet에 의해 생성되고 web.xml에 정의 된 하나와 Spring에서 만든 하나 .

CometD and Spring integration documentation에 명시된 것처럼 Spring을 사용하여 CometD를 초기화하면 전체 BayeuxServer 구성이 Spring에 있어야합니다. web.xml에 복제하지 마십시오. 당신이 <load-on-startup> 요소를 정의하기 때문에

또한,의 CometdServlet 봄 자체를 생성하고 수출 할 수있는 기회를 얻을 전에 BayeuxServer 인스턴스를 생성, 봄의 ContextLoaderListener 전에 초기화됩니다.

제거 web.xml의 모든 <init-param>, <load-on-startup>를 제거하고 당신이 잘되어야합니다 : 서블릿이 느리게 초기화됩니다 및 찾을 봄 생성 BayeuxServer가 추가 인스턴스를 생성하지 않고, 제대로 수출했다.

+0

안녕하세요, Simone, 답장을 보내 주셔서 감사합니다. 나는 당신의 제안을 시험해 보았고 나는 여전히 Bayeux의 여러 인스턴스를 생성하는 것처럼 보였다. Spring 통합에 대한 제안 된 게시물을 살펴본 후 parms을 WEB.XML에서 제거했습니다. 위의 구성에서 내가 잘못 할 수있는 다른 것이 있습니까? – user676567