-式言語まとめ

とにかく時間かかったのは、JSPJSFのELのインターフェイスがよく理解できなかったためです。いろいろ考察してやっとわかった(と思う)。

  • JSPおよびJSFのVariableResolverは、OGNLで言うところのルートオブジェクト。これを式言語の基点とします。TapestryではOGNLの基点をPageオブジェクトとしています。Mayaはページオブジェクトが無いですが、「式言語的」にはVariableResolverが(Tapestryの)Pageと同等の役割をすると思われます(ここ、ひがさんの意見聞きたい。ひがさんのコメントの雰囲気では私と違う捉え方をしている気がするのです。よって自信ちょっと無し)。
  • JSFのPropertyResolverは、その名前が私に誤解させていて、VariableResolverとグループになるものだと思ってました。が、そうではなく、OGNLではPropertyAccessor。今のJSPJSFではアプリケーション毎にひとつだけPropertyResolverが登録されるのですが、Classをキーに複数登録できるとOGNLのPropertyAccessorのように「.」オペレータのオーバーローディングなるカスタマイズされた動きが実現できるのです。これを、JSR245では言ってるのだと思います。公開したサンプル実装ではオフサイド(?)ですがやっときました。このオペレータオーバーローディングはとてもわれわれには重要な機能で、S2Containerとのつなぎなどを後から追加的に実装するための仕組みを支えます。サンプル実装中のS2ContainerPropertyResolverのようなものを、SpringFrameworkPropertyResolverとか、JMXPropertyResolverとかいろいろ作っていけばOKというのがゴール。
  • JSPのExpressionEvaluatorもしくはJSFのValueBindingおよびMethodBindingが式言語エンジンのホストです。JSPはメソッドの手当てがEL中に無いので、MethodBindingに相当する機能がありません。OGNLでは式言語エンジンの中でメソッド対応してしまうので、MethodBindingの機能は式言語「文法」のほうに溶け込んでます。

Sunの実装より、OGNL3は相当先の実装だと思います。ELの仕組みだとKijimunaでのRTTIサポートでやったような作りは難しいんじゃないかなと思います。JSP2.1でやっと追いつくんじゃないかな。ただ、バックワードコンパチに囚われるのと、JSPJSFの2系列の式言語の統合は結構ヘビーでしょう。