我正在尝试让 PrimeFaces Push 工作。Web 端封装在 WAR 中,MDB 封装在 JAR 中,这些都在 EAR 中。我正在使用以下组件。
Glassfish 3.1.2
PrimeFaces 3.4.1
Firefox 10.0.7
Linux
我在 JAR 的消息驱动 bean 中有以下代码,每次 MDB 收到消息时,我都希望在 Web 应用程序中显示咆哮消息,但是,这并没有发生。我将 WAR 和 JAR 打包在 EAR 中。难道这不适用于容器或与我的包装方式有关?
pushContext = PushContextFactory.getDefault().getPushContext();
pushContext.push("/test", new FacesMessage("Test Summary", "Test Detail"));
这是战争的 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>
<context-param>
<param-name>primefaces.PUSH_SERVER_URL</param-name>
<param-value>ws://localhost:8080</param-value>
</context-param>
这是 index.xhtml。
<script type="text/javascript">
function handleMessage(msg) {
msg.severity = 'info';
growl.show([msg]);
}
</script>
<p:growl id="growl" widgetVar="growl" showDetail="true"/>
<p:socket channel="/test" onMessage="handleMessage"/>
当我从 MDB 调用 pushContext.push() 时,我得到 println() 输出,它显示了通过 MDB 的 onMessage() 一直执行的所有内容。没有错误,一切看起来都很好。
我只是没有看到 index.xhtml 页面(即 javascript messageHandle)中发生任何事情。
我没有使用 Maven,所以我不确定如何翻译 pom.xml。我的 EAR 如下所示。
.
|-- META-INF
| |-- MANIFEST.MF
| `-- application.xml
|-- ejb.jar
|-- app1.war
|-- lib
| |-- atmosphere-cometd-1.0.2.jar
| |-- atmosphere-compat-jbossweb-1.0.2.jar
| |-- atmosphere-compat-tomcat-1.0.2.jar
| |-- atmosphere-compat-tomcat7-1.0.2.jar
| |-- atmosphere-runtime-1.0.2.jar
| |-- primefaces-3.4.1.jar
| |-- redmond-1.0.8.jar
| `-- slf4j-api-1.6.1.jar
`-- otherapp.war
我的 EJB 中没有 primefaces.jar,但它位于 lib 目录中(如上所示),并且我在 application.xml 中有它。
<module>
<ejb>ejb.jar</ejb>
</module>
<library-directory>lib</library-directory>