首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >创建了重复的Bayeux服务器实例

创建了重复的Bayeux服务器实例
EN

Stack Overflow用户
提问于 2013-05-17 20:42:12
回答 1查看 544关注 0票数 1

我的CometD应用程序出现问题。它看起来像是在创建Bayeux Server的多个实例。我的配置文件如下所示,我使用Web Sockets作为传输/GigaSpaces来部署应用程序(它使用自己的嵌入式jetty服务器)。只是想知道我是不是在下面的设置中配置错误了?

WEB.XML:

代码语言:javascript
复制
<?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:

代码语言:javascript
复制
<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>

我的应用程序上下文文件(pu.XML):

代码语言:javascript
复制
<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>
EN

回答 1

Stack Overflow用户

发布于 2013-05-17 21:56:49

您实际上正在创建BayeuxServer的两个实例,一个是由您在web.xml中定义的CometdServlet创建的,另一个是由Spring创建的。

正如CometD and Spring integration documentation中所述,如果使用Spring初始化CometD,那么整个BayeuxServer配置必须在Spring中进行。不要在web.xml中复制它。

此外,由于您定义了<load-on-startup>元素,因此CometdServlet在Spring的ContextLoaderListener之前被初始化,在Spring有机会创建自己的实例并导出它之前创建一个BayeuxServer实例。

web.xml中删除所有<init-param>,删除<load-on-startup>,就可以了: servlet将延迟初始化,并将找到正确导出的Spring创建的BayeuxServer,而无需创建额外的实例。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16609341

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档