Приложение GWT зависает при развертывании новой версии при его использовании - PullRequest
0 голосов
/ 30 декабря 2011

При использовании приложения GWT я развернул новую версию приложения. После завершения развертывания мое приложение останавливается до полного обновления. Первоначально я думал, что это проблема кэширования, поэтому я назначил все файлы без кэширования, установив все заголовки ответа с помощью фильтра. Но все же с этим фильтром приложение зависает при развертывании новой версии.

Что может быть причиной этого?

То, чего я пытаюсь достичь здесь, - это возможность развернуть новую версию приложения GWT, пока пользователь использует приложение. Это означает, что когда JavaScript изменяется, я хочу, чтобы пользователь получил его с сервера вместо использования кэшированного без сбоев (возможно, медленное время отклика, так как в этом случае запрос должен идти на сервер).

Примечание: Это наблюдается при развертывании с изменениями в коде, поэтому я угадывая один из файлов cache.js. При развертывании без каких-либо изменений в коде это не наблюдается.

Ответы [ 3 ]

2 голосов
/ 04 января 2012

Ваш вопрос неясен, потому что он не сообщает, в какой ситуации вы находитесь:

  1. Вы развертываете новое приложение GWT и хотите, чтобы новая сторона сервера отвечала на старуюна стороне клиента.

  2. Вы развернули новое приложение GWT и хотите, чтобы браузер клиента немедленно заменил клиента GWT новой версией.

Сначала я хотел бы поговорить о ситуации 2.Я думаю, вы пришли из семейства сервлетов и JSP, а также динамически генерируемых HTML и Javascript.В этих условиях клиент немедленно заменяется каждый раз, когда ваш клиент размещает запросы к серверу.Это связано с тем, что пользовательский интерфейс клиента обновляется новым ответом, генерируемым сервером.

В GWT корневая панель не обновляется.Корневая панель удерживается html-страницей хостинга.Если html-страница хостинга не обновляется, GWT-клиент навсегда останется старой версией.Это сама идея AJAX и GWT.Вам не нужно обновлять веб-страницу, но при этом разрешать веб-странице непрерывно отправлять / получать асинхронные запросы / ответы.

Возможно, вам напомнили, что GWT скомпилирован в javascript.

Чтобы получить новую версию, вы должны обновить веб-страницу.В технологии GWT нет способа, чтобы новый javascript мог проникнуть в браузер, чтобы заменить старые наборы javascript, если вы не обновите страницу.

Ссылка на источник тега сценария уже читается при загрузке javascript-кодов GWT,Эти ссылки не будут перечитаны, пока вы не обновите страницу.Если эти ссылки не будут перечитаны, новые javascript-коды никогда не будут перезагружены.

При работе с AJAX вам необходимо отключить JSP / сервлет.

Вернуться к ситуации 1 ..

Поскольку новая версия пользовательского интерфейса GWT не была загружена, поскольку вы не выполняли обновление, у вас могут возникнуть несоответствия между структурой данных, ожидаемой старой версией пользовательского интерфейса, и структурой новой версии на стороне сервера.Если вы можете гарантировать стабильность структуры данных RPC или клиент-сервер и последовательности обмена, я полагаю, что у вас не должно быть проблем.

Однако с GAE идентификатор сериализации важен.Возможно, вы изменили структуру данных POJO без обновления идентификатора сериализации.Это могло бы сбить с толку трафик клиент-сервер GAE, потому что ... хммм ... Я могу слегка вспомнить точную последовательность проблем, с которыми я столкнулся - вам лучше прочитать идентификатор сериализации GAE pojo самостоятельно.

1 голос
/ 30 декабря 2011

У меня тоже была такая проблема.В таком случае у вас должна быть одна таблица, в которой хранится каждая новая информация о загрузке.А также у вас должен быть один асинхронный запрос (возможно, в вашей EntryPoint) для проверки, есть ли у вас новая загрузка или нет.

 public void success(String version) {
    if(!Cookies.getCookie("version").equals(version)){
         Window.open(currentUrl, "_self", "");
    }
 }

Это то, что я сделал и работаю без проблем ...

1 голос
/ 30 декабря 2011

Проблема связана с вашим веб-сервером, а не с самим GWT.Вы должны увидеть, поддерживает ли ваш веб-сервер горячее развертывание или как он работает с ним.

ОБНОВЛЕНИЕ: Например Tomcat до версии 7 не поддерживает Горячее развертывание , и вы должны перезапускать сервер при каждом обновлении, тогда как Tomcat 7 поддерживает Горячее развертывание , и вам нужно только перезагрузить страницу, чтобы получитьновый модуль .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...