我们使用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>
答案 0 :(得分:5)
你可能已经解决了这个问题 - 但是jnlp spec =“1.0+” - 只有在jnlp spec 6.0+之后才支持该元素。可能那是你更新失败的原因之一。
答案 1 :(得分:1)
假设客户端JRE是最新的,您可以按照此thread中的建议尝试<update check="timeout" policy="always"/>
,并在JNLP syntax文档中进行说明。
答案 2 :(得分:1)
我遇到了与你相同的问题,并通过以下方式解决了这个问题:
更改
<jar href="OurUpdatedJarName.jar" ...
到
<jar href="OurUpdatedJarName-$VERSION.jar" ...
将$ VERSION放入<a href="foo-$VERSION.jnlp">Run</a>
我们会为每次部署自动更新$ VERSION。
我知道这是一个丑陋的解决方案,但每次都适合我们。
答案 3 :(得分:1)
答案 4 :(得分:1)
此问题是由offline-allowed
代码引起的。
如果指定了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”,请在关闭应用程序之前等待一段时间,以便允许更新(在后台运行)完成。