ひがやすを技術ブログ

電通国際情報サービスのプログラマ

HOT deploy完成

GWを使いきり、HOT deployを完成させました。
HOT deployとは何か。アプリケーションサーバを稼動させたまま、クラスを追加、変更しても、アプリケーションのリロードは不要で、その変更が即座に認識される技術です。JavaEEアプリケーションサーバにありがちなjar形式にまとめてどこかに配置するだとか、そんな面倒なことは必要ありません。EclipseのようなIDEを使っているなら、ソースを保存するだけでいいのです(ソースを保存するとクラスファイルを書き出す設定(build automatically)になっている場合)。
Tomcatのauto reloadでも同じことができるジャンと思う方もいるかもしれません。auto reloadでアプリケーションごとreloadするのは正直重い。また、コンポーネントの数が多くなると、DIContainerによるdeployにも時間がかかってしまいます。また、クラスファイルが変更されるたびに、本当はreloadして欲しくないときでも自動的にreloadされるのも困る点です。
Seasar2のHOT deployでは、どんなにコンポーネントの数が増えても、瞬時に処理することができます。そして、余分なreload処理は走りません。どうしてそのようなことが可能なのか。興味のある方は、trunkのhotdeployパッケージを見てください。
実際に触って確かめられるように、デモも用意しました。
http://s2container.seasar.org/download/2006-05-08/hotdeploy-demo-EA1.zip
をダウンロードして解凍し、プロジェクトに取り込みます。TomcatのPluginをあらかじめインストールしておいて、プロジェクトのプロパティ->Tomcat project->Update context definitionを選択します。Projectをbuild automaticallyにしておいてください。デフォルトはそうなっていると思います。Tomcatを再起動して、準備は終了。
ブラウザからhttp://localhost:8080/hotdeploy-demo/add/add.htmlにアクセスしてください。AddDtoがないのでエラーになります。それでは、AddDtoを作りましょう。既にexamples.hotdeploy.dto.AddDto2が用意されているので、AddDtoにリネームします。もう一度、add.htmlにアクセスしてください。足し算の画面が表示されましたね。アプリケーションをリロードすることなく、クラスが認識されているのが分かると思います。
次にサブミットボタンを押すと、AddActionがないのでエラーになります。既にexamples.hotdeploy.www.add.AddAction2が用意されているので、AddActionにリネームします。もう一度、add.htmlにアクセスしてください。今度はうまくいきましたね。AddAction#calculate()のロジックを引き算にしたりしていろいろ試してみるのも面白いと思います。
これは、Javaの開発生産性を飛躍的に向上させるブレークスルーだと思っています。なぜなら、コンパイル時の型チェックや速度といった強い型付け言語のJavaの特徴を生かしながら、スクリプト言語の柔軟さ手軽さを得ることができるからです。
HOT deployの技術は、今後Seasarの様々なプロジェクトで利用できるようになるでしょう。
HOT deployの話は、5/14にお話します。10分間しか時間がないので、詳しく聞きたい方は、コミッタブースへどうぞ。
最後に、GWの間、一緒に暮らし始めたばかりにもかかわらず、ずっと会社に行って開発していた私を温かく見守ってくれた彼女に感謝したいと思います。