RMI を使用する webstart アプリケーションを配布したいと考えています。
アプリケーションを配布しているWebサイトもRMIサーバーなので、ユーザーにRMIサーバーのアドレスを聞くのは避けたいです。
さらに、ビルド時にサーバーのアドレスがわからないため、アドホック構成でアドレスを JNLP に追加するか、実行時にアドレスを指定する必要があります。これは好ましい方法です: そうすることは可能ですか?
RMI を使用する webstart アプリケーションを配布したいと考えています。
アプリケーションを配布しているWebサイトもRMIサーバーなので、ユーザーにRMIサーバーのアドレスを聞くのは避けたいです。
さらに、ビルド時にサーバーのアドレスがわからないため、アドホック構成でアドレスを JNLP に追加するか、実行時にアドレスを指定する必要があります。これは好ましい方法です: そうすることは可能ですか?
私は Java RMI を正確には使用していません (RMIのようなことを行うためにHessianバイナリ プロトコルを使用した Java Web Start のみを使用しました) が、少なくともサーバー アドレスを Web Start クライアント アプリに渡す部分は簡単なはずです。アプリケーションで JNLP ファイルを生成するときに、アドレスをプロパティとして追加します。
<jnlp>
[...]
<resources>
[...]
<property name="serverAddress" value="..." />
</resources>
</jnlp>
次に、クライアント コードでそのプロパティを読み取ります。
String serverAddress = System.getProperty("serverAddress");
ここでは、アプリケーションを配布する Web サイトが独自のアドレスを知っていると仮定します :)
編集(ビルド時にアドレスがわからないという追加の制限あり):うーん、アプリを配布しているWebサイトは動的ですか静的ですか?
JDK には、JNLP ファイルに適切な値を挿入するサーブレットのソース コードが (samples/jnlp/servlet ディレクトリに) 含まれています。これを使用して、ホスト名を JNLP ファイルに挿入できます。
jnlp で変数プレースホルダーを使用します。
...
<application-desc>
<argument>{host}</argument>
<argument>{port}</argument>
</application-desc>
...
そして、Interceptor サーブレットを使用して、JNLP がクライアントに提供されるときに実行時にこれらを置き換えます。