Я бы порекомендовал также использовать блокировку базы данных (вам нужен только логический флаг и чистую изоляцию транзакций) и распределенную тему JMS, чтобы отправлять событие блокировки всем другим пользователям. Я не знаю, если и как вы можете сделать это с BlazeDS, но было бы легко настроить такую архитектуру с GraniteDS .
Обычно, когда пользователь запрашивает документ, транзакционный компонент на стороне сервера (скажем, EJB3) должен проверить, доступен ли ресурс, заблокировать его и опубликовать событие блокировки в распределенной теме JMS. Поскольку тема распределена, сообщение будет отправлено по всем вашим узлам WebLogic, и все подключенные пользователи, независимо от того, к какому кластерному узлу они подключены, будут проинформированы об этом событии через пользователей с длительным опросом. GraniteDS имеет хорошую поддержку асинхронных сервлетов WebLogic (см. GravityWebLogicServlet ) и предоставит вашим пользователям намного больше опыта в реальном времени , чем при простом опросе, и без ущерба для масштабируемости (асинхронные сервлеты предназначен для использования в такого рода настройках).
Некоторые дополнительные ресурсы:
- Обмен сообщениями в реальном времени Документация для GraniteDS.
- Короткое видео о кластеризации GraniteDS, функциях HA и обмена сообщениями в реальном времени (хотя с JBoss и базовым приложением чата).
Даже если вы не хотите или не можете использовать GraniteDS в своем проекте, я рекомендую рассмотреть эту распределенную тему JMS как лучшее и наиболее надежное решение вашей проблемы.