-3世代目

合間&夜進行のIkushipeですが実はこっそりと3世代目になってます。先にリリースした0.1と0.2、さらには現在のストリームの0.3はそれぞれコードベースが違うものになってます。いろいろ気楽な中でアイディア盛り込んでますが、0.3のストリームでは全部POJO/POJIでデザインしました。JSPカスタムタグも極最小限のみAPIに拘束されてますが、基本はPOJO/POJIです。

public class FooTag extends IkushipeTag {
  public FooTag() {
    super(FooComponent.class);
  }
@View.Component
public interface FooComponent {
  @StartHandler
  boolean start(Writer out);
} 

実装のためのコンテキストとかはDIで取得するか、メソッドの引数定義に書いておけばIkushipeのほうで適切に引き渡します。上記のFooComponentの場合、引数にWriterがあるので、マジックコンポーネントとしてフレームワークが呼び出し時に書き出し用のWriterを補完します。DIコンポーネントのキーを引数にとれば、コンテナから自動で取得してきて引き渡されます。
狙いの一つは、複数プラットホームへの展開性です。JSFのUIComponentTag-UIComponentのような基本構造に、POJOでやるための工夫を付け加えた仕組みになってます。こうすることによって、MayaaのProcessor-IkushipeのViewコンポーネントという組み合わせも工数少なくフォローできるようにしようと考えています。もしかするとVelocityもやるかもしれない。
もうひとつの狙いは、ViewのコンポーネントをPOJOに持っていくことでテストがしやすくなる(。。。という流行をフォローする)こと。FooTagの例はJSPタグなので仕様よりこのぐらいまでしかもっていけてませんが、MayaaだとMLDというTLDより機能の多いものをすでに用意しているので、IkushipeのViewコンポーネントを汎用のMayaaプロセッサに載せてテンプレに適用。これはMayaaJSF対応であるMayaaFacesにて、大量のJSFコンポーネント群を小工数で網羅するために投入しておいたものなのですが。。。

<library uri="ikushipe">
  <processor name="Foo" 
        class="ikushipe.component.mayaa.IkushipeProcessor">
    <property name="component"
            final="ikushipe.sample.component.FooComponent"/>
  </processor>
</library>

こういったMLD定義を配置することによって、テンプレ上で特に意識することなく他のプロセッサと同様の記述で、POJOをぶち込むことができます。このPOJOベースなプロセッサはIkushipeからは独立している仕組みで、Ikushipeに限らずにMayaa上で単体使えます。
こういった実験的なことで手をしばらく動かしてみて後、未踏事業終了後(3月以降)にMayaaの新バージョンストリームに着手したいと、ほのかに思ってます。MayaaではユーザーアプリケーションでJavaをあまり書かせないので、内部構造を大きくバージョンアップしてもバックワードコンパチを守ることが可能と思ってます。すでにMayaaを実案件に投入してますので、いいかげんなことはできません(笑。