2010-01-27 43 views
12

我們使用java Webstart在我們的Intranet上部署Java應用程序。應用程序會收到頻繁更新。稍後,用戶將在更新Web服務器上的JAR/WAR(時間戳已更改)後啓動桌面圖標,並且Java Webstart將啓動舊版本而不是下載新版本。Java Webstart intermittant JAR不更新

下面是我們的JNLP的粘貼,您可以看到offline-allowed已啓用,但始終會更新總是檢查和策略。另外,下載標誌是渴望的。根據我的理解,這些選項總是會導致檢查緩存與服務器上的時間戳和JAR文件的下載。

我開始對Webstart感到沮喪!有沒有人見過類似的問題?任何解決方案我厭倦了通過每三分之一或五分鐘更新手動清除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> 

回答

5

你可能已經解決了這個問題 - 但jnlp spec =「1.0+」 - 只有在jnlp spec 6.0+之後才支持該元素。可能多數民衆贊成是你的更新失敗的原因之一。

0

我們已經在十幾個國家的分佈式Java Web Start應用,當我們發現,該應用程序不正確更新它是縣城網的誤配置,或在用戶的網絡設置電腦,主要是代理。在我們的西班牙java網站的中央官方網站上,開始總是可以正常工作。

+0

嗨Telcontar,是的,但是沒有配置上的變化,它可以間歇地工作..所以它不太可能出現網絡問題,除非它與代理緩存有關,但是當刪除webstart緩存時它不能解決問題。 – 2010-01-27 19:57:18

1

假設客戶端JRE是最新的,您可以嘗試<update check="timeout" policy="always"/>,如thread中所述,並在JNLP syntax文檔中進行了描述。

+0

@trashgod,你會發現我已經在代碼中有。 – 2010-01-27 20:49:55

+0

是的,但問題的間歇性並不排除Telcontar的假設。我不禁想知道「超時」甚至是「背景」是否可以讓更新成功。我還記得在切換到新證書時必須觸摸.jnlp文件本身。 – trashgod 2010-01-27 21:28:58

1

我有同樣的問題,因爲你的,解決它通過執行以下操作:

  1. 變化

    <jar href="OurUpdatedJarName.jar" ...

    <jar href="OurUpdatedJarName-$VERSION.jar" ...

  2. 認沽$ VERSION進入<a href="foo-$VERSION.jnlp">Run</a>

我們爲每個部署自動更新$ VERSION。

我知道這是一個醜陋的解決方案,但它是一個適用於我們的方法。

+0

這看起來像你沒有使用更多的標準(根據規範)... __V {version} .jar和使用JWS versionEnabled標誌? – Joel 2016-07-26 17:43:28

1

這個問題是由offline-allowed標籤引起的。

Per JNLP spec

如果指定離線允許的,Java Web Start的還會檢查,看是否有可用的更新。但是,如果應用程序已經下載,檢查將在幾秒鐘後超時,在這種情況下,緩存的應用程序將被啓動。鑑於服務器連接速度相當快,通常會運行最新版本的應用程序,但不保證。但是,該應用程序可以脫機運行。

0

我一直在使用java webstart的nextx.jar克隆。我將我的非更新JAR問題追溯到使用URLConnection.getLastUpdated()方法。由於它使用HEAD方法獲取文件名的lastUpdated,這就是爲什麼有時由於getLastUpdated()的緩存而無法下載的原因。我們決定使用我們自己的方法刷新我們的應用程序,因爲webstart存在缺陷。

0

我有這個問題只是因爲我沒有讓應用程序打開足夠的時間來完成更新。

如果您有此選項:在您的JNLP中更新check =「background」,請等待一段時間再關閉應用程序以允許更新(即在後臺運行)完成。