我一直试图在多用户XPages应用程序中使用Java Observer和Observable,但是我遇到了身份冲突。我会解释。
说A和B在其屏幕上具有相同的视图,即带有“读者”字段的文档列表。我们希望使这些屏幕尽可能保持同步。如果A更改了某些内容,则B可能会收到更新,具体取决于他的权利和角色。我们使用WebSockets做到了这一点,但我想看看是否有更好的方法,即不向客户端发送消息告诉客户端重新获取屏幕。
使用观察者机制,B可以观察更改并将更改的屏幕推送给用户。这里最棘手的部分是,如果我以用户A的身份调用notifyObservers,并且遍历所有可观察对象,则A将执行Observer.update()
方法,而不是B。
我还考虑过使用类似Timer的解决方案,但最终可能会遇到相同的冲突。
问题:我可以任何方式在XPages中正确切换会话吗?还是应该在XPages服务器中等待发布/订阅?
答案 0 :(得分:1)
我可以看到3种可能的动作:
对于前两个,我想将它们打包到OSGi捆绑包中,以独立于从NSF加载的Java的特殊性
您的观察者需要在应用程序上下文中,因此您可以更新任何观察者。然后,观察者将使用一个websocket通知客户端:更新此ONE记录。 棘手的部分是需要计划:具有单独的WebSocket地址,因此您只通知需要通知的人