向Tomcat上的几个JSF应用程序发送Websocket推送通知
我有两个JSF应用程序在Tomcat上运行向Tomcat上的几个JSF应用程序发送Websocket推送通知,jsf,websocket,tomcat9,Jsf,Websocket,Tomcat9,我有两个JSF应用程序在Tomcat上运行 localhost:8080/app1/index.xhtml localhost:8080/app2/index.xhtml 在这两个索引文件中,相同的f:websocket标记放置在表单部分 <h:form> ... ... ... <f:websocket channel="test" onmessage="socketListener" /> <h:outputScr
- localhost:8080/app1/index.xhtml
- localhost:8080/app2/index.xhtml
<h:form>
...
...
...
<f:websocket channel="test" onmessage="socketListener" />
<h:outputScript>
function socketListener(message, channel, event) {
console.log(message);
}
</h:outputScript>
</h:form>
但是当我通过app1的JAVA方法pushContext.send
发送通知时,app2的JS方法socketListener
不起作用
是否可以一次将通知推送到多个JSF应用程序?默认情况下,web套接字是应用程序作用域。两种应用都有各自的应用范围。两个应用程序根本不共享相同的应用程序范围。你看,应用程序范围是一个绑定到单个应用程序的范围。这是因为一个应用程序就是一个应用程序。啊,好吧,我想你现在明白了:) 您基本上需要跨应用程序的通信。标准JavaEEAPI为此提供了现成的JMS。但是,由于您使用的是一个基本的Tomcat servlet容器,因此您的选项非常有限。可以,但最好是迁移到普通的JavaEE服务器。Tomcat的JavaEE变体是。它已经提供了JSF、CDI、JMS和更多现成的东西(基本上是JavaEE中的所有东西),而不需要通过WAR部署手动携带大量JAR文件
一旦在Tomcat中安装了JMS,或者迁移到普通的JavaEE服务器,那么您就可以按照(代码的教父)的“集群设计提示”部分中的说明进行操作。默认情况下,web套接字的应用范围是有限的。两种应用都有各自的应用范围。两个应用程序根本不共享相同的应用程序范围。你看,应用程序范围是一个绑定到单个应用程序的范围。这是因为一个应用程序就是一个应用程序。啊,好吧,我想你现在明白了:) 您基本上需要跨应用程序的通信。标准JavaEEAPI为此提供了现成的JMS。但是,由于您使用的是一个基本的Tomcat servlet容器,因此您的选项非常有限。可以,但最好是迁移到普通的JavaEE服务器。Tomcat的JavaEE变体是。它已经提供了JSF、CDI、JMS和更多现成的东西(基本上是JavaEE中的所有东西),而不需要通过WAR部署手动携带大量JAR文件
一旦在Tomcat中安装了JMS,或者迁移到普通的JavaEE服务器,那么您就可以按照(代码的教父)的“集群设计提示”部分中的说明进行操作。好的,我担心通过WebSocket无法实现跨应用程序通知。无论如何,谢谢你的详细解释。我要看看汤姆和杰姆斯。当然还有你的dokumentation。好吧,我担心通过WebSocket无法实现跨应用程序通知。无论如何,谢谢你的详细解释。我要看看汤姆和杰姆斯。当然还有你的演讲。
@ApplicationScoped
@Named
public class AppController implements Serializable
{
@Inject
@Push(channel = "test")
private PushContext pushContext;
public void sendMessage(String p_message)
{
pushContext.send(p_message);
}
...
...
...
}