Hatena::ブログ(Diary)

yvsu pron. yas このページをアンテナに追加 RSSフィード

2006-05-08

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の間、一緒に暮らし始めたばかりにもかかわらず、ずっと会社に行って開発していた私を温かく見守ってくれた彼女感謝したいと思います。

ファイルの保存はどこでするのか

それは、ブラウザからアップロードされたファイルの保存をどこで、実装させるかということです。

frog-expressの日記 - GOYA ファイルの保存

ファイルの保存は、プレゼンテーション層のHelperロジックなので、それ用のコンポーネントを作り、ActionにDIします。なぜ、Serviceでやらないかというと、トランザクションは必要としないからです。

mshimuramshimura 2006/05/08 20:06 HOT-Deployすごくいいですね。昔は Turbo-Cでコンパイルが早くなって感動しました。それでもずいぶん掛かったのに、RUBY感覚で出来ますね。

sinhsinh 2006/05/08 21:32 ファイルのダウンロードはどこで実装させるのでしょうか?

frog-expressfrog-express 2006/05/09 00:53 ご助言いただきまして、ありがとうございました。m(_|_)m
Actionとは、驚きましたが、理由を拝見しまして、なるほどと納得しました。ありがとうございました。

SkirnirSkirnir 2006/05/09 08:34 すばらしい!実はKvasir3は同様の機能を独自実装で持っていたのですが、Seasarにその機能がついたならそれを利用するようにすることを検討します。ところで、今までもSeasar2にはhotdeployの機能があった気がしたのですが、それとの違いは?

higayasuohigayasuo 2006/05/09 09:22 ダウンロードは、ダウンロード用のHelperを作ってActionにDIします。 > sinhさん

izuizu 2006/05/09 11:01 ひがさーん、いつSF来るんですかー? 月曜の夜あいてます?

higayasuohigayasuo 2006/05/09 12:23 SFには、月曜の朝着です。月曜の夜はあいてますよー。

izuizu 2006/05/09 13:05 nekopとTKYさんと(旦那と)ディナー行きましょ♪ てかメールしろってねw