Java Web Start使用不同的缓存目录

时间:2015-07-08 09:36:09

标签: java caching certificate java-web-start

我有一个Java Web Start应用程序。我的JNLP指示Java在有更新时提示,并创建桌面快捷方式。

在UAT网站上,它按预期工作。快捷方式的目标将是这样的:

C:\Windows\SysWOW64\javaws.exe -localfile -J-Djnlp.application.href=[https]://[Domain]/[Path to my JNLP].jnlp "C:\Users[User name]\AppData\LocalLow\Sun\Java\Deployment\cache\6.0\21\5819ce55-139863fe"

在Java控制面板中,我可以看到我的应用程序列在缓存的“应用程序”列表中。在Resources列表中,我可以看到JNLP和JAR文件的条目。

但是在预生产站点(使用相同的客户端计算机)上,Java将使用不同的缓存文件夹:

C:\Windows\SysWOW64\javaws.exe -localfile -J-Djnlp.application.href=[https]://[Domain]/[Path to my JNLP].jnlp "C:\Users[User name]\AppData\Local\Temp\tmp_cache2515468182853051613.tmp"

在Java控制面板中,“预生产”应用程序未列在“应用程序”列表中。在Resources列表中,我只能找到JAR文件而不能找到JNLP文件。

由于缓存中缺少JNLP,每当我通过快捷方式启动预生产版本时,Java将提示更新可用并将重新下载JAR文件。

我尝试启用部署日志,但我不知道应该寻找什么。我找到了这样的条目:

Wrote URL [https]://[Domain]/[Path to JNLP].jnlp to File C:\Users[User name]\AppData\Local\Temp\tmp_cache3515307480207784226.tmp

但我不知道为什么使用Local \ Temp而不是DeploymentCache。 UAT和Pre-Production网站的JNLP文件几乎相同,唯一的区别是title元素和属性文件中的内容发生了变化。

我能想到的另一个不同之处是服务器证书--JNLP和JAR文件托管在Apache服务器上。 Java将显示预生产证书的对话框,表示它无法检查CRL。我尝试禁用CRL检查,对话框消失了,但它仍然使用Local \ Temp而不是DeploymentCache。

这种使用不同缓存位置的行为背后的原因是什么?这几乎就像Java发现了一些关于预生产版本不值得信任的东西,并拒绝缓存其JNLP。

编辑:简而言之:

  1. 相同的客户端计算机,相同的设置。

  2. 加载应用程序的UAT版本,JNLP和JAR在DeploymentCache文件夹中缓存(预期行为)。

  3. 加载应用程序的预生产版本,只有JAR被缓存在Local / Temp文件夹中,JNLP没有缓存(意外行为)。

  4. UAT和预生产版本之间的区别仅在于它们在JNLP中具有不同的title,具有不同内容的属性文件,以及托管预生产版本的Apache服务器使用的证书是Java无法检查其CRL。应用程序JAR由不同的证书签名,Java没有问题验证。

  5. 我想知道Java Web Start的行为会有什么影响。我怀疑它与Apache服务器上的证书有关,但我找不到任何有关该证书的文件。

2 个答案:

答案 0 :(得分:0)

您是否查看了deployment.properties中的deployment.user.tmp属性? http://docs.oracle.com/javase/1.5.0/docs/guide/deployment/deployment-guide/properties.html

答案 1 :(得分:0)

根据Applet stopped working with a JNLP MissingFieldException <jnlp>,请查看cookie信息以了解其中是否包含Httponly -看起来它可能导致jws出现此行为。

或者这实际上对我特别有用...

在浏览器中,从较低和较高环境访问相同的资源,并检查HTTP标头以查看是否存在任何Cache-Control(无缓存和/或无存储指令)或Pragma:无缓存差异。怀疑是无法正常工作的环境已明确指定了缓存指令,根据Java Web Start "Cannot find cached resource for URL"的第一条注释和https://bugs.openjdk.java.net/browse/JDK-8034978的第一条注释,它们恰好导致Java Web开始写入与缓存文件夹不同的缓存文件夹。 java配置设置中指定的内容,最终会导致您看到的行为差异。解决方法是更新应用服务器,Web服务器和/或任何其他中介(例如负载平衡器),以将其从http响应标头中删除。