Re: 某巨大掲示板

国産DIコンテナSeasar その7

689 :デフォルトの名無しさん :2006/11/19(日) 01:44:45
S2Dao+S2(現最新版)でHot Deployをしようとすると、getComponent()時に
「[ESSR0064]クラスXXDaoのコンストラクタが見つかりません」と出てしまいました。
インターフェースなのにクラスとして扱われているようです。
Cool Deployだとちゃんと動くのですが、Hot Deployだと特別な設定が必要なのでしょうか?
diconファイルはresources/以下にあるものをそのまま使っています。

COOL で動いているというのがちょっと気になりますが,詳細が分からないので普通に S2Dao を使うための説明をしてみるテスト.


Seasar2.4 は S2Dao に依存できないので,S2Dao 用の設定は含まれていません.
S2Dao を使えるようにするには,以下の設定が必要になります.


まずは Dao インタフェースに S2Dao のインターセプタを適用するための設定が必要です.
これは customizer.dicon で行います.
customizer.dicon の中にコンポーネント名が daoCustomizer となっている定義があるので,そこを次のように修正します.

customizer.dicon
    <component name="daoCustomizer" class="org.seasar.framework.container.customizer.CustomizerChain">
        <initMethod name="addCustomizer">
            <arg>defaultCustomizer</arg>
        </initMethod>
        <initMethod name="addCustomizer">
            <arg>
                <component class="org.seasar.framework.container.customizer.AspectCustomizer">
                    <property name="interceptorName">"dao.interceptor"</property>
                </component>
            </arg>
        </initMethod>
    </component>

二つめの <initMethod> が追加した部分です.


そして app.dicon (アプリケーションのルートとなる dicon) で dao.dicon をインクルードします.

app.dicon
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE components PUBLIC "-//SEASAR//DTD S2Container 2.4//EN" 
    "http://www.seasar.org/dtd/components24.dtd">
<components>
    <include path="dao.dicon"/>
    ・・・
</components>


これで S2Dao も動くんじゃないかと思います.
ただし,Dao のパッケージには注意してください.

  • ルートパッケージ.dao

になります.
ルートパッケージは convention.dicon に設定します.