【发布时间】:2019-10-16 08:57:10
【问题描述】:
我想在我们的 XPages 应用程序中使用发布/订阅,在 Java 中,例如与绝地武士。该应用程序在多用户设置中运行,当一个用户对文档进行一些更改时,我们希望看到这些更改反映在其他用户的屏幕上。理论上可以使用 PubSub 完成:当应用更改时,会发布“文档修改”消息并将其发送给订阅此消息的一方或多方。订阅者部分我想放在一个线程中,以便订阅的对象在收到消息时可以立即做出反应。
大多数使用 subscribe 的对象的作用域是 viewscope,当 viewscope 被销毁时它们应该被销毁。但是当对象被放弃并且订阅者线程仍然存在时会发生什么?例如,我如何告诉 JVM 线程可以被垃圾收集器安全地停止和报废?
我还没有尝试过,所以我没有可以显示的代码,但我有以下问题:
- 我说得对,即使 viewscope 被销毁,线程还会继续运行吗?
- 有没有办法创建垃圾回收线程?
- 或者也许:是否有一些 API 可以在多线程 XPages 环境中执行 PubSub?
【问题讨论】:
-
关于线程这可能值得在开始之前阅读:How to run a background task in a servlet based web application?
-
在 JSF 2.3 中,可以使用 websockets 将来自服务器的更新推送到客户端,但我不知道这如何适合我不熟悉的 XPages。见How can server push asynchronous changes to a HTML page created by JSF?
-
不是servlet,也不是server-client,而是server-server。 XPages 基于 JSF,尽管不是最新版本。我想通知正在运行的系统的其他部分,他们应该知道特定文档已被更改,因此他们可以相应地调整他们的行为。我已经将 Jedis 用于 Websockets,但我想在内部使用类似的东西。
标签: multithreading jsf xpages