2013-08-26 69 views
1

我有一個基於jws的應用程序。
它被部署在Web服務器上,客戶端從瀏覽器下載文件並運行它。
這會創建一個桌面快捷方式,並且應用程序運行完美。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> 

變化Java的虛擬機ARGS沒有得到體現。
如果我重新下載jnlp文件,然後從中運行,則更新會起作用。在這種情況下,桌面快捷方式仍舊指一個這是一種痛苦:(

恪使用JaNeLa的JNLP

編輯:

這demo.jnlp還包括另一特徵JNLP(在加入因爲在應用程序的每次更新中,此功能jnlp也會得到更新,但是客戶端上並未反映出相同的結果。

回答

2

JWS一直擅長更新Jars,但當自己更新JNLP文件時,無需動態生成JNLP顯然缺少href屬性來指示插件而不是來創建桌面快捷方式。

另一方面,可能在IntegrationService of the JNLP API中找到解決辦法。您可能會:

  1. 緩存PersistenceService中最後一個已知JNLP的副本。
  2. 在應用程序。啓動,連接回服務器並明確讀取JNLP。
  3. 將其與緩存版本進行比較。
  4. 如果更改,請卸載桌面快捷方式&重新啓動應用程序。
  5. 如果沒有更改,並沒有桌面快捷方式存在,提示安裝(新)桌面快捷方式。

步驟2 & 3可能會被標頭的JNLP的URL連接的簡單檢查來代替,如果服務器返回一個有效的「最後更新的時間。

+0

jnlp文件本身沒有任何內容會自動更新?我有一個動態生成的jnlp,它包含在上面的demo.jnlp(檢查編輯)。所以每當我的應用程序得到更新時,我的新版本(使用eclipse)將生成一個新的jnlp文件,該文件包含在demo.jnlp中。客戶端再次沒有得到任何更新。我的運輸應用程序的機制是否正確(一個jnlp引用另一個動態生成的jnlp)? – holmes840