2017-03-29 1 views
0

JNLPファイルにいくつかの問題があります。私はJNLPファイルをキャッシュしないようにJavaを無効にしようとしています。なぜなら、実行する度に別の<argument>を渡しているからです...しかし、エーテル自体は<update check="always" policy="always"/>を使用して更新するよう強制できません。私はまた、http応答ヘッダーにLast-Modified属性を設定しようとしましたが、それもうまくいきませんでした。異なる引数に対してJNLPファイルが更新されない

  1. 無効にJNLPファイル:いずれかに適切な方法は何ですか

    ...

    jarファイルは同じままなので、私は本当にどちらか更新することを強制するためにversion属性を使用することはできませんキャッシング

  2. フォースは、それが常にJNLPファイル
  3. を更新するために適切にJNLPが
を起動で毎回異なる引数を渡しますここで

それは、Webブラウザから起動されるたび<argument>は異なる可能性があることに注意してください、私のJNLPファイルである、JNLPファイルを動的にウェブから生成されます。

<jnlp spec="1.0+" codebase="https://blah.blah.com/jnlp/jar/*/"> 
    <information> 
    <title>JNLP Launcher</title> 
    <vendor>Blah</vendor> 
    <homepage href="http://www.blah.com"/> 
    <description>JNLP Launcher</description> 
    </information> 
    <security> 
    <all-permissions/> 
    </security> 
    <update check="always" policy="always"/> 
    <resources> 
    <java href="http://java.sun.com/products/autodl/j2se" version="1.7+"/> 
    <jar href="https://blah.blah.com/jnlp/jar/LauncherSigned.jar" download="eager" main="true"/> 
    </resources> 
    <application-desc main-class="com.blah.jnlp.Launcher"> 
    <argument>{"javawebstart" : "isfullofshit"}</argument> 
    </application-desc> 
</jnlp> 

答えて

0

のJavaウェブスタートは、JNLPファイルの内容を更新することはありませんクライアントマシンでしかし、リソースのいずれかが更新されていれば、パフォーマンスは完璧です。例えば

サーバー上でホストされているJNLPファイルでhelper.jarリソースをコメントしている場合。 web startは、この変更をサーバーの.jnlpに加えた変更前にjnlpファイルをダウンロードしたクライアントに反映しません。

<!--jar href="helper.jar"/--> 

しかし、あなたは完全にあなたがコメントしたとは、すべてのリソースを再コンパイルし、今回them.Atを再配備jarファイルによって自分のクラスの参照を削除した場合、予期せずにJava Webスタートは積極的になり、すべての変更あなたを反映サーバー上で作成されています。

あなたの所在地:あなたは.jnlpファイルを変更しています。これは、変更内容がクライアントに反映されないという謎の理由があるためです。

ソリューション:

アプローチI(コンプレックス):あなたがウェブスタート.Hereそれらを拾うことができるように何とか、瓶のいずれかで変更を反映する必要が

はラフスケッチです:

1.アプリケーションのエントリポイントとして新しいクラスを作成します。

2.このクラスでは、サーバーの.jnlpファイルの最後に変更されたヘッダーを確認します。

3.if最終更新日は、ローカルのjnlpファイルとは異なるものです。サーバーからjnlpファイルをクライアントjnlpに置き換えて簡単にダウンロードします。

4. .jnlpファイルをクライアントで再起動します。

これはずっと前ですが、アプリケーションの起動時に.jnlpファイルをリロードするだけでした。最後に修正された.jnlpファイルのヘッダーはチェックされませんでした。

String[] jarSequence= {"demo.jnlp"}; 
String codebase = "http://localhost:8818/javawsGame/"; 

DownloadService ds; 
try { 
ds = 
(DownloadService)ServiceManager.lookup("javax.jnlp.DownloadService"); 

if (ds != null) { 

URL url = 
new URL(codebase + jarSequence[0]); 
boolean cached = ds.isResourceCached(url, null); 

if (cached) { 
ds.removeResource(url, null); 
} 

//setMessage(msgSequence[0]); 
//setLoadingResource(jarSequence[0]); 
DownloadServiceListener dsl = ds.getDefaultProgressWindow(); 
ds.loadResource(url, null, dsl); 

} 
//take a breath 
Thread.currentThread().sleep(3000); 

Process exec = Runtime.getRuntime().exec("javaws path/to/your/demo.jnlp"); 
exec.waitFor(); 
System.exit(0); 

} catch (Exception e) { 

System.out.println("Exception: "+e); 
} 

アプローチII(簡易):

1.Cleanとシンプルな.Introduceエントリポイントクラスは、 "MainClassArgument.javaを" と言います。

2.このクラスの.jnlpファイルをメインクラスとして指定します。したがって、このアプローチを使用して、メインクラス

にハードコード引数を渡し、このクラスからあなたのメインクラスの

3.Startインスタンスが、あなたは、クラスに引数を変更するたびに再コンパイルする必要があります。

これは、Java Web Startをトリックして、クライアントへの変更をすぐに反映させます。

希望はこのことができます:)

注:JavaのWeb Startのキャッシュを無効にするための問いにが、これはは.jnlpファイルがをキャッシュされていないとして、それは、クライアント・マシンに格納されて助けにはなりません。 Java Web Startのマニュアルでは、クライアント側の.jnlpファイルを更新することは一度も言及されていません。Web Startによれば、アップデートはリソースの更新のみに制限されています。クライアントの.jnlpファイルを更新する独自の戦略を理解する必要があります。

関連する問題