[Seasar-user:13619] Re: Teeda のDaoクラスのDIについて

[E-MAIL ADDRESS DELETED] [E-MAIL ADDRESS DELETED]
2008年 4月 8日 (火) 08:25:23 JST


小林様

黒川です。

実は私も小川様同様、試行錯誤している段階でして、ちょうど
似たような悩みを持っておりました。

Teedaの中で、DAOの扱い方なのですが、S2DAOのサンプルなどに
記載されているコーディングを参考に行ってました。


[TestPage.java]
public class TestPage
{
        private static final String PATH = "test.dicon";
        public Employee[] employees;

        doTest()
        {
                S2Container container = S2ContainerFactory.create(PATH);
                container.init();
 
                try
                {
                        EmployeeDao dao
                        = 
(EmployeeDao)container.getComponent(EmployeeDao.class);

                        employees = dao.select();

                } finally {
                        container.destroy();
                }
 
                return Test2Page.class;
        }
}


このような場合だと、Pageクラス全てにdiconファイルのパスを定数で宣言しない
と
いけません。
現在は色々と勉強中のため、いずれはどこかで一括管理するクラスを作成して・・
・
などと考えておりましたが、小林様のメールで、SingletonS2Containerを
使用する例があり、以下のように変更してみましたが、これが適切な
コーディングなのかどうかをご指摘頂けますでしょうか。


1.test.diconを、app.diconにinclude
<include path="test.dicon"/>

[test.dicon]
<components>
        <include path = "dao.dicon"/>
        <component class = "test.dao.EmployeeDao">
                <aspect>dao.interceptor</aspect>
        </component>
</components>

2.TestPage.javaを以下のように変更
[TestPage.java]
public class TestPage
{
        //private static final String PATH = "test.dicon";
        public Employee[] employees;

        doTest()
        {
                //S2Container container = S2ContainerFactory.create(PATH);
                //container.init();
 
                try
                {
                        //EmployeeDao dao
                        //= 
(EmployeeDao)container.getComponent(EmployeeDao.class);

                        EmployeeDao dao
                        = 
(EmployeeDao)SingletonS2Container.getComponent(EmployeeDao.class);

                        employees = dao.select();

                } finally {
                        //container.destroy();
                }
 
                return Test2Page.class;
        }
}


これで以前同様にDBアクセスができ、かつPageクラスからdiconファイルのパス定
数
を除外することが出来ました。


このようなコーディングで問題ないのでしょうか?
もしもっと適切なコーディングがあればお教え頂けますでしょうか。

大変お手数をお掛けしますが、宜しくお願いします。

[E-MAIL ADDRESS DELETED] wrote on 2008/04/07 21:00:05:

> 小林 (koichik) です.
> 
> Date:    Mon, 7 Apr 2008 20:49:07 +0900
> From:    "小川昌幸" <[E-MAIL ADDRESS DELETED]>
> To:      [E-MAIL ADDRESS DELETED]
> Subject: [Seasar-user:13604] Re: TeedaのDaoクラスのDIについて
> 
> >   同じフォルダにtetedoing.javaを作成しました。(これはスレッドです)
> > 
> > 1.tetedoing.javaにDIの記述をしましたが、DIされませんでした。
> 
> tetedoing クラス (?) を dicon に定義すれば
> DI されるようになります.
> 
> Seasar2 で管理しないなら,
> 
> ReceptionDao dao = (ReceptionDao) SingletonS2Container
>     .getContainer().getComponent("receptionDao");
> 
> のようにコンテナから取得することができますが,
> Dao を使うということはトランザクション制御も
> 必要でしょうから,dicon に定義するのがいいと
> 思います.
> 
> 
> -- 
> <component name="koichik">
>     <property name="fullName">"Koichi Kobayashi"</property>
>     <property name="email">"[E-MAIL ADDRESS DELETED]"</property>
>     <property name="blog">"http://d.hatena.ne.jp/koichik"</property>
> </component>
> 
> _______________________________________________
> Seasar-user mailing list
> [E-MAIL ADDRESS DELETED]
> https://ml.seasar.org/mailman/listinfo/seasar-user



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