T2+Spring+Domaのサンプルを更新しました。アプリの内容・構成についてはこちらのエントリを参照してください。
ソース
SVNを使用する場合は、「http://t-2.googlecode.com/svn/trunk/samples/t2-spring-doma」からチェックアウトできます。
またアーカイブ形式のものは、「http://t-2.googlecode.com/files/t2-spring-doma-0.6.1-ga.zip」からダウンロードできます。
いずれもeclipseプロジェクト形式になっています。
eclipseを使用する場合は、eclipse3.5以上を使用してください。(domaのapt機能が3.5以上でないと動作しないため)
ダウンロード後にリビルドして、bootstrap/samples/SpringDomaSampleServerStart.javaをJava実行すると、アプリが動作します。
0.9.8での変更
ConfigProxy
Doma0.9.8から、ConfigProxyクラスが追加されています。
Daoインターフェースに
@Dao(config = ConfigProxy.class) public interface PersonDao {
と書いておくと、
public class PersonDaoImpl extends org.seasar.doma.jdbc.DomaAbstractDao implements org.t2framework.samples.spring.dao.PersonDao { public PersonDaoImpl(org.seasar.doma.jdbc.Config config) { super(new org.seasar.doma.jdbc.ConfigProxy(config)); }
というコードを生成してくれます。
以前は
@Dao(config = SpringConfig.class) public interface PersonDao {
と書く必要があったため、Dao実装時に使用するConfigを決める必要がありましたが、Configをコンストラクタで取れるようになったので、後でDIすることができるようになり、Dao実装時にConfigを決める必要がなくなりました。
以前のサンプルはstatic変数を使用してDataSourceやDialectを渡していましたが、ConfigProxyが利用できる0.9.8以降はそういった実装が不要になります。
DomaはConfigからはDataSourceやDialect(DBごとの方言)を取得するので、実行時にConfigをSpringから渡すことで、Springで一元管理できるようになります。
AnnotateWith,Annotationアノテーション
AnnotateWithアノテーションをDaoインターフェースに書くことで、生成されるDaoImplに対して付与するアノテーションを指定できるようになりました。
Springの場合
@Dao(config = ConfigProxy.class) @AnnotateWith(annotations = { @Annotation(target = AnnotationTarget.CLASS, type = Repository.class), @Annotation(target = AnnotationTarget.CONSTRUCTOR, type = Autowired.class) }) public interface PersonDao {
としておくと、生成されたクラスは
@org.springframework.stereotype.Repository() @javax.annotation.Generated(value = { "Doma", "0.9.7" }, date = "2009-10-22 01:59:21") public class PersonDaoImpl extends org.seasar.doma.jdbc.DomaAbstractDao implements org.t2framework.samples.spring.dao.PersonDao { @org.springframework.beans.factory.annotation.Autowired() public PersonDaoImpl(org.seasar.doma.jdbc.Config config) { super(new org.seasar.doma.jdbc.ConfigProxy(config)); }
という具合になります。
Springの場合、@Repositoryがついていればcomponent-scanで一括登録可能ですし、AutowiredがコンストラクタについていればConfigをDI出来るので、便利です。
AnnotateWithアノテーションは、Springに限らず、ほかのコンテナと連携するときに役に立つと思います。
Springとの連携は、今回の対応でほぼ期待通りになったかなと思います。id:taediumさんありがとうございますm(_ _)m
eclipseのpluginや@OriginalStatesといったアノテーションも新機能としてあるようなので、こちらもチェケラしたいと思っています。
余談ですが
T2はHTTPのPUTやDELETEを受ける事が出来るので、呼び出されたPageクラスと連動してDomaを呼び出してDBを操作する、RESTっぽいサンプルを作成できないかなと思っています。
@Dao(config = ConfigProxy.class) @AnnotateWith(annotations = { @Annotation(target = AnnotationTarget.CLASS, type = Page.class,elements="/Person")}) public interface PersonDaoPage { }
これはちょっとやりすぎですが。
あとLucyを使ったサンプルも作成しようと思っています。