[Seasar-user:326] Seasar V2

B isid.co.jp Yasuo Higa higa
2004年 1月 10日 (土) 17:41:01 JST


ひがです。

先日、Nazuna 2004の話をしたばかりですが、
思うところがあって、Seasar自身をLightweight Container
上で再構築しようと思います。
ProxyベースのAOPでいく予定です。

雰囲気はこんな感じです。

Fooというサービスがあった場合に、Fooインターフェースと
FooImpl実装クラスに分離します。
クライアントからは次の様に利用します。
Foo foo = (Foo) ApplicationContainer.getService(Foo.class);
foo.aaa(...);
この場合、実際には、FooのProxyが返ります。
インターフェースごとにシングルトンです。

Proxyはメソッドの呼び出しをインターセプトできるので、
Interceptorとして、トランザクション制御、
リモート呼び出し、O/Rマッピング機能を
提供する予定です。

AOPの設定は、interfaceごとにXMLで行います。
大規模な開発でも、XMLの更新がぶつからない
ようにするためです。
グローバルなAOPの設定もできるようにする予定です。
XMLがない場合あるいは、メソッドの定義がない場合は
Interceptorなしになります。

<method name="aaa" transAttribute="Required"/>

<method name="bbb" transAttribute="Required">
  <query>
    <resultSetHandler className="BeanHandler">
      <property name="beanClassName" value="aaa.Hoge"/>
    </resultSetHandler>
    SELECT ... FROM emp WHERE empno = ?{empno}
  </query>
</method>

<method name="ccc" transAttribute="Required">
  <interceptor className="...">
    <property name="..." value="..."/>
  </interceptor>
</method>

上記の場合、Foo.bbb(int empno)はFooImplは存在せず、
この前メールに書いたみたいな、シンプルSqletみたいなものが
実際に呼び出されることになります。

実装クラスは、インテーフェース名 + Implをデフォルトとし、
XMLの定義で切り替えられるようにしたいと思います。
FooImpl.classに変更があった場合には、ホットデプロイ可能とします。

Seasarサービスは、Eclipseのプラグインのような感じで、
あるディレクトリにコピーすればそのまま使える形に
したいと思います。

こんな機能欲しいなというものがあったら、
どしどし言ってください。
よろしくお願いします。
---
Yasuo Higa <[E-MAIL ADDRESS DELETED]>
INFORMATION SERVICES INTERNATIONAL-DENTSU,LTD.



Seasar-user メーリングリストの案内