12

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

这是我们的 JNLP 的粘贴,如您所见,启用了离线允许,但始终更新检查和策略。此外,下载标志是急切的。据我了解,这些选项应始终导致检查服务器上的时间戳和 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>
4

8 回答 8

5

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

于 2011-01-14T16:47:16.693 回答
1

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

于 2010-01-27T20:06:56.637 回答
1

我遇到了与您相同的问题,并通过执行以下操作解决了它:

  1. 改变

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

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

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

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

我知道这是一个丑陋的解决方案,但它每次都对我们有用。

于 2010-11-29T15:46:47.833 回答
1

可能与这篇文章有关,http://www.coderanch.com/t/528570/JNLP-Web-Start/java/Do-jnlp-file-updates-itself

于 2011-07-14T03:03:04.047 回答
1

这个问题是由offline-allowed标签引起的。

根据 JNLP 规范

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

于 2013-02-22T02:02:55.120 回答
0

我们已经在十几个国家分发了 java web start 应用程序,当我们发现应用程序没有正确更新时,这是因为县网配置错误,或者用户计算机的网络设置,主要是代理。在我们在西班牙的中央办事处,java web start 总是可以正常工作。

于 2010-01-27T16:50:32.570 回答
0

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

于 2014-09-01T04:52:07.303 回答
0

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

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

于 2015-02-05T00:40:14.763 回答