-Nirvana(2)-Nirvanaとは何か

いきなりNirvanaとは何かとは台上談ですが、ソースをひととおり見させていただいてポイントをまとめてみます。NirvanaはHTMLをプリプロセスしてJSPファイルを作成し、その作成JSPをJasperにコンパイルさせてサービスするものです。プリプロセッサコンパイラおよびサーブレットに機能が分類できるでしょう。またプリプロセッサはHandlerと呼ばれる一群の実装集があって、それらを増やすことによって機能が向上していくつくりになります。一連のワークフローを(若干の省略とウソもありますが)記述すると、

  • NirvanaServletでリクエストを受け付ける。
    • 適切なHTMLテンプレートを探す。
    • 見つかったHTMLをプリプロセッサに渡す。
      • NekoHTMLでDOMパースする。
      • DOMツリーをイテレートする。
      • ツリーノードの名前でHandlerを取得。ここ大事
      • Handlerが取得できたら処理を委譲する。
        • Handler自体がDOMツリーウォークする。
        • 適切と思われるJSFタグにタグ名や属性名、場合によっては値を変換する。ここ大事
        • ContextWriterにタグ変換結果を書き出す
      • Handlerが取得できなかったら、後にそのまま書き出す。
    • プリプロセス成果をJasperに渡す。
      • Jasperが生成JSPをコンパイル。
  • コンパイルされたServletを実行。

まず、GOODな点はその着眼点と実装能力。自分も似たことを思いついたので称揚しづらいのですが、普通こんなの思いつかないよ。ましてや動くもの実装できませんって!間接的に自分を褒めてるみたいですが、真にそう思います。実装もHandler群に処理を委譲したり、そのファクトリーは定義を外だしして疎結合な作りに持ってくデザインは素敵です。とにかく実際動くしね。CVS中にはXMLへのバインディング外だしの仕組みなどが無かったので、将来機能なのでしょう。ちなみにHandler種類は以下のとおりです。

  • _s2jsf
  • META
  • input
  • form
  • textArea
  • el
  • select
  • option
  • annotation
  • object
  • counter