java webstartとRMIを混在させる方法は?
-
19-08-2019 - |
質問
RMIを使用するWebstartアプリケーションを配布したい。
アプリケーションを配布するWebサイトはRMIサーバーでもあるため、RMIサーバーのアドレスをユーザーに尋ねることを避けたい。
さらに、ビルド時にサーバーのアドレスがわからないため、アドホック構成でアドレスをJNLPに追加するか、実行時にアドレスを指定する必要があります。これが好ましい方法です:そうすることは可能ですか?
解決
Java RMIを正確に使用していません( Hessian バイナリでのみJava Web Startを使用しましたRMIのようなことを行うためのプロトコル)、ただし、少なくともサーバーアドレスをWeb Startクライアントアプリに渡す部分は簡単なはずです。アプリケーションでJNLPファイルを生成するときに、アドレスをプロパティとして追加します。
<jnlp>
[...]
<resources>
[...]
<property name="serverAddress" value="..." />
</resources>
</jnlp>
次に、クライアントコードでそのプロパティを読み取ります:
String serverAddress = System.getProperty("serverAddress");
ここでは、アプリケーションを配布するWebサイトが自身のアドレスを知っていると想定しています:)
編集(ビルド時にアドレスを知らないという追加の制限付き):うーん、ウェブサイトはアプリを動的または静的に配信していますか?
- dynamic:JNLP全体を(JSPページまたはdom4jなどを使用して)動的に生成するか、<!> quot; template <!> quotを読み取ります。 JNLP XMLファイルを作成し、実サーバーのアドレスを置き換えます
- static:サイトを展開する人は、JNLPファイルで正しいアドレスを手動で構成する必要があると思いますか?
他のヒント
私が働いている場所では、これを正確に行い、Jonikの回答に従って、RMIレジストリのホスト名をJNLPに入れます。 Java 6u10またはu11では、Sunは動的JNLPの問題を含むいくつかのセキュリティホールをWebstartで閉じました。すべてのセキュリティ警告を満たすために、プログラムのメインjarにJNLPの同一のコピーを配置する必要があります。これは、サードパーティがコードに余分なjarやパラメーターを挿入するのを防ぐためです。プログラムはそれなしで実行されますが、ユーザーには信頼通知が表示されます。
ビルド時にアドレスを知っていますが、他の動的なJNLPの問題があったため、実行可能なセットアップごとにJNLPとJARを提供する必要がありました。これは、お客様にとっての問題というよりも、私たちにとってデプロイメントの頭痛の種でしたが、ディストリビューションに署名しているのであれば、知っておく価値があります。
JDKには、適切な値をJNLPファイルに挿入するサーブレットのソースコード(samples / jnlp / servletディレクトリ内)が含まれています。これを使用して、ホスト名をJNLPファイルに挿入できます。
jnlpで変数プレースホルダーを使用しています:
...
<application-desc>
<argument>{host}</argument>
<argument>{port}</argument>
</application-desc>
...
JNLPがクライアントに提供されるときに、Interceptorサーブレットを使用して実行時にこれらを置き換えます。