Java Webstart 间歇性 JAR 不更新
-
23-09-2019 - |
题
我们使用 java Webstart 在我们的 Intranet 上部署 java 应用程序。该应用程序经常收到更新。有时,在我们更新 Web 服务器上的 JAR/WAR(时间戳已更改)后,用户会从桌面图标启动应用程序,并且 Java Webstart 将启动旧版本而不是下载新版本。
这是我们的 JNLP 的粘贴,您可以看到脱机允许已打开,但始终更新检查和策略始终。此外,下载标志也很迫切。根据我的理解,这些选项应该始终导致根据服务器上的时间戳检查缓存并下载 JAR 文件。
我开始对 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>
解决方案
您可能已经解决了这个问题 - 但JNLP规范=“1.0+” - 元素只有后JNLP规范6.0+支持。也许这就是其中的原因为您更新失败的一个。
其他提示
我遇到了与您相同的问题,并通过执行以下操作解决了该问题:
改变
<jar href="OurUpdatedJarName.jar" ...
到
<jar href="OurUpdatedJarName-$VERSION.jar" ...
将 $VERSION 放入
<a href="foo-$VERSION.jnlp">Run</a>
我们会为每次部署自动更新 $VERSION。
我知道这是一个丑陋的解决方案,但它每次都对我们有用。
这个问题通过offline-allowed
标签引起的。
如果指定离线允许的,Java Web Start的还会检查,看是否有可用的更新。但是,如果应用程序已经下载的支票会在几秒钟,在这种情况下,缓存的应用程序将被启动,而不是后超时。给定一个相当快的服务器连接,请应用程序的最新版本通常会运行,但不保证。的应用,然而,可以脱机运行。
我们已经在十几个国家的分布式Java Web Start应用,当我们发现,该应用程序不正确更新它是县城网的误配置,或在用户计算机的网络设置,主要是代理。我们在西班牙的Java Web中央officines开始工作百达行。
我已经使用java在webstart nextx.jar克隆。我跟踪我不更新JAR问题使用URLConnection.getLastUpdated()方法。由于它使用HEAD方法来获取文件名的LASTUPDATED,这就是为什么有时不下载由于getLastUpdated的缓存(的原因)。我们决定使用我们自己的作为在webstart是有缺陷的更新我们的应用程序的方法。
我有这个问题,只是因为我没有让应用程序打开足够的时间来完成更新。
如果您有此选项:更新检查=“背景” 在您的JNLP,等待一些时间才关闭的应用程序,以允许更新结束(即在后台运行)。 p>