我有一个Flex / BlazeDS webapp(伪内容管理系统),在2个Weblogic 10.3服务器上运行Java后端,用于负载平衡和HA目的。
基本上,我正在使用AMF轮询更新我的应用程序,以便当用户从搜索结果中打开文档时,相应的行将在屏幕上当前具有该文档的所有用户显示中显示锁定图标。 / p>
我遇到的问题是,如果连接到服务器A的用户打开文档X,则锁定的图标将仅显示在连接到服务器A的其他用户的屏幕上。连接到服务器B的用户的显示将不会更新。是否有任何既定的范例或最佳实践来确保锁定的更新将在所有服务器上传播?
答案 0 :(得分:2)
我建议使用数据库锁定(您只需要一个布尔标志和一个干净的事务隔离)和一个分布式JMS主题,以便将锁定事件分派给所有其他用户。我不知道你是否以及如何使用BlazeDS做到这一点,但用GraniteDS设置这种架构很容易。
基本上,当用户请求文档时,事务性服务器端bean(比如EJB3)必须检查资源是否可用,将其锁定并将锁定事件发布到分布式JMS主题。由于主题是分布式的,因此将在所有WebLogic节点上分派消息,并且所有连接的用户(无论他们连接到哪个群集节点)都将通过长轮询消费者通知此事件。 GraniteDS对WebLogic异步servlet有很好的支持(参见GravityWebLogicServlet),它将为您的用户提供比简单轮询更多的实时体验,并且不会影响可伸缩性(异步servlet意味着用于这种设置)。
一些额外的资源:
即使您不希望也不能在项目中使用GraniteDS,我建议您考虑这个分布式JMS主题是您问题的最佳和最可靠的解决方案。
答案 1 :(得分:1)