[Seasar-user:3174] Re: S2RMIのプログラムをサービス化したい

Asarima asarima
2006年 2月 10日 (金) 17:03:25 JST


Asarimaです。

 S2RMIのサーバプログラムのサービス化の件ですが、
 とりあえず下記のようにしてstopさせることができました。

1.stopメソッドをもつIStoppableインターフェースを作成します。

package examples.service.main;

public interface IStoppable {
    void stop();
}

2.RemotingMainクラスはIStoppableを実装します。

public class RemotingMain implements IStoppable

3.RemotingMainクラスにstopメソッドを実装します。
新しいスレッドを作成してstaticなexitメソッドを呼びます。

public void stop() {
    Thread destroyer = new Thread() {
        public void run() {
            RemotingMain.exit();
        }
    };
    destroyer.start();
}

4.RemotingMainクラスに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>

 RemotingMainを実行し、その後でRemotingStopを実行すれば終了します。

 以前紹介したページより簡単になったと思いますが、javaはあまり
慣れていないので、実用には足りないところが多いかと思います。
その点ご指摘いただければ幸いです。



Seasar-user メーリングリストの案内