2012-12-14 8 views
5

Javaアプリケーション用の.jarファイルを保持するAmazon S3バケットがあります。そして、コードベースのためにこのAmazon S3バケットを指し示すJNLPファイルを動的に作成して提供するWebサーバーがあります。Amazon S3バケット(動的IPアドレスCDN)用のJARファイルを使用してJNLPファイルを構成する方法を教えてください。

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に解決されます。

私はこの問題を抱えていることに驚いています。これはよくある問題だと思いますが、良い解決策を見つけることはできません。

<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ファイル内のIPアドレスを固執した場合。さもなければ、それは通常上の例外で壊れます。

誰にでも良い解決策がありますか?ありがとう。

+0

[バグデータベース](http://bugs.sun.com/)を参照してください。類似のものが表示されない場合は、新しいレポートを作成してください。 –

+0

さて、私は見回しましたが、何も見つかりませんでした。私は新しい報告書を提出し、それがバグに変わったらここでそれを参照します。ありがとう。 – Patrick

+1

「ファイルキャビネット」内のGoogleサイトにJavaアプレットを埋め込むのと同様の問題がありました。また、Javaログを有効にして、「コードベース」のURLがクラウド内でケージーであることがわかりました。私のアプレットのさまざまな部分は、実際にはGoogleのスペース(ファイルキャビネット内のファイルを格納する)の異なるIPからフェッチされていました。私の回避策は、おそらく有用な情報ではないことを認識しているcode.google.comでアプレットをホストすることでした。 JREがクラウドのような振る舞いを持つ唯一の問題ではないと私は思う。 – Fuhrmanator

答えて

0

JNLPファイルのs3ホスト名ベースのバージョンが動作することはありますか?はいの場合 - 原因はAmazonのS3ホスト名の生存期間の短い値であると思います。

"A"レコードは30秒後に期限切れになります。これは、各JARファイルのS3に対するHTTP要求の間に、DNSキャッシュの有効期限が切れることを意味します。したがって、次のJAR要求は別のDNSルックアップを引き起こします。

私は、S3用のDNSが1つの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にリアルタイムで入れてから、そこから完全なバンドルを取得するようクライアントに指示できますか?

関連する問題