2013-05-17 5 views
1

У меня проблема с моим CometD Application. Похоже, что он создает несколько экземпляров сервера Bayeux. Моя конфигурация Файлы выглядят следующим образом, и я использую веб-сокеты в качестве транспорта/GigaSpaces для развертывания приложения (которое использует собственный встроенный сервер Jetty). Просто интересно, если я неправильно сконфигурировал что-то в следующей настройке?Создан дублирующий экземпляр сервера Bayeux

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 должна быть весной. Не продублируйте его в web.xml.

Кроме того, так как вы определяете <load-on-startup> элемент, то CometdServlet инициализируется до того весны ContextLoaderListener, создавая BayeuxServer экземпляр до весны получает возможность создать свой собственный и экспортировать его.

Удалить все <init-param> из web.xml, удалить <load-on-startup> и вы должны быть хорошо: сервлет будет лениво инициализируется и найти Spring созданных BayeuxServer экспортируются корректно, без создания дополнительного экземпляра.

+0

Hi Simone, Спасибо за ваш ответ. Я опробовал ваши предложения, и похоже, что я все еще получаю несколько экземпляров созданного Байё. Я посмотрел ваш предложенный пост по интеграции Spring и удалил parms и из WEB.XML. Есть ли что-то еще, что я мог сделать неправильно в вышеупомянутой конфигурации? – user676567