J2EE Web アプリケーションのデファクトフレームワークである Apache Struts の開発プロジェクトに,Shale Framework(以降,Shale) というサブプロジェクトが作成されているのをご存知だろうか。Shaleは次世代のStrutsとなるべくして提案されたWebアプリケーションフレームワークだ。今回は,このShaleを紹介する。
ShaleはStruts2.0として提案された次世代フレームワーク
Shaleは当初 Struts2.0として Strutsの開発チームに提案された。しかしStruts1.X系からはあまりにも変化が激しくStrutsとは別のものとして開発することになったものだ。
このShaleの中心人物は,Strutsの生みの親でありかつ JSF1.0/1.1 のスペックリードでもあるCraig McClanahan氏だ。ShaleはStruts1.Xで培った数々のノウハウやフィードバックをJSF(JavaServerFaces)(注1)を拡張することで反映している。StrutsとJSFの生みの親,Craig氏が新しく提供するShaleとはいったいどのようなものだろうか。
注1:Shaleは前述したように,JSFをベース・テクノロジとしている。JSFをあまりご存知ない方は,本連載の第11回「JSFでStrutsは不要になる?答えを握るStruts-Facesとは」をご覧いただきたい。
Shaleの概要と機能
Shaleは,JSFを拡張することで以下のような機能を提供する
・View Controller : ビュー管理 ・Dialog Manager : ページフロー管理 ・Application Manager: アプリケーション管理 ・Validation : 入力検証 ・Remoting : AJAXサポート ・Spring Integration : Spring Frameworkとの統合 ・Reusable Views : 再利用可能なビュー管理 ・Test Framework : 単体テストまだ開発途中ではあるが,AJAXやSpring Frameworkといった現在注目のテクノロジとの融合や,単体テストや入力検証といった一見地味だが重要な機能をFramework自身の機能として提供しようとしている。
では,ShaleはJSFをどのように拡張し,どのような振る舞いをするのだろうか。Shaleに付属するサンプル・アプリケーションを例に,その仕組みを紹介しよう。
Shaleを試すためには,まず入手する必要があるが,残念ながらShaleはまだ正式リリース版は配布されていない。しかし,ナイトリ・ビルドのディストリビューション・パッケージが入手可能だ。現在,以下の4種類が提供されている。
・Core Library..........Shaleのコア
・Clay Plug-In..........再利用可能なビュー部品
・Test Framework........Shaleアプリケーション用,Shale自身用のJUnitの基底クラス
・Use Case Sample App...サンプルアプリケーション集
この中の「Use Case Sample App」にはwar形式のサンプル・アプリケーションが内包されている。このファイルをWebコンテナにデプロイすればすぐにShaleを試すことができる。
まずは,ShaleがどのようにしてJSFの機能を拡張しているのか見てみよう。その答えはサンプルのWebデプロイメント・ディスクリプタ(web.xml)を参照すればすぐに分かる。このファイルにはサーブレット・フィルタ shale が定義されており,JSFのコントローラであるFacesServletよりも先にリクエストの処理を行うようになっている。このように,JSFへのリクエストを横取りし独自の機能をJSFアプリケーションに追加するようになっているのだ。
リスト1●web.xml抜粋 <!-- Shale Application Controller Filter --> <filter> <filter-name>shale</filter-name> <filter-class> org.apache.shale.faces.ShaleApplicationFilter </filter-class> </filter> <!-- Shale Application Controller Filter Mapping --> <filter-mapping> <filter-name>shale</filter-name> <url-pattern>/*</url-pattern> </filter-mapping>サンプルを起動すると,写真1のようなトップページが表示される。