2010-01-27 61 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”,请等待一段时间再关闭应用程序以允许更新(即在后台运行)完成。