[[FAQ]]

*S2RMI [#t2cbf122]

#contents

**S2RMIのプログラムをサービス化する方法 [#s8d03fff]
>[[S2サポーター]] (2006-04-29 (土) 19:04:37)~
~
''Question''~
~
S2RMIのドキュメント通りにサーバプログラムを起動しますが、~
終了はCtrl+Cです。この終了ができるように(つまりサービスとして)~
実装したいと思っています。~
~
これがサーブレットならtomcatなどを使えばよいのでしょうが、~
S2RMIではどのように実装すればいいかよくわかりません。~
~
下記ページのようにThreadを使用する方法が一つ分かっていますが、~
他に適切な方法はありますか?~
http://seasarproject.g.hatena.ne.jp/ueyama/comment?date=20050528~
~
''Answer''~
~
1.stopメソッドをもつIStoppableインターフェースを作成します。~
~
 package examples.service.main;
 
 public interface IStoppable {
     void stop();
 }
~
2.ServerMainクラスはIStoppableを実装します。~
~
 public class ServerMain implements IStoppable
~
3.ServerMainクラスにstopメソッドを実装します。~
新しいスレッドを作成してstaticなexitメソッドを呼びます。~
~
 public void stop() {
     Thread destroyer = new Thread() {
         public void run() {
             ServerMain.exit();
         }
     };
     destroyer.start();
 }
~
4.ServerMainクラスにexitメソッドを実装します。~
コンテナをdestroyしてexitします。~
~
 public static void exit() {
     if (container != null) {
         System.out.println("デストロイヤー参上!");
         container.destroy();
         System.exit(0);
     }
 }
~
5.stopを呼び出すクライアントプログラムとdiconファイルを書きます。~
~
 public class RemotingStop {
     private static final String PATH="dicon/RemotingStop.dicon";
     public static void main(String[] args) {
         S2Container container = S2ContainerFactory.create(PATH);
         container.init();
         try {
             IStoppable service = (IStoppable)container.getComponent("remotingStopper");
             service.stop();
         } finally {
             container.destroy();
         }
     }
 }
~
 (dicon/RemotingStop.diconファイル抜粋)
 <component name="remotingStopper" class="examples.service.main.
 IStoppable">
     <aspect>remoting</aspect>
 </component>
~
ServerMainを実行し、その後でRemotingStopを実行すれば終了します。~
~
~
''参考投稿''~
http://ml.seasar.org/archives/seasar-user/2006-February/005074.html~
http://ml.seasar.org/archives/seasar-user/2006-February/005088.html~

//




トップ   編集 差分 履歴 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS