Java Web Start间歇性JAR未更新

时间:2010-01-27 16:14:13

标签: java jar java-web-start jnlp

我们使用java Webstart在我们的Intranet上部署java应用程序。该应用程序接收频繁更新。在我们更新了Web服务器上的JAR / WAR(更改了时间戳)后,用户将在一段时间内从桌面图标启动应用程序,Java Webstart将启动旧版本而不是下载新版本。

这是我们的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>

8 个答案:

答案 0 :(得分:5)

你可能已经解决了这个问题 - 但是jnlp spec =“1.0+” - 只有在jnlp spec 6.0+之后才支持该元素。可能那是你更新失败的原因之一。

答案 1 :(得分:1)

假设客户端JRE是最新的,您可以按照此thread中的建议尝试<update check="timeout" policy="always"/>,并在JNLP syntax文档中进行说明。

答案 2 :(得分:1)

我遇到了与你相同的问题,并通过以下方式解决了这个问题:

  1. 更改

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

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

  2. 将$ VERSION放入<a href="foo-$VERSION.jnlp">Run</a>

  3. 我们会为每次部署自动更新$ VERSION。

    我知道这是一个丑陋的解决方案,但每次都适合我们。

答案 3 :(得分:1)

答案 4 :(得分:1)

此问题是由offline-allowed代码引起的。

Per JNLP spec

如果指定了offline-allowed,Java Web Start还将检查是否有可用的更新。但是,如果已经下载了应用程序,则检查将在几秒钟后超时,在这种情况下,将启动缓存的应用程序。鉴于服务器连接速度相当快,通常会运行最新版本的应用程序,但不保证。但是,该应用程序可以脱机运行。

答案 5 :(得分:0)

我们已经在十几个国家/地区分发了java Web启动应用程序,当我们发现应用程序未正确更新时,它是针对县网络的错误配置,或者是用户计算机的网络设置,主要是代理。在我们在西班牙的中心主页java网站开始总是工作正常。

答案 6 :(得分:0)

我一直在使用java webstart nextx.jar克隆。我跟踪我没有更新JAR问题到使用URLConnection.getLastUpdated()方法。由于它使用HEAD方法来获取文件名的lastUpdated,因此有时它因为缓存getLastUpdated()而无法下载。我们决定使用我们自己的刷新应用程序的方法,因为webstart存在缺陷。

答案 7 :(得分:0)

我遇到这个问题只是因为我没有让应用程序打开时间来完成更新。

如果您在JNLP中有此选项: update check =“background”,请在关闭应用程序之前等待一段时间,以便允许更新(在后台运行)完成。