gpt4 book ai didi

java - 我应该如何使用 JAR 文件为 Amazon S3 存储桶(动态 IP 地址 CDN)配置我的 JNLP 文件?

转载 作者:搜寻专家 更新时间:2023-11-01 00:57:28 27 4
gpt4 key购买 nike

我有一个 Amazon S3 存储桶,用于保存我的 Java 应用程序的 .jar 文件。我有一个 Web 服务器,它动态创建并提供一个 JNLP 文件,该文件指向代码库的这个 Amazon S3 存储桶。

JNLP 似乎能够从我的 Amazon S3 存储桶中正确下载 .jar 文件。但是在尝试启动时,出现以下异常:

ExitException[ 3]java.io.IOException: Cannot find cached resource for URL: http://s3.amazonaws.com/....     
at sun.plugin2.applet.JNLP2Manager.prepareLaunchFile(Unknown Source)
at sun.plugin2.applet.JNLP2Manager.loadJarFiles(Unknown Source)
at sun.plugin2.applet.Plugin2Manager$AppletExecutionRunnable.run(Unknown Source)
at java.lang.Thread.run(Unknown Source)

Java 是否缓存带有 IP 地址的 .jar 文件?早些时候在 java 日志中,打印了以下内容:“缓存:CacheEntry IP 不匹配:207.171.189.80 != 207.171.187.117”。两个 IP 都解析为 S3。

我有点惊讶我遇到了这个问题,我认为这是一个常见问题,但找不到好的解决方案。如果我将 IP 地址粘贴在 JNLP 文件中:

<jnlp spec="1.0" xmlns:jfx="http://javafx.com" codebase="http://207.171.189.80/...

代替:

<jnlp spec="1.0" xmlns:jfx="http://javafx.com" codebase="http://s3.amazonaws.com/...

它每次都有效。否则,它通常会因上述异常而中断。

有人知道解决这个问题的好方法吗?谢谢。

最佳答案

您的 JNLP 文件的基于 s3 主机名的版本有时是否有效?如果是 - 我认为原因是 Amazon 的 S3 主机名上的生存时间值较短。

现在“A”记录仅在 30 秒后过期。这可能意味着在针对每个 JAR 文件向 S3 发出的 HTTP 请求之间,DNS 缓存会过期。因此下一个 JAR 请求将导致另一个 DNS 查找。

我注意到 S3 的 DNS 只返回一个 IP 地址,但它会在 30 秒后轮换。

% dig s3.amazonaws.com
;; ANSWER SECTION:
s3.amazonaws.com. 229 IN CNAME s3.a-geo.amazonaws.com.
s3.a-geo.amazonaws.com. 213 IN CNAME s3-1.amazonaws.com.
s3-1.amazonaws.com. 28 IN A 176.32.100.200

我不确定 JNLP,但通常 Java 对确保 JAR 文件都从相同的“源”加载非常挑剔。我猜 Java 在这种情况下希望“源”表示“相同的 IP 地址”。

最坏的情况是,您可以尝试动态生成您的 JNLP,将其实时放入 S3,然后指示您的客户从那里获取完整的包?

关于java - 我应该如何使用 JAR 文件为 Amazon S3 存储桶(动态 IP 地址 CDN)配置我的 JNLP 文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13885591/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com