2013-08-26 2 views
1

У меня есть приложение на основе jws.
Развертывается на веб-сервере, и клиент загружает файл из браузера и запускает его.
Это создает ярлык рабочего стола, и приложения работают отлично.Проблема с автоматическим обновлением файла JNLP

Теперь, если я изменить некоторые Свойства в файле JNLP на сервере, а затем запустить установленное приложение (на клиентской машине) с ярлыка на рабочем столе или из загруженного JNLP самого файла, не обновляется.

Я проверял это на версии jdk 1_6_30 и 1_7_21. Кажется, что эти два выпуска разрешили предыдущие bug, связанные с пробелами в пути кэш-памяти.
Проблема остается в Windows XP/7/8.

Исходный файл JNLP:

<?xml version="1.0" encoding="UTF-8"?> 
<jnlp codebase="path/to/fileLocation" spec="1.0+" href="demo.jnlp" > 

<information> 
. 
. 
. 
<offline-allowed/> 
    <shortcut online="false"> 
      <desktop/> 
      <menu submenu="Demo"/> 
    </shortcut> 
</information> 
<update check="always" policy="always"/> 
<!--request all permissions from the application. This does not change--> 
<security> 
    <all-permissions/> 
</security> 
. 
. 
<resources> 
<!-- Here we are referring to the wrapper feature since it transitively refers to all the other plug-ins necessary --> 
<extension> 
    name="Wrapper feature" 
    href="plugin_<some_random_generated_string_1>.jnlp"/> 
</extension> 
</resources> 
. 
. 
. 
<resources os="Windows" arch="x86"> 
     <j2se version="1.6+" java-vm-args="-Xms400m -Xmx800m"/> 
</resources> 

Обновлено JNLP файл:

<?xml version="1.0" encoding="UTF-8"?> 
<jnlp codebase="path/to/fileLocation" spec="1.0+" href="demo.jnlp" > 

<information> 
. 
. 
. 
<offline-allowed/> 
    <shortcut online="false"> 
      <desktop/> 
      <menu submenu="Demo"/> 
    </shortcut> 
</information> 
<update check="always" policy="always"/> 
<!--request all permissions from the application. This does not change--> 
<security> 
    <all-permissions/> 
</security> 
. 
. 
<resources> 
<!-- Here we are referring to the wrapper feature since it transitively refers to all the other plug-ins necessary --> 
<extension> 
    name="Wrapper feature" 
    href="plugin_<some_random_generated_string_2>.jnlp"/> 
</extension> 
</resources> 
. 
. 
<resources os="Windows" arch="x86"> 
      <j2se version="1.6+" java-vm-args="-Xms300m -Xmx600m"/> 
</resources> 

Изменение в ява-VM-арг не получает отражение.
Обновление работает, если я повторно загружаю файл jnlp, а затем запускаю его. В этом случае на рабочем столе ярлык еще относится к старой, которая является боль :(

проконтролировала JNLP с помощью Джанеле

EDIT:.

Это demo.jnlp также включает в себя еще одну функцию JNLP (добавлено в blockquotes), который включает в себя все необходимые банки для приложения. Так как при каждом обновлении приложения эта функция jnlp также обновляется, но то же самое не отражается на клиенте.

ответ

2

JWS всегда хорошо обновлял Jars, но ..так, поэтому при обновлении самих файлов JNLP. Динамически сгенерированный JNLP будет pically не хватает атрибута href, чтобы указать плагину не, чтобы создать ярлык на рабочем столе.

С другой стороны, обход можно найти в IntegrationService of the JNLP API. Вы могли бы:

  1. Прикрепите копию последнего известного JNLP в PersistenceService.
  2. В приложении. запуск, подключение к серверу и прямое чтение JNLP.
  3. Сравните это с кешированной версией.
  4. Если вы изменили, удалите ярлык рабочего стола &, перезапустите приложение.
  5. Если не изменено, и нет ярлыка на рабочем столе, запрос на установку (новый) ярлыка на рабочем столе.

Шаги 2 & 3 может быть заменена простой проверки заголовков для подключения URL для JNLP, если сервер возвращает действительный «последнее обновление» время.

+0

Ничего в самом файле jnlp не обновляется автоматически? У меня есть динамически созданный jnlp, который включен в вышеупомянутый demo.jnlp (проверьте EDIT). Поэтому всякий раз, когда мое приложение обновляется, моя новая сборка (с использованием eclipse) генерирует новый файл jnlp, который включен в demo.jnlp. Клиент снова не получает никакого обновления. Является ли мой механизм корректной доставки приложения (jnlp ссылается на другой динамически генерируемый jnlp)? – holmes840