【发布时间】:2015-09-26 03:15:24
【问题描述】:
我有一个 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 控制面板中,我可以看到我的应用程序列在缓存的应用程序列表中。在资源列表中,我可以看到 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,每当我通过快捷方式启动 Pre-Production 版本时,Java 都会提示有可用更新并重新下载 JAR 文件。
我尝试打开部署日志,但我不知道应该查找什么。我找到了这样的条目:
Wrote URL [https]://[Domain]/[Path to JNLP].jnlp to File C:\Users[User name]\AppData\Local\Temp\tmp_cache3515307480207784226.tmp
但我不知道为什么在 DeploymentCache 上使用 Local\Temp。 UAT 和 Pre-Production 站点的 JNLP 文件几乎相同,唯一的区别是 title 元素和属性文件中的内容发生了变化。
我能想到的另一个区别是服务器证书——JNLP 和 JAR 文件托管在 Apache 服务器上。 Java 将显示 Pre-Production 证书的对话框,说明它未能检查 CRL。我尝试禁用 CRL 检查,但对话框消失了,但它仍在使用 Local\Temp 而不是 DeploymentCache。
这种使用不同缓存位置的行为背后的原因是什么? 这几乎就像 Java 发现了预生产版本的一些不可信之处并拒绝缓存其 JNLP。
编辑:简而言之:
相同的客户端机器,相同的设置。
加载应用程序的 UAT 版本、JNLP 和 JAR 缓存在 DeploymentCache 文件夹中(预期行为)。
加载应用程序的预生产版本,仅 JAR 缓存在 Local/Temp 文件夹中,JNLP 未缓存(意外行为)。
UAT 和 Pre-Production 版本之间的唯一区别是它们在 JNLP 中具有不同的
title,具有不同内容的属性文件,并且托管 Pre-Production 版本的 Apache 服务器使用 Java 可以使用的证书不要检查它的 CRL。应用程序 JAR 由 Java 验证没有问题的不同证书签名。我想知道是什么影响了 Java Web Start 的行为。我怀疑它与 Apache 服务器上的证书有关,但我找不到任何相关文档。
【问题讨论】:
标签: java caching certificate java-web-start