Ответ 1
Возможно, вы решили проблему - но jnlp spec = "1.0+" - Элемент поддерживается только после jnlp spec 6.0+. Вероятно, это одна из причин неудачных обновлений.
Мы используем java Webstart для развертывания Java-приложения в нашей интрасети. Приложение получает частые обновления. Через некоторое время пользователь запустит приложение со своего значка на рабочем столе после того, как мы обновим JAR/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="#" onclick="location.href='http://java.sun.com/products/autodl/j2se'; return false;" 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 spec = "1.0+" - Элемент поддерживается только после jnlp spec 6.0+. Вероятно, это одна из причин неудачных обновлений.
Предполагая, что клиентские JRE обновлены, вы можете попробовать <update check="timeout" policy="always"/>
, как предложено в этом thread и описано в документация синтаксиса 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 в более чем дюжине стран, и когда мы обнаружили, что приложение не обновлялось правильно, это было для пропущенной конфигурации сети графства или в сетевых настройках пользовательского компьютера, в основном прокси. В наших центральных чиновниках в Испании Java-сеть всегда работает нормально.
Я использую клон nextx.jar java webstart. Я проследил, что не обновляю проблему JAR с использованием метода URLConnection.getLastUpdated(). Поскольку он использует метод HEAD, чтобы получить lastUpdated из имени файла, это причина, по которой иногда он не загружается из-за кэширования getLastUpdated(). Мы решили использовать наш собственный метод обновления нашего приложения, поскольку веб-сайт имеет недостатки.
У меня была эта проблема только потому, что я не позволял приложению открывать время, достаточное для завершения обновления.
Если у вас есть эта опция: update check = "background" в JNLP, подождите некоторое время, прежде чем закрыть приложение, чтобы разрешить завершение обновления (работающего на фоне).