Почему Java Web Start загружает баночки из JBoss?
Мы только что обнаружили, что каждый раз, когда мы перезапускаем JBoss, все наши клиенты Java Web Start повторно загружают все свои банки вместо повторного использования кэшированных банок, даже если наше приложение не изменилось.
Из того, что я видел в Интернете, Java Web Start выполняет HTTP HEAD, чтобы решить, стоит ли загружать банку. Поэтому я запускал HTTP HEAD на всех баночках нашего приложения и обнаружил, что после перезапуска JBoss измененное время всех банок изменилось!
Почему это и как я могу это исправить? Банки внутри моих архивов приложений не изменились вообще. Насколько я могу судить, JBoss использует время запуска или время развертывания в качестве измененного времени. Это полностью отключит возможность Java Web Start использовать кешированные банки из предыдущих прогонов, если я правильно понимаю.
Мы используем JBoss 6, если это проблема. Раньше мы использовали JBoss 4. Я хочу проверить, была ли у нас проблема с JBoss 4, но теперь у нас так много зависимостей от нового JBoss, что для выполнения этого теста потребуется какая-то работа.
Ответы
Ответ 1
Попробуйте развернуть приложение в виде вложенного веб-приложения вместо файла WAR.
Это помешало бы JBoss выполнить распаковку приложения и потенциально испортить даты модификации.
Вам придется обрабатывать обновления для вашего приложения таким образом, чтобы сохранить даты модификации, например rsync, но это может быть проще, чем понизить или исправить JBoss.
Ответ 2
Похоже, что VFSUtils
не поддерживает lastModifiedDate
файла, когда он монтирует файловую систему в каталог tmp при запуске сервера. Вы можете исправить методы копирования в этом классе, чтобы попытаться установить временную метку нового файла на основе значений из физического файла.
Как ответ на комментарий chubbard: проблема не возникает с Tomcat (точнее, tomcat 7.0.21).
Ответ 3
Существует проблема (https://issues.jboss.org/browse/JBVFS-177), созданная о VFSUtils.unzip(), которая не сохраняет метки времени при развертывании (все еще применимы к JBoss 6.1).
Поскольку проблема связана с методом unzip, решение blahdiblah действительно может работать.
Другим способом будет использование Java Web Start с основанной версией (модификация jnlp с версией versioned и создание версии .xml).