2017-10-20 20 views
3

Java Web StartアプリケーションのJNLPファイルには<resources><extension href="...">タグが含まれていて、2番目のJNLPファイルを参照しています。これまではこれまで何の問題もなかった(私は思う)。古くなったJNLPファイル<extension>(Java 9以降)

しかし、JNLPファイルを起動するときにJava 9(ビルド9.0.1 + 11)を使用すると、2番目のJNLPファイルで参照されているリソースの一部がロードできなくなります。これは、Java Web Startには、そのJNLPの古いバージョン(キャッシュ内)が、 "foo-1.2.jar"(これはもう存在しません)ですが、JNLPの現在のバージョンは "foo-1.3.jar"を参照しています。

これはJava 9のバグですか、それとも不足していますか?

アップデート1:これらの共通の(または共有)資源が非常に頻繁に更新されないように、私は今、わからないよ、この問題はすでにJavaの9の前にあっ

あったかもしれない場合はアップデート2:秒オン考えてみてください。多分問題は、jnlp要素にhrefを指定していないことです。最初のJNLPでは意図的に(実行時に挿入されたapplication-desc引数がリロード時に失われるため)、2番目のJNLPでは偶発的なことになります。

<?xml version='1.0' encoding='UTF-8' ?> 
<jnlp 
    spec="6.0+" 
    codebase="https://example.com/158" 
> 
    ... 
    <update check="timeout" policy="always"/> 
    <resources> 
     <java version="9.*" java-vm-args="-Xmx800m --add-opens=java.desktop/java.awt=ALL-UNNAMED --add-opens=java.desktop/sun.awt.dnd=ALL-UNNAMED --add-opens=java.desktop/sun.swing=ALL-UNNAMED" href="http://java.sun.com/products/autodl/j2se"/> 
     <java version="1.8*" java-vm-args="-Xmx800m" href="http://java.sun.com/products/autodl/j2se"/> 
     <jar href="foo-20171018-client.jar" main="true"/> 
     <extension href="https://example.com/shared/shared.jnlp"/> 
    </resources> 
    <application-desc main-class="foo.bar.Baz"><argument>sessionKey</argument><argument>12</argument></application-desc>  
</jnlp> 

二JNLPはこのようになります(参照FOO ...瓶):

<?xml version='1.0' encoding='UTF-8' ?> 
<jnlp 
    spec="6.0+" 
    codebase="https://example.com/shared" 
> 
    ... 
    <update check="timeout" policy="always"/> 
    <resources> 
     <java version="9.*" java-vm-args="-Xmx800m --add-opens=java.desktop/java.awt=ALL-UNNAMED --add-opens=java.desktop/sun.awt.dnd=ALL-UNNAMED --add-opens=java.desktop/sun.swing=ALL-UNNAMED" href="http://java.sun.com/products/autodl/j2se"/> 
     <java version="1.8*" java-vm-args="-Xmx800m" href="http://java.sun.com/products/autodl/j2se"/> 
     <jar href="foo-1.3.jar"/> 
     <jar href="jhall-2.0.02.jar"/> 
     <jar href="jmf-2.1.1.e.jar"/> 
     <jar href="forms-1.2.jar"/> 
    </resources> 
    <component-desc/> 
</jnlp> 
+0

Javaアプリケーションキャッシュ(キャッシュされたアプリケーションとアプレット、インストールされたアプリケーションとアプレット)を消去しようとしましたか? –

+0

申し訳ありませんが、いいえ。私は、1000人の顧客に、キャッシュをクリアしてアプリを再び動作させる必要があることを伝えることなく、解決策を探しています。 Java 8を採用することはそれよりも優れています。 – mbee

+0

おそらく、JNLPファイルの関連部分を表示できますか? AFAICTでは、JNLPファイルの 'version'属性で特定のバージョンを参照できます([JNLPファイル構文](http://docs.oracle.com/javase/7/docs/technotes/guides/javaws/developersguide/を参照)。 syntax.html) - 拡張要素): 'version - 追加拡張jnlpファイルのバージョン。 ' –

答えて

1


最初のJNLPは、(拡張要素に注意してください)このようになりますからJNLP specification - 6リソースのダウンロードとキャッシュ

6.5.3キャッシュの管理

ダウンロードされた リソースのキャッシュを管理するのは、JNLPクライアントです。アプリケーションの実行中に、特定のアプリケーションに属する

リソースはキャッシュから削除されることはありません:JNLPクライアントは、次の不変 が維持されていることを確認する必要があります。

このルールは、アプリケーション開発者はアプリケーション の実行中にキャッシュにあるリソースに関する 仮定を作ることができることを確認します。特に、 を熱心にダウンロードしたすべてのリソースは、 プログラムの実行中にキャッシュ内でローカルに使用できるようになります。

キャッシュを管理するために使用される正確なポリシーとアルゴリズムは、実装によって異なります( )。合理的な方針では、eagerとマークされたリソースの前にlakeyとマークされたリソースを最初に削除することがあります( )。

JNLPクライアントは、どのような方法でも拡張機能を管理できます。 これらは任意の時点でアンインストールすることも、 の周囲に永続的に保存することもできます。拡張アンインストーラが呼び出された場合、別の 拡張が要求されると、それを再度ダウンロードする必要があり、 拡張インストーラを再実行する必要があります。

私はあなたの状況に当てはまる可能性のある関連ビットを強調表示しました。ここでは、エクステンションがキャッシュにダウンロードされると、JNLP拡張の変更が更新されることはありません。

できることは、https://example.com/shared/shared-1.0.jnlpで始まり、内容が変更された場合はバージョンを更新する(https://example.com/shared/shared-1.1.jnlp、...)というJNLP hrefのバージョンです。

また、拡張子のversion属性を使用して作業することもできます。

+0

2番目の考えでは、おそらく問題はjnlp要素にhrefを指定していないことです。最初のJNLPでは意図的に(実行時に挿入されたapplication-desc引数があるため)、2番目のJNLPでは偶発的なことがあります。 – mbee

0

これまでのテストでは、Java 9は新しいJNLPをほとんど手に入れませんでした。私は上記のように、私たちはユーザーが行うことを期待できないキャッシュをクリアする必要があります。 HREFの変更がすべてのデスクトップリンクを破るような解決策であるかどうかはわかりません。ユーザーがHTMLページに行ってICONを再クリックするとうまくいきます。ICONは新しいHREFに変更されています。しかし、これは解決策ではありません。私は現在、これをJava 9 Java Web Startのバグとみなしており、すぐに修正してくれることを願っています。まだそこにいなければ、私はバグレポートを投稿します。今見て。

+0

''を試しましたか? BTW:hrefを変更するのは、最初から参照された2番目のJNLPファイルです。 2番目のJNLPをデスクトップからリンクしてはいけません。これはアプリを表すものではなく、共有ライブラリです。 – mbee

関連する問題