- - PR -
アプリケーションの制御について
1
投稿者 | 投稿内容 |
---|---|
|
投稿日時: 2005-05-31 18:29
はじめまして。
Java Web Startを利用したJavaアプリケーションの開発を行っています。 JNLPファイルより、Jarファイルをダウンロードしアプリケーションを起動していますが、 更に、そのアプリケーションの中から別のJNLPファイルにアクセスし、 別のアプリケーションを起動しています。 そこで、親のアプリケーションを終了した場合に、 子のアプリケーションも終了したいと思っています。 制御する方法をご存知の方は教えていただけないでしょうか? ちなみにJNLPファイルをキックする方法は、 jnlp.jarのBasicServiceを使用しています。 【開発環境】 ・OS Windows 2003 Server ・JDK 1.5.0_02 |
|
投稿日時: 2005-06-02 17:15
いちばん簡単なのは、親アプリと子アプリを同一のJVM上で
起動してしまうことではないでしょうか。 親アプリから子アプリのブートストラップクラスのmain()を 呼ぶとか。 子アプリの停止方法を変更しないと、子を停止したときに 親も一緒に死んでしまうので注意が必要ですが。 独立したプロセスにしたい場合、 ・RMIで停止命令を通知する。 ・ファイルを共有メモリ代わりに使用する。 あたりなら、プラットフォームに依存せずに実装できそうです。 |
|
投稿日時: 2005-06-03 10:46
しゅんさんへ
ご回答ありがとうございます。 独立したプロセスにしたいのですが… ・RMIで停止命令を通知する。 ということですが、通信方法がよくわかりません。 @ 親アプリの終了イベントが呼ばれる A サーバーのリモートオブジェクトを呼ぶ B ??? C 子アプリの終了イベントが呼ばれる 以上の手順になると考えられるのですが、 サーバーのオブジェクトから子アプリの終了イベントを呼ぶことは 可能なのでしょうか? 可能でなければ、サーバーのリモートオブジェクトに 子のインスタンスを渡し終了させることは可能なのでしょうか? 色々調べていましたが、解決できません。 ご存知でしたら教えていただけますか? |
|
投稿日時: 2005-06-03 11:38
例えばこんな感じです。
1.子アプリにRMIサーバーオブジェクトを一個もたせておく。 2.親アプリには、子アプリRMIオブジェクトの登録受け付けを行うRMIサーバー オブジェクトを一個持たせておき、RMIレジストリにバインドしておく。 (このとき、LocateRegistry#createRegistry()を使用すると、RMIレジストリ サーバーを親アプリケーションのJVM上で起動できるので便利ですよ) 3.子アプリは、起動処理中などのタイミングで、「子アプリのRMIサーバーオブジェクトへ の参照」を引数にして親アプリのRMIサーバーオブジェクトのメソッドをコールする。 4.親アプリは、3で子アプリから受け取った「子アプリのRMIサーバーオブジェクトへの参照」 を保存しておく。 5.親アプリ終了時に、4で保存しておいた参照を経由して子アプリに終了通知を行う。 6.子アプリは、終了通知を受け取ったら終了する。 このとき、「子アプリのRMIサーバーオブジェクト」をレジストリに登録する必要 はありません。「子アプリのRMIサーバーオブジェクトへの参照」経由のアクセスを 行うことで、位置情報を解決することができます。 RMIを使うと、こんな感じで分散アプリケーションでObserverパターンを実装するの も簡単ですよ。余り知られていないかもしれませんが。 [ メッセージ編集済み 編集者: シュン 編集日時 2005-06-03 11:47 ] |
|
投稿日時: 2005-06-03 12:23
ご回答ありがとうございます。
RMI(Java初心者)を使用したことがないので、 初歩的な質問で申し訳ありません。 簡単なRMIのプログラムを作成して、 コンパイルを行おうと思ったのですが、 下記のようなコンパイルエラーが発生してしまいます。 なぜこのようなエラーが発生するのでしょうか? ---エラー内容---------------------------------------- C:\RMI_TEST\Server>rmic helloObj Exception in thread "main" java.lang.InternalError: Unexpected exception while d efining class helloObj <<No stacktrace available>> Caused by: java.lang.ClassNotFoundException: java.rmi.server.UnicastRemoteObject ----------------------------------------------------- |
|
投稿日時: 2005-06-06 13:27
すみません、そういう状態(rmicがコンパイルできない状態)に
なったことがないので、分かりません。 RMICの実行時に、当然見つかるはずのコアAPIのライブラリ(java.rmi.server.UnicastRemoteObject)が見つからなかった ということのようですので、環境を再確認してみてください、 という程度のことしかいえませんが… ちなみに、問題のクラスを含むコアAPIライブラリ(Classファイル) は、(JREインストールディレクトリ)/lib/rt.jarです。 |
1