Общим ответом на проблемы устаревания данных на клиенте является опрос или отправка сервером ( Comet ), в зависимости от того, насколько важно иметь актуальную информацию.
При опросе ваш клиент отправляет запрос на получение свежей информации каждые N минут и показывает обновленные данные в пользовательском интерфейсе (желательно не перезагружать весь пользовательский интерфейс, только части, которые были обновлены).
При нажатии сервера ваш клиент имеет постоянное открытое соединение с сервером, переподключается, как только время соединения истекает, и всякий раз, когда у сервера появляются новые данные, чтобы сообщить клиенту, это происходит немедленно. Преимущество этого заключается в меньшей утомляемости клиента, но большей общей нагрузке из-за выполнения всех этих постоянных подключений.
Блокировка затруднена, потому что она требует большой координации между всеми сторонами. Сервер должен сообщить второму клиенту, чтобы он запросил модель, которая заблокирована, а затем еще раз, когда она разблокирована, и клиент должен знать, хочет ли он вообще внести изменения (что, если пользователь-А сделал такое же изменение user-B хотел сделать?). В целом, поддержание всех клиентов в актуальном состоянии и на разумных условиях - лучший ответ.
Для работы с вашим примером после того, как пользователь A обновит модель, сервер публикует информацию для всех, кому небезразлично изменение модели, а клиент пользователя B соответственно обновляется. То же самое, когда пользователь B обновляет модель, пользователь A может сказать это сразу (или после того, как его клиент снова опросит).
Проект rocket-gwt включает поддержку Comet, и я слышал об этом много хорошего, хотя сам никогда не пробовал.
Аналогичный параметр, хотя и не используемый сразу, это HTML5 WebSockets , который устраняет необходимость постоянного подключения к серверу, открывая специальный прямой «канал» между сервером и клиентом. К сожалению, в настоящее время WebSockets поддерживаются только в небольшом наборе браузеров. Надеюсь, что по мере роста усыновления это будет лучшим вариантом. При этом, если вы хотите использовать WebSockets в GWT, я написал некоторый код , чтобы сделать это (бесстыдная самореклама)