S2JMS 開発記 S2JMS-Server

S2JMS-Container の検討はこもりさんが進めてくれているので,手つかずで残っている S2JMS-Server をちょっと検討.
S2JMS-Server は非同期メッセージを受信して処理するスタンドアプリケーションを起動するために提供するもので,実行可能 Jar にしたいなと考えています.
つまり,コマンドラインから

java -jar s2jms-server-1.0.0.jar

なんてすると S2JMS-Server が起動して,メッセージの受信が始まってアプリで処理される,みたいな.


自分的にはこういうのに求める機能ってあまりないのですが,何か必要でしょうか?
何かって何かさっぱりですが,要望があればコメントなりトラックバックなり ML へのメールなりお願いします.


普通,実行可能 Jar って依存する Jar を MANIFEST.MF に記述すると思うのですが,S2JMS-Server の場合は依存する Jar 自体が多いのと,依存する S2 なんかのバージョンがどんどん変わることを考えると MANIFEST.MF に記述するのはちょっとイマイチ.
アプリの Jar なんて事前には分からないし.
といって,普通に CLASSPATH 環境変数 (あるいは JVM 引数の -classpath) で指定してもらうのも面倒かも.


そんなわけで (どんなわけで?),その辺をちょっとだけラクチンにしたい感じ.
例えば S2JMS-Server の Jar 自身と同じディレクトリにある Jar は勝手にクラスパスに追加するとか.
あと,引数でディレクトリを指定したらそのディレクトリにある Jar は勝手に以下同文.
そうやって見つけた Jar を持つ URLClassLoader を作成してコンテキストクラスローダーに設定してから S2 コンテナを初期化してくれれば,ちょっと楽かも〜.
そんなもんスクリプトでって声は聞こえない (笑).
あ,dicon ファイルも引数で指定できた方がいいのかな.省略時は app.dicon ってことで.


なので,

java -jar s2jms-server-1.0.0.jar [-classpath classpath] [-dicon dicon]

とか.--classpath--dicon でも可.
classpath は普通に File#pathSeparator で区切られたパスで,ただしパスがディレクトリで,その直下に Jar ファイルがある場合はそのディレクトリでなく,Jar を指定したものと見なすってことで.
もし

java -jar s2jms-server-1.0.0.jar -classpath classes:lib

ってやったら classes ディレクトリと lib の下にある Jar がクラスパスに含まれる感じ.


あ,S2JMS-Server の main(String[]) メソッド (っていうか main スレッド) は S2 コンテナを初期化した後はやることなさそうですが,終了するとプロセスも終了しちゃう (他は通常デーモンスレッドのみ) ので,ひたすら待機する必要があります.
プロセスの終了はシャットダウンフックで.


こんなものかなぁ.
んで,この S2JMS-Server,ぼうずさん (id:bowez) にお願いしたいなぁ〜.
Velocity といい,全然 JMS と関係ないところばかりお願いして申し訳ないんですが.