Winstone + Embeddable EJB
id:winebarrelさんの所で紹介されていたWinstone Servlet Containerがシンプルで面白い。java -jar winstone-0.8.1.jar --warfile
そこで思いついたのは、Embeddable EJBとWinstoneを組み合わせれば、最小のJ2EEサーバが出来るかもという事。実際やってみたら、さっくり成功した。
- JBoss Embeddable EJB(以下E-EJB)をダウンロードしてくる。*2
- 解凍して、docs/embedded-tutorial/embedded-warに移動
- winstone-0.8.1.jarをそのディレクトリに配置(ちなみにliteバージョンでは動かない)
- toollib(とか適当なディレクトリ)を作成して、以下のファイルを並べる(JSPエンジンを内蔵してないため、Tomcatあたりからもってくる)
- ant.jar (なぜか必要)
- commons-el.jar
- commons-logging-api.jar
- jasper-compiler.jar
- jasper-runtime.jar
- src/EmbeddedEJB3.jsp内のEJBをルックアップしているコードを書き換える。これはE-EJBのバグ修正でWinstoneとは関係無い。
InitialContext ctx = getInitialContext();
CustomerDAOLocal local = (CustomerDAOLocal) ctx.lookup("CustomerDAOBean/local");
CustomerDAORemote remote = (CustomerDAORemote) ctx.lookup("CustomerDAOBean/remote");
- ant war にてビルド(当該ディレクトリにあるbuild.xml)
- 起動して実行
java -jar winstone.jar --commonLibFolder=toollib --useJasper=true --warfile=build/standalone.war --javaHome="%JAVA_HOME%" --debug=9
- あとは普通にアクセス
WinestoneはArgs over Configurationという感じで設定周りはほとんど引数で表現する。だから単体ではデータソースの設定等が面倒だけど、この構成だとE-EJB側で面倒を見てくれるので楽チン。ちょっとしたJPAのサンプルを作る時に便利そう(いつだ)。
ちなみに合計サイズは14MBぐらいだった。実際はE-EJBがほとんどを占めているんだけど。