Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/jsf/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Multithreading XPages:用线程实现javapubsub订阅_Multithreading_Jsf_Xpages - Fatal编程技术网

Multithreading XPages:用线程实现javapubsub订阅

Multithreading XPages:用线程实现javapubsub订阅,multithreading,jsf,xpages,Multithreading,Jsf,Xpages,我想在我们的XPages应用程序中使用Publish/Subscribe,使用Java,例如Jedis。应用程序在多用户设置中运行,当一个用户对文档进行一些更改时,我们希望看到这些更改反映在其他用户的屏幕上。理论上,这可以通过PubSub实现:应用更改时,会发布一条“文档修改”消息,并发送给订阅此消息的一方或多方。我想把订户部分放在一个线程中,以便订阅的对象可以在收到消息时立即作出反应 大多数使用subscribe的对象的作用域是viewscope,当viewscope被销毁时,它们应该被销毁。

我想在我们的XPages应用程序中使用Publish/Subscribe,使用Java,例如Jedis。应用程序在多用户设置中运行,当一个用户对文档进行一些更改时,我们希望看到这些更改反映在其他用户的屏幕上。理论上,这可以通过PubSub实现:应用更改时,会发布一条“文档修改”消息,并发送给订阅此消息的一方或多方。我想把订户部分放在一个线程中,以便订阅的对象可以在收到消息时立即作出反应

大多数使用subscribe的对象的作用域是viewscope,当viewscope被销毁时,它们应该被销毁。但是当对象被放弃而订户线程仍然存在时会发生什么呢?例如,我如何告诉JVM线程可以被垃圾收集器安全地停止和废弃

我还没有尝试过这个,所以我没有可以展示的代码,但我有以下问题:

  • 我说的对吗?即使viewscope被破坏,线程还会继续运行吗
  • 有没有办法创建一个垃圾回收线程
  • 或者:在多线程XPages环境中是否有一些API可以实现PubSub

    • 几年前我做过类似的事情。你可以在这里找到一个芭乐酒吧/酒吧的例子:

      我不确定您对订阅线程的计划 分别对你的想法有什么好处

      但要回答你的问题: 是的,线程将继续运行,直到您停止它。您应该使用ExecutorService,因为它对您的管理有很大帮助。如果您想将其“自动”删除,只需执行“关机”,然后处理剩余的所有作业并停止线程池


      如果您需要一个服务器范围的发布/订阅系统,可以考虑一个OSGi插件,它可以通过DominoHTTP任务自动启动/停止。这个插件的所有对象都可以被任何应用程序使用。

      关于线程,在开始之前,这可能值得一读:在JSF 2.3中,可以使用WebSocket将服务器的更新推送到客户端,但我不知道这如何适合我不熟悉的XPages。请参阅的不是servlet,也不是服务器客户端,而是服务器。XPages基于JSF,尽管不是最新版本。我想通知正在运行的系统的其他部分,他们应该知道一个特定的文档已经更改,这样他们就可以相应地调整自己的行为。我已经在WebSocket中使用了绝地,但我想在内部使用类似的东西。我已经在PubSub中使用绝地,主要用于服务器-客户端(浏览器)通信。不启动线程就可以订阅消息吗?这可以在不丢失NotesContext的情况下完成吗?@D.Bugger:在创建自己的线程时,您将丢失NotesContext。但是为什么Pub/Sub需要它呢?现在尝试不创建线程,但它有点挂起HTTP任务。绝地武士不是线程安全的,所以这可能是我的问题。我想使用PubSub,因为一个用户可以更改文档,文档是工作流应用程序的一部分,而另一个用户可能需要在屏幕上显示该信息。我想在系统范围内发送一条消息,说明文档已更改,以便其他部分可以做出反应,即使它们位于其他用户的viewscope或sessionscope中。@D.Bugger:查看JedisPool,它是线程安全的。对于用户X已更改文档Y的“消息”,您不需要NotesContext。这是一个简单的POJO.java.lang.NoClassDefFoundError:org.apache.commons.pool2.PooledObjectFactory