-S2のプラグイン原型

まさたか版(agtさんの公式版との合流方法がまったく調整できていないのでR&D的なローカルエディションです)S2プラグインの原型がやっとこさ見てもらえるようになりました。今、XML文法のバリデーションと、argエレメントのエレメントボディを何も書かなかったときのワーニングだけのバリデーションしかしませんが、私が着手時にぼんやりと思い描いていたものの形の一部が動かせる(注意!まったくもって一般利用に耐えなく、EclipseプラグインやS2の周辺ソリューションに興味や一家言お持ちの方でないと、ゴミのような代物です)ようになったものを毎度のことですが恥をしのんで公開します。プラグイン内部にSeasar2も使ってますよ。ということで、酔狂な方は、以下のアドレス、
http://www.fiberbit.net/user/kurihara/
をご覧ください。一応、agtさんのパッケージ構成にあわせて、org.seasar.eclipse.core/uiとしました。開発環境はeclipse3.0M8(会社)およびeclipse2.1.3(家)の間をいったりきたりしてます。アップしたバイナリは最後に3.0M8からアーカイブ出力してます。個人的には、これにプラスでクラスパスコンテナ周りと、Outline&プロパティのアダプターとウィザードとGEFエディタまで持っていきたいけど、いつになるかな。ここんとこ、社長モードが詰まってるのです。本命はS2Daoのサポートツール!なんですけどね。

-Tapestryサービス(3)

AbstractServiceのconstructLink(IRequestCycle, String, String, Object, boolean)の第三引数であるString配列は、サービスコンテキストとなり、スラッシュで区切られてserviceパラメータの値となります。すなわち、new String[] {"aaa", "bbb", "ccc"}であれば、?service=ServiceName/aaa/bbb/cccというエンコードがされます。また、このサービスコンテキストの値は、getServiceContext()により、Stringの配列として再取得できます。
一方、第四パラメータのObjectの配列は、サービスパラメータと呼ばれ、過日解説したものです。こちらはDataSqueezeというTapestry内部のユーティリティによって、ObjectからURLの一部となる文字列に変換され、また文字列からObjectに戻す仕組みを提供しています。
Tapestryの最大のカスタマイズポイントはここにあります。また、ページ遷移の挙動にTapesryの一番の誤解とフレームワーク利用の間違いがあるのですが、このサービスの仕組みとあわせて、Tapesryのステートの考え方を再確認しなければなりません。結論から先に言うと、Tapestryはページオブジェクトとそのイベントハンドラ的なリンクやフォームのつくりから誤解しやすいのですが、フレームワークソリューションはすべてステートレスなつくりになっています。Tapestryの一番の利点と難点は背中合わせに、このステートレスな考え方にあり、その考え方の基盤と標準に提供されているフレームワークの内容から、要件にあわせて生産性を出すためのひとつの抜け道がサービスの理解と独自サービスの実装にあります。