[Seasar-user:16100] Re: TeedaAjax+S2DaoでClassCastExceptionが発生します。

Naoto SHINGAKI [E-MAIL ADDRESS DELETED]
2008年 10月 23日 (木) 19:05:37 JST


お世話になります。
ご指摘ありがとうございます。

仰るとおり、毎回S2Containerインスタンスを生成しており
DIの意味を亡くしておりました。

御指示いただいた通りに変更して動く事を確認いたしました。

大変初歩的なミスでおはずかしい限りです。
ご指導ありがとうございました。

2008/10/23 Koichi Kobayashi <[E-MAIL ADDRESS DELETED]>:
> 小林 (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 mailing list
> [E-MAIL ADDRESS DELETED]
> https://ml.seasar.org/mailman/listinfo/seasar-user
>


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