[英]How should I configure my JNLP file with JAR files for an Amazon S3 bucket (dynamic IP address CDN)?
我有一个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日志的早期,打印以下内容:“cache:CacheEntry IP mismatch: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/...
它每次都有效。 否则,它通常会因上述异常而中断。
有谁知道这个很好的解决方案? 谢谢。
基于s3主机名的JNLP文件版本是否有效? 如果是 - 我预计原因是亚马逊S3主机名上的生存时间很短。
现在“A”记录仅在30秒后过期。 这可能意味着在每个JAR文件的S3请求之间,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,然后指导您的客户从那里获取完整的捆绑包?
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.