起動済みのアプリケーションのコードベースを取得する

jnlpとコードベース

  • RMIなどで起動されたURLを公開、共有する
  • 起動されたコードベースを取得するエージェントを用意し、アタッチAPI経由で注入してURLを取得する

など、他のアプリケーションの情報を調べるための方法が必要になってくる。

いろいろ試して考えたが、以下の方法が良さそうだろうという結論になった。

1.MXBeanとして公開するインタフェースを用意
例)

@MXBean
public interface ICodeBaseAgent {
    String getCodeBase();
}

2.MXBeanに公開するインタフェースの実装クラスをエージェントとしてロードする

  • まだ起動されていなければRMIレジストリを起動
  • MBeanServerにMXBeanを登録

で実現できる

3.他のアプリケーションはMXBeanServer経由で接続
MXBeanを経由して、アプリケーションは自らの実行コンテキスト(stand alone|Java Web Start)に適したcodeBaseを返す

こんな感じか。