Ymirの最大の特徴はリクエスト駆動の自動生成機能です。この機能によって、インクリメンタルかつインタラクティブにアプリケーションを開発することが可能になります。
Ymirでは、ビューテンプレートとしてZPTを使った場合、次のようなJavaクラスをテンプレートから自動生成することができます。
- リクエストの処理クラス(Pageクラス)
- DTOクラス
- データベースアクセス用のDaoクラス
- データベーステーブルに対応するBeanクラス
この自動生成処理は、Ymirの通常の処理と同様にリクエストの処理をフィルタして行なわれます。すなわち、あるURIがリクエストされたタイミングでリクエストされたURIに対応するZPTテンプレートが持つHTML要素が解析されてJavaクラスが生成されます。生成された内容は直接Ymirアプリケーションの開発プロジェクトのファイルツリーに反映されます。
以下、具体的に説明します。ここでは、メッセージを入力してボタンを押すと入力したメッセージを表示するような簡単なアプリケーションを例にして説明します。
自動生成機能を使うには、まずZPTテンプレートを作成します。例えば、メッセージの入力フォームとボタンを持つZPTテンプレートを「/index.html」というパス名で作成します。

このテンプレートをブラウザで表示すると次のようになります。

ここでWebブラウザからindex.htmlにアクセスすると、Ymirはまず送られてきたリクエストに対応するテンプレート「index.html」が新規に作成されていることを検出し、このテンプレートの解析を始めます。
テンプレートに含まれているHTML要素(正確にはZPTのレンダリング命令がついているHTML要素)の解析結果から、formタグのaction要素が「/showMessage.html」というURIを指していることを知り、対応するJavaコンポーネント名「showMessagePage」を生成し、このコンポーネント名に対応するJavaクラス「com.example.web.ShowMessagePage」(パッケージ名は予め設定ファイルに記述しておいたものが使用されます)を生成します。既にクラスが存在する場合はテンプレートの情報を使ってクラス定義を更新します。
実際は、自動生成/更新の前に開発者に次のように確認を求めます。

OKボタンを押すとクラスが生成されます。Eclipseを使って開発している場合は、Eclipseのプロジェクトアイコンを選択してRefresh操作を行なうと、生成されたクラスがソースツリー内に現れます。

Webブラウザには、クラスを生成した旨の通知とともに、開発者が次にすべき作業の例が表示されます。これによって、開発者は次に何をすればいいのかを容易に知ることができるようになっています。

OKボタンを押すともともとの処理であるindex.htmlの表示が行なわれ、メッセージ入力フォームが表示されます。
次に、何かメッセージを入力して送信ボタンを押してみます。「Hello, world!」と入力して送信ボタンを押すと、Ymirはそのリクエストを受け取り、今度は送信先である「/showMessage.html」に対応するテンプレートが存在しないことを検出して開発者に作成を促します。

テンプレートのボディとして例えば次のように入力して作成ボタンを押します。

ここで、「tal:content=”self/message”」は「showMessage.htmlの表示前にメソッドを呼び出すコンポーネント(showMessagePage)のmessageプロパティの内容でpタグの中身を置き換える」という意味です。
作成ボタンを押すと次のように表示されますので、EclipseでRefreshを行ないます。

OKを押すと、今度は今作成したテンプレートを解析した結果からShowMessagePageクラスを更新する旨が表示されますのでOKを押します。これによって、ShowMessagePageにmessageプロパティのためのgetterメソッドが追加されます。クラスを更新した旨の通知画面が表示されますのでここでもOKを押すと、元々の処理であるフォームの送信処理が実行され、結果が表示されます。

以降、Eclipseのプロジェクトからテンプレートを書き換え、書き換えたテンプレートにWebブラウザからアクセスしたりする度に、同じように自動生成機能が働いてJavaクラスが生成・更新されていきます。また、YmirはSeasar2.4のHOT deploy機能に対応しているため、Javaクラスを手動で書き換えた場合には変更が即座にアプリケーションの動作に反映されます。