我在用着:
Linux
PrimeFaces 3.4.1
Glassfish 3.1.2.2(构建 5,启用了 comet,禁用了 websockets)
FireFox 10.0.7
Chromium 22.0.1229.94
我在消息驱动的 bean 中有 PrimePush。当我的 MDB 的 onMessage() 被调用时(这应该是每秒几次),我期待出现咆哮通知。此外,不确定这是否重要,但 MDB 位于 *.ear 内的 *.jar 文件中,Web 应用程序也在耳内的 *.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>
问题是当我第一次将所有内容(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,它至少可以工作一次,有时但不是更可靠。每次我加载网页时,我都会看到一个连接已关闭(就像我加载页面一样)。这是在错误控制台中。
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>