[Seasar-user:16099] Re: TeedaAjax+S2DaoでClassCastExceptionが発生します。
Koichi Kobayashi
[E-MAIL ADDRESS DELETED]
2008年 10月 23日 (木) 18:30:14 JST
小林 (koichik) です.
Date: Thu, 23 Oct 2008 17:52:05 +0900
From: "Naoto SHINGAKI" <[E-MAIL ADDRESS DELETED]>
To: [E-MAIL ADDRESS DELETED]
Subject: [Seasar-user:16097] TeedaAjax+S2DaoでClassCastExceptionが発生します。
> 初めまして。お世話になります。
> teedaAjaxよりKumuを利用しPOSTした際にJavaにてS2Daoを使い
> Daoクラスをインスタンス化すると
(略)
> 以下にException発生付近のソースを転記します。
> ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
>
> S2Container container = S2ContainerFactory.create("jp/co/xxx/XxxDao.dicon");
> container.init();
> XxxDao xxxDao = (XxxDao)container.getComponent(XxxDao.class);
>
> ーーーーーーーーーーーーーーーーーーーーーーーーーーーー
ClassCastException の前に,ここで S2Container を
生成してはいけません.
このコードだと,リクエストの度に毎回 dicon ファイルを
読み込んで S2Container が生成されてしまいます.
S2Container は TeedaServlet により初期化済みなので,
リクエストの度に生成する必要はありません.
Seasar2.4 では Dao を dicon に登録する必要は
通常ありません.
XxxDao.dicon が本当に必要でしょうか?
もし必要なら app.dicon でインクルードしてください.
また,Dao を得るのに自発的に S2Container から
取得する必要はありません.
Dao を取りに行くのではなく,設定してもらうのが
Dependency Injection です.
XxxLogic から上記のコードを削除し,
インスタンスフィールド
public XxxDao xxxDao;
または,
private XxxDao xxxDao;
public void setXxxDao(XxxDao xxxDao) {
this.xxxdao = xxxDao;
}
を追加してください.
--
<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 メーリングリストの案内