[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 メーリングリストの案内