Java Webstart прерывистый JAR, не обновляемый
-
23-09-2019 - |
Вопрос
Мы используем java Webstart для развертывания java-приложения в нашей интрасети.Приложение получает частые обновления.Время от времени пользователь запускает приложение со своего значка на рабочем столе после того, как мы обновили JARs / WAR на веб-сервере (временная метка изменена), и Java Webstart запускает старую версию вместо загрузки новой.
Вот вставка нашего JNLP, как вы можете видеть, разрешено в автономном режиме, но проверка обновлений всегда и политика всегда.Кроме того, флаг загрузки горит желанием.Насколько я понимаю, эти параметры всегда должны приводить к проверке кэша по временной метке на сервере и загрузке файла JAR.
Я начинаю разочаровываться в Webstart!Кто-нибудь видел похожие проблемы?Есть какие-нибудь решения?Мне надоело заставлять людей вручную очищать кэш веб-запуска при каждом третьем или пятом обновлении.
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE jnlp PUBLIC "-//Sun Microsystems, Inc//DTD JNLP Descriptor 6.0//EN" "http://java.sun.com/dtd/JNLP-6.0.dtd">
<jnlp spec="1.0+" codebase="$$codebase" href="$$name">
<information>
<title>TITLE</title>
<vendor>VENDOR</vendor>
<description>Our Utility Application</description>
<description kind="short">Our Utility Application PRD</description>
<icon href="images/util_icon.png" height="64" width="64"/>
<offline-allowed/>
<shortcut online="true">
<desktop />
<menu submenu="Utility Apps"/>
</shortcut>
</information>
<security>
<all-permissions />
</security>
<update check="always" policy="always" />
<resources>
<!-- requires 1.6+ -->
<j2se version="1.6+" href="http://java.sun.com/products/autodl/j2se" java-vm-args="-ea" initial-heap-size="128m" max-heap-size="512m" />
<!-- application code, download jar before we start. -->
<jar href="OurUpdatedJarName.jar" main="true" download="eager" />
<property name="configfile" value="updatedJarName.config" />
</resources>
<application-desc main-class="main.Client">
<argument>-D</argument>
</application-desc>
</jnlp>
Решение
Возможно, вы решили проблему, но спецификация jnlp = "1.0+" - элемент поддерживается только после спецификации jnlp 6.0+.Вероятно, это одна из причин сбоя ваших обновлений.
Другие советы
Предполагая, что клиентские JRE обновлены, вы могли бы попробовать <update check="timeout" policy="always"/>
как предложено в этом Нитки и описанный в Синтаксис JNLP Документация.
У меня были те же проблемы, что и у вас, и я решил их, выполнив следующее:
Изменение
<jar href="OurUpdatedJarName.jar" ...
Для
<jar href="OurUpdatedJarName-$VERSION.jar" ...
Поместите $VERSION в
<a href="foo-$VERSION.jnlp">Run</a>
Мы автоматически обновляем $VERSION для каждого развертывания.
Я знаю, что это уродливое решение, но оно работает для нас каждый раз.
Может быть связано с этим постом, http://www.coderanch.com/t/528570/JNLP-Web-Start/java/Do-jnlp-file-updates-itself
эта проблема вызвана offline-allowed
пометка.
Если указано разрешение автономного режима, Java Web Start также проверит, доступно ли обновление.Однако, если приложение уже загружено, проверка завершится через несколько секунд, и в этом случае вместо нее будет запущено кэшированное приложение.Учитывая достаточно быстрое подключение к серверу, обычно запускается последняя версия приложения, но это не гарантируется.Приложение, однако, может быть запущено в автономном режиме.
мы распространили приложения Java web start более чем в дюжине стран, и когда мы обнаружили, что приложение обновлялось некорректно, это было из-за неправильной настройки сети округа или сетевых настроек компьютера пользователя, в основном прокси.В наших центральных офисах в Испании java web start всегда работает нормально.
Я использовал java webstart nextx.jar клонировать.Я проследил, что моя проблема с необновлением JAR связана с использованием метода URLConnection.getLastUpdated().Поскольку он использует метод HEAD для получения lastUpdated имени файла, это причина, по которой иногда он не загружается из-за кэширования getLastUpdated().Мы решили использовать наш собственный метод обновления нашего приложения, поскольку webstart имеет недостатки.
У меня возникла эта проблема только потому, что я не предоставил приложению достаточно времени для завершения обновления.
Если у вас есть такая возможность: проверка обновления ="фон" в вашем JNLP подождите некоторое время, прежде чем закрывать приложение, чтобы разрешить завершение обновления (которое выполняется в фоновом режиме).