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