-Jasper2ガイド(1)
さて、いよいよ実装着手も近づいてきましたので、Mayaの実装を行ううえで参考にするJasper2のソースのうち、見ておくと良いと思われる点を軽く流してガイドします。ガイドは、Tomcat5.5.4付属のJasper2のコードです。その中でも、まずは最重要のコードジェネレートしているところ。それは、org.apache.jasper.compiler.Generatorというソースです。こいつはJasper中で最大のステップ数を誇るコード(4007ステップ)ですが、見るべきところは少ないです。
- 1571行: GenerateVisitor.visit(Node.CustomTag)
- 2116行: GenerateVisitor.generateCustomStart(...)
- Tag#doStartTag()を実行する周辺のコードジェネレーションをします。doStargTag()の返りのint値とBodyTagインターフェイスを実装しているかどうかによって、ボディの操作について決定します。ここで、ループ対応のため、制御をdoループに突入させるコードジェネレーションをしているところが重要。tryCatchFinallyを実装していると、「try{」を書き出します。
- 2227行: GenerateVisitor.generateCustomEnd(...)
- Tag#doAfterBody()および Tag#doEndTag()を実行する周辺のコードジェネレーションをします。カスタムタグがIterationTagを実装している場合、doAfterBody()を呼び出しするコードを書き出し。generateCustomStart()で突入した無限ループにおいて、Tag#doAfterBody()の返値がBodyTag.EVAL_BODY_AGAINではない値だとブレイクするコードをジェネレート。tryCatchFinallyを実装していると、doCatch()およびdoFinally()を呼ぶコードを書く。最後、カスタムタグをプールに戻すコードを書きます。
- 2333行: GenerateVisitor.generateCustomDoTag(...)
- JSP2.0からのSimpleTagインターフェイスを実装している場合に使われるハンドラ。doTag()を呼び出すコードを書き出す。
あとは、上記からたどれるところをざっと眺めるぐらいでOK。他には、コードジェネレートした結果をオンザフライでコンパイルしてロードして、サービスする一連の流れのところをパクるぐらいかな。ということで、自習よろ。