XPages:观察者和可观察者

时间:2020-02-24 15:38:38

标签: java xpages

我一直试图在多用户XPages应用程序中使用Java Observer和Observable,但是我遇到了身份冲突。我会解释。

说A和B在其屏幕上具有相同的视图,即带有“读者”字段的文档列表。我们希望使这些屏幕尽可能保持同步。如果A更改了某些内容,则B可能会收到更新,具体取决于他的权利和角色。我们使用WebSockets做到了这一点,但我想看看是否有更好的方法,即不向客户端发送消息告诉客户端重新获取屏幕。

使用观察者机制,B可以观察更改并将更改的屏幕推送给用户。这里最棘手的部分是,如果我以用户A的身份调用notifyObservers,并且遍历所有可观察对象,则A将执行Observer.update()方法,而不是B。

我还考虑过使用类似Timer的解决方案,但最终可能会遇到相同的冲突。

问题:我可以任何方式在XPages中正确切换会话吗?还是应该在XPages服务器中等待发布/订阅?

1 个答案:

答案 0 :(得分:1)

我可以看到3种可能的动作:

  • 使用XPages-Scaffolding中的SudoUtils来代表运行代码
  • 使用DominoJNA来访问具有不同用户ID的数据(不是胆小的人)
  • 只需使用websocket通知客户-最好通过webworker。然后,将进行提取(艺术家以前称为Ajax)以查看客户端UI中是否需要更改。尽管这样做的缺点是会产生网络中断(websocket + fetch),但它的优点是您无需弄乱模拟,而总是冒着出错的风险。

对于前两个,我想将它们打包到OSGi捆绑包中,以独立于从NSF加载的Java的特殊性

旧答案

您的观察者需要在应用程序上下文中,因此您可以更新任何观察者。然后,观察者将使用一个websocket通知客户端:更新此ONE记录。 棘手的部分是需要计划:具有单独的WebSocket地址,因此您只通知需要通知的人