4

私が使用しているもの:

Linux
PrimeFaces 3.4.1
Glassfish 3.1.2.2(ビルド5、コメットが有効、WebSocketが無効)
FireFox 10.0.7
Chromium 22.0.1229.94

メッセージ駆動型Bean内にPrimePushがあります。MDBのonMessage()が呼び出されると(1秒間に数回かかるはずです)、うなり声の通知が表示されることを期待しています。また、これが重要かどうかはわかりませんが、MDBは*.ear内の*.jarファイルにあり、Webアプリケーションは同じくear内の*.warにあります。次のように、MDB内にPrimePushがあります。

pushContext = PushContextFactory.getDefault().getPushContext();
pushContext.push("/notifications",
    new FacesMessage("Hello World", "New Notification"));

これが私のweb.xmlです。

<servlet>
    <servlet-name>Push Servlet</servlet-name>
    <servlet-class>org.primefaces.push.PushServlet</servlet-class>
    <load-on-startup>1</load-on-startup>
</servlet>

<servlet-mapping>
    <servlet-name>Push Servlet</servlet-name>
    <url-pattern>/primepush/*</url-pattern>
</servlet-mapping>

問題は、最初にすべてをクリーンアップしたときに通知が1回発生することです(glassfish、ブラウザー)が、通常は再度表示されないか、その後pushContext.push()が呼び出されるたびに表示されます。FFでは、一度も機能しません。MDB onMessage()が起動すると、直後にFirefoxエラーコンソールに次のメッセージが表示されます。

Error: Firefox can't establish a connection to the server at ws://localhost:8080/test/primepush/notifications?X-Atmosphere-tracking-id=0&X-Atmosphere-Framework=1.0&X-Atmosphere-Transport=websocket&X-Cache-Date=0.
Source File: http://localhost:8080/test/javax.faces.resource/push/push.js.xhtml?ln=primefaces
Line: 1  

Chromeを使用すると、少なくとも1回は機能しますが、それ以上は機能しない場合もあります。Webページをロードするたびに、接続が閉じられていることがわかります(ページをロードしているときと同じです)。これはエラーコンソール内にありました。

Unexpected response code: 200 :8080:1
Websocket closed, reason: Connection was closed abnormally (that is, with no close frame being sent). push.js.xhtml:1
Websocket closed, wasClean: false push.js.xhtml:1
Websocket failed. Downgrading to Comet and resending  

これが私のtext.xhtmlページです。

<p:growl widgetVar="growl" showDetail="true"/>

<h:form id="myform">
    <p:fieldset id="myfs" legend="Push Test">
        <!-- stuff -->
    </p:fieldset>
</h:form>

<script type="text/javascript">
    function handleMessage(data) {
        data.severity = 'info';
        growl.show([data]);
    }
</script>

<p:socket onMessage="handleMessage" channel="/notifications">
</p:socket>
4

1 に答える 1

1

私は同じ問題に直面していましたが、glassfishでWebSocketを有効にすると、問題が修正されました(comet-support-enabledの後にdomain.xmlに以下を追加してください)。

websockets-support-enabled="true"

ヒントはこれでした:

Websocket failed. Downgrading to Comet and resending  

http://www.primefaces.org/docs/vdl/3.4/primefaces-p/socket.htmlのドキュメントによると、WebSocketはprimepushで使用されるデフォルトの方法であり、GlassfishでWebSocketを有効にする必要があります。p:socketでトランスポートをコメット(ロングポール/ストリーム)に設定することも機能すると思います。

ところで、私はテストしました:

Mac
PrimeFaces 3.4.2 with Atmosphere 1.0.8
Glassfish 3.1.2 (with comet enabled, websockets enabled)
FireFox 18
Chromium 24
于 2013-01-11T22:42:54.463 に答える