Name
Password

Ymir

  • 2007-03-08 16:47 更新

Ymir(ユミル)は、フィルタ指向のシンプルなWebアプリケーション構築フレームワークです。Kvasir/Soraでは、ログインPOPや検索POPのような動的なPOPや、kDiaryプラグインのようなWebアプリケーション的プラグインを実現するために利用されています。

Ymirの特徴は以下のとおりです。

フィルタ指向

Webサーバの基本的な機能は、Webブラウザからのリクエストに応じてコンテンツを返すことです。

JavaのServletAPIを使ったWebアプリケーションでは、リクエストされたURIに対応するコンテンツをサーブレットがレスポンスとして返します。

コンテンツが静的なものであれば、サーブレットは単にURIに対応するファイルの内容をそのままレスポンスとして返します。例えばTomcatでHTMLコンテンツをリクエストした場合は、DefaultServletがリクエストに対応するHTMLファイルの内容を返します。

コンテンツが動的なものであれば、サーブレットはURIに対応するファイルの内容をレンダリングして結果をレスポンスとして返します。例えばTomcatでJSPコンテンツをリクエストした場合は、JspServletがリクエストに対応するJSPファイルの内容をレンダリングして、結果であるHTML等のコンテンツを返します。

ところでJSPやVelocityなどのページテンプレートを使って動的なコンテンツを生成させる場合、テンプレートをレンダリングするために必要なオブジェクトを予めHttpServletRequestの属性等として用意しておく必要があるケースがあります。

例えばStruts+JSPで構築されたWebアプリケーションの場合、JSPをレンダリングするために必要な前処理はStrutsのActionクラスの中で行ないます。

Ymirではページテンプレートのための前処理をより透過的に行なえるよう、サーブレットの処理をサーブレットフィルタでフックする形でJavaオブジェクトのメソッドを呼び出せるようにしています。

具体的には、

  1. リクエストを受け取る
  2. サーブレットがページテンプレートをレンダリングしてレスポンスを作成する
  3. レスポンスを返す

という処理の流れの中で、2.の直前にJavaオブジェクトのメソッドを呼び出せるようになっています。すなわち、処理の流れは

  1. リクエストを受け取る
  2. リクエストされたURIに対応するJavaオブジェクトのメソッドを呼び出す
  3. サーブレットがページテンプレートをレンダリングしてレスポンスを作成する
  4. レスポンスを返す

のようになります。

Ymirがリクエストを受け取ってからレスポンスを返すまでの処理の詳細については、Ymirの処理フローを参照して下さい。

デフォルトのビューテンプレートはZPT

Ymirの中心的な処理は、MVCアーキテクチャで言うところのコントローラの処理です。ビューの処理、すなわちビューテンプレートをレンダリングして最終的なレスポンス(通常はHTML)を作成する処理については、サーブレットとして動作するテンプレートエンジンによって行なわれます。

YmirはStrutsと同様にさまざまなテンプレートエンジンと組み合わせて利用できるようになっていますが、デフォルトのテンプレートエンジンとしてZPT(Zope Page Template)エンジンを内包しています。

ZPTはPythonで書かれたWebアプリケーションサーバZopeで用いられているテンプレート形式です。ZPTの特徴は次のとおりです。

  • HTMLを壊さない形でレンダリング命令を埋め込めるため、WebアプリケーションサーバにデプロイしなくともWebブラウザでHTMLのデザインを確認できる
  • 命令体系がシンプルである
  • 複数画面のデザインを統一させたり繰り返し利用されるHTML部品を定義したりするためのマクロ機能を持っている

ZPTの詳細については「Zope Page Templates Reference」、「Zope Page Template リファレンス」、「Using Zope Page Templates」、「Page Template を使う」等を参照して下さい。

コンポーネント管理機構としてSeasar2.4を内蔵

YmirはDI+AOPコンテナであるSeasar2.4を内蔵しています。これによって、Webアプリケーションを構成するJavaオブジェクトのライフサイクル管理を簡単に行なうことができます。

Seasar2.4のHOT deployに対応

YmirはSeasar2.4のHOT deploy機能に対応しており、アプリケーションのソースコードに適用した変更が動作中のアプリケーションに即座に反映されます。これによってインタラクティブなアプリケーション開発が可能になります。

リクエスト駆動の自動生成機能

Ymirでは、ビューテンプレートとしてZPTを使った場合、ZPTテンプレートからさまざまなJavaクラスを自動生成することができます。

この自動生成処理は通常リクエスト駆動で行なわれます。すなわち、リクエストされたURIに対応するZPTテンプレートが新規に作成されたか更新されていた場合にテンプレートが解析され、解析結果に基づいてJavaクラスが生成されます。この機能によって、インクリメンタルかつインタラクティブにアプリケーションを開発することが可能になります。