PrimeFaces Push を機能させようとしています。Web 側は WAR にパッケージ化され、MDB は JAR 内にパッケージ化され、これらは EAR 内にあります。以下のコンポーネントを使用しています。
Glassfish 3.1.2
PrimeFaces 3.4.1
Firefox 10.0.7
Linux
JAR のメッセージ駆動型 Bean 内に次のコードがあり、MDB がメッセージを受信するたびに、うなりメッセージが Web アプリ内に表示されることを期待していますが、それは起こっていません。EAR 内にパッケージ化された WAR と JAR があります。これはコンテナ間で機能しないか、パッケージングの方法に関係している可能性がありますか?
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() を呼び出すと、MDB の onMessage() を通じてすべてが実行されていることを示す println() 出力が得られます。エラーはありません。すべて正常に見えます。
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 dir (上記のとおり) にあり、application.xml のどこにありますか。
<module>
<ejb>ejb.jar</ejb>
</module>
<library-directory>lib</library-directory>