0

我们的 CometD/Gigaspaces 应用程序在创建 Bayeux 服务器的重复实例时遇到了问题。请参阅我之前发布的问题here。在研究了 Gigaspaces 的这个问题后,我们发现在我们的应用程序上下文文件中定义的每个 bean 都被创建了两次,因为 GigaSpaces 对名为 PU.XML 的应用程序上下文文件进行了特殊处理。我们已经通过重命名 PU.XML 文件解决了这个问题,但我们现在遇到的问题是我们没有在客户端接收任何数据并收到以下错误“NetworkError:400 Unknown Bayeux Transport - http://localhost:9292/cometd”。

以前,当应用程序创建 Bayeux 服务器的重复实例时,我们采取了一种解决方法来终止运行 Bayeux 服务器的线程的第一个实例,因此我们能够使用 Web 在我们的频道上发布数据我们在应用程序上下文文件中配置的套接字。

您能否看看我们当前的配置,让我知道是否有替代解决方案可以使用 Spring 正确配置和导出 Bayeux 服务器?Bayeux bean 是否有可能没有正确导出或者导出得太晚?

我在下面发布了我们更新的 Web.XML 和应用程序上下文配置。我们 POM.XML 中的 CometD 版本/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>
4

1 回答 1

0

您发布的代码是正确的,并且与 CometD 中的测试几乎相同,请参见此处此处

您还有其他事情要做,客户端和服务器上的调试日志将帮助您理解。

于 2013-06-05T11:27:46.237 回答