【问题标题】:Java Web Start uses a different cache directoryJava Web Start 使用不同的缓存目录
【发布时间】: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。

编辑:简而言之:

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

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

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

  4. UAT 和 Pre-Production 版本之间的唯一区别是它们在 JNLP 中具有不同的 title,具有不同内容的属性文件,并且托管 Pre-Production 版本的 Apache 服务器使用 Java 可以使用的证书不要检查它的 CRL。应用程序 JAR 由 Java 验证没有问题的不同证书签名。

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

【问题讨论】:

    标签: java caching certificate java-web-start


    【解决方案1】:

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

    另外,这实际上对我有用...

    在浏览器中,从较低和较高的环境访问相同的确切资源并检查 HTTP 标头以查看是否有任何 Cache-Control(no-cache 和/或 no-store 指令)或 Pragma: no-cache 差异.怀疑是不工作的环境有明确指定的缓存指令,根据Java Web Start "Cannot find cached resource for URL" 的第一条评论和https://bugs.openjdk.java.net/browse/JDK-8034978 的第一条评论,碰巧导致java web start 写入与指定的缓存文件夹不同的缓存文件夹java 配置设置,并最终导致您看到的行为差异。修复方法是更新应用服务器、Web 服务器和/或任何其他中介(例如负载平衡器),以将其从 http 响应标头中删除。

    【讨论】:

      【解决方案2】:

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

      【讨论】:

      • 在我的deployment.properties 文件中,没有定义“deployment.user.tmp”,所以它应该使用默认值。我认为这与我的问题无关,因为我使用同一台客户端计算机从我的应用程序的两个版本(一个在 UAT 站点上,一个在预生产站点上)进行安装。由于它是同一台客户端计算机,并且我没有更改任何设置,我认为这是因为服务器端的某些东西使 Java Web Start 想要使用 Local/Temp 而不是 DeploymentCache。跨度>
      猜你喜欢
      • 1970-01-01
      • 2014-09-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-07-21
      • 2010-12-03
      • 1970-01-01
      • 2011-05-25
      相关资源
      最近更新 更多