DI+AOPを実現するSeasarV2:Seaser Projectの全貌を探る(2)(1/3 ページ)
Seasar(シーサー)は、国内のコミュニティ「The Seasar Project」によって開発が行われているオープンソースプロダクトだ。DI+AOPコンテナとして評価が高いSeasarV2は、J2EE開発の現場にも影響力を持ち始めた。例えば電通国際情報サービスがSeasar Projectを正式に支援することを表明し、2005年6月からは同社による商用サポートサービスが開始されている。本連載では、同プロジェクトの代表的なプロダクト紹介していく。(編集局)
前回「次世代J2EEを目指すSeasar2はどう誕生したか?」では、Seasarプロジェクトの概要や、そこで開発されている各種のプロダクトについて簡単に紹介しました。今回からは個別のプロダクトについて紹介していきます。最初はもちろんこのプロジェクトの中核であるSeasar V2(以下S2)です。本稿執筆現在での最新バージョンは2.2.10です。本稿で示すサンプルプログラムは、このバージョンのS2とJDK 5.0 Update 4(JDK 1.5.0_04)とで動作確認をしています。
S2の最大の特徴は、なんといってもDI(Dependency Injection)とAOP(Aspect Oriented Programming)が可能な軽量コンテナであるということです(DIとAOPに関しては「DIとAOPがサーバ・コンポーネント技術を変える」(Java Solution)を参考)。それ以外にも、トランザクションの制御やコネクションプーリングといったデータベース関連の機能も充実し、JUnitのTestCaseを拡張したテスティングフレームワークも用意されていますが、今回は、DIとAOPについて取り上げます。データベース関連の機能については、次回に解説します。
では、早速実際に使いながら、S2を見ていきましょう(今回の説明に関連する全ソースコードはここからダウンロードできます)。
S2のダウンロードと環境設定
S2のダウンロードはSourceforge.jpから行います。SeasarプロジェクトのWebサイト(http://www.seasar.org/)から、ページ上段の「プロダクト」をクリックすると一覧表が表示されますので、その最上行の右端にある「download」をクリックします。その後表示されたページがSourceforge.jpでのリリースファイル・リストですので、そこからS2.x.xx.zip(x.xxの部分はリビジョン番号)をクリックしてダウンロードしてください。ちなみに、S2.2.xx.zipはJ2SE 5対応のもので、S2.1.xx.zipはJ2SE 1.4対応のものですので、開発環境に合わせてどちらかをダウンロードしてください。
ダウンロードしたファイルはZIP形式ですので、解凍ソフトなどで展開すると、seasar2フォルダ以下にS2本体などのJARファイル、S2とサンプルのソースコード、HTML形式のドキュメントなどが生成されます。Ant(http://ant.apache.org/)やMaven(http://maven.apache.org/)でビルドを行うための設定ファイル(build.xml、maven.xml、 project.xml)も生成されますので、S2そのものを改めてビルドすることもできるようになっています。
S2の実行環境には、展開されたJARファイルのパスを環境変数CLASSPATHに設定する必要があります。具体的にどのファイルのパスを設定すればよいかはSeasarプロジェクトのドキュメントの「セットアップ」(http://www.seasar.org/setup.html)を参照してください。
コラム Eclipseへのインポート
S2を利用したアプリケーションをスクラッチで開発する場合は、生成されたファイルをそのまま利用することになりますが、seasar2フォルダはEclipseのプロジェクトをエクスポートしたものとなっているため、あなたのEclipseにプロジェクトとしてそのままインポートすることができます。Eclipseを起動したら、[File]→[Import]の順にクリックし、表示されたウィザード画面上から[Existing Projects into Workspace]を選択し、[Next]をクリックします。次に表示された画面で[Select root directory]欄に先ほど展開されたフォルダを選択して[Finish]をクリックします。Eclipse 3.1にS2のフォルダをプロジェクトとしてインポートした画面は以下のとおりです。
S2におけるDI
それでは、S2でどのようにDIを行うのかについて説明しましょう。
DIコンテナという機能を持つものは、ほかにSpringやPicoContainerなどがありますが、S2の場合はSeasarプロジェクトのWebサイトに日本語のドキュメントが用意されていることで、ほかのプロダクトに比べて理解しやすいというメリットがあります。
その一方で、まだダウンロードモジュールの中にAPIドキュメントが含まれていないという点は課題といえるでしょう。ちなみにAPIドキュメントを生成するためのantスクリプトがSeasar JavaDocプロジェクトのWebサイト(http://seasar.satin.jp/wiki/index.php?SeasarJavadocProject#content_1_6)に掲載されていますので、これを参考にして実行環境に応じたantタスクを作成し、S2のAPIドキュメントを生成してください。
S2では、DIの方法が3種類用意されています。コンストラクタを用いるコンストラクタ・インジェクション、setterメソッドを用いるセッター・インジェクション、setter以外のメソッドを用いるメソッド・インジェクションです。
コンストラクタ・インジェクションでは、DIコンテナがコンストラクタを使って目的とするクラスのインスタンスを生成します。この方法は、インスタンスが生成されるときに初期値が設定されますので、設定時点は確実にインスタンス生成時のみに限定されます。その代わり、コンストラクタで設定する値は、それがどんな値であるかを知る方法が引数の順しかないことで、設定された値の意味を知るにはコメントを付けておかなければならないという点に注意が必要です。
セッター・インジェクションは、DIコンテナがインスタンスを生成した後、セッターメソッドを用いて初期値を設定します。この方法では、セッターメソッドの名称から先頭のsetを取り除いたものがプロパティ名となるため、そこから設定される値の意味を知ることができます。その代わり、セッターメソッドはDIコンテナ以外のプログラムからでも使用できますので、生成されたインスタンスがいくつもの処理で使用される間にプロパティの値を不用意に書き換えられてしまう恐れもあります。とはいえ、インスタンスに設定されたプロパティの値を途中で変更したいこともあるでしょうから、これはもろ刃の剣といえるかもしれません。
メソッド・インジェクションは、DIコンテナがインスタンスを生成した後、設定ファイルに記述された任意のメソッドを実行してインスタンスを初期化します。設定の自由度がほかの2つの方法に比べて格段に高くなりますが、その分初期化を行うメソッドの処理をきちんと把握しておかないと、生成されたインスタンスに対してどのような処理が行われるのかが分かりづらくなることが考えられます。
こうしたインジェクションの方法は拡張子diconを付した設定ファイルに記述します。このファイルはdicon(ダイコン)ファイルと呼ばれることがあります。ダイコンとは「DIContainerを縮めたもの」(はてなのSeasar Projectグループ(http://seasarproject.g.hatena.ne.jp/)のキーワード説明より)だそうです。
Copyright © ITmedia, Inc. All Rights Reserved.