向Tomcat上的几个JSF应用程序发送Websocket推送通知

向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

我有两个JSF应用程序在Tomcat上运行

  • localhost:8080/app1/index.xhtml
  • localhost:8080/app2/index.xhtml
在这两个索引文件中,相同的f:websocket标记放置在表单部分

<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);
    }

    ...
    ...
    ...

}