0

当社の CometD/Gigaspaces アプリケーションが Bayeux サーバーの重複インスタンスを作成するという問題がありました。ここに投稿された以前の質問を参照してください。Gigaspaces でこの問題を調査した結果、GigaSpaces には PU.XML と呼ばれるアプリケーション コンテキスト ファイルの特別な処理があるため、アプリケーション コンテキスト ファイルで定義された各 Bean が 2 回作成されていたことが判明しました。PU.XML ファイルの名前を変更することでこの問題を解決しましたが、現在の問題は、クライアント側でデータを受信して​​おらず、「NetworkError: 400 Unknown Bayeux Transport - http://localhost:9292/cometd」というエラーが表示されることです。

以前は、アプリケーションが Bayeux サーバーの複製インスタンスを作成したときに、Bayeux サーバーが実行されていたスレッドの最初のインスタンスを終了するための回避策を用意しました。その結果、Web を使用してチャネルにデータを公開することができました。アプリケーション コンテキスト ファイルで構成したソケット。

現在の構成を見て、Spring を使用して Bayeux サーバーを正しく構成およびエクスポートするための代替ソリューションがあるかどうかを教えてください。Bayeux Bean が正しくエクスポートされていない、またはエクスポートが遅すぎる可能性はありますか??

更新された Web.XML とアプリケーション コンテキストの構成を以下に掲載しました。POM.XML の CometD バージョン/Jar は、以前の投稿と同じです。さらに情報が必要な場合。私にお知らせください。

現在の 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 に答える