XPages:观察者和可观察者

问题描述 投票:2回答:1

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

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

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

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

问题:是否有any种方法可以正确切换XPages中的会话?还是应该在XPages服务器中等待发布/订阅?

java xpages
1个回答
0
投票

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

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

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

旧答案

您的观察者需要处于应用程序上下文中,因此您可以更新任何观察者。然后,观察者将使用Websocket向客户端进行告知:更新此ONE记录。棘手的部分,需要计划:具有单独的Websocket地址,因此您只通知需要通知的人]

© www.soinside.com 2019 - 2024. All rights reserved.