[Seasar-user:18584] Re: [S2Dao] 単一Daoを2つ宣言してそれぞれのデータソースを切り替えるには?

はっしぃ [E-MAIL ADDRESS DELETED]
2009年 10月 6日 (火) 15:13:01 JST


小林様

いつも素早い回答ありがとうございます。

いろいろ検証した結果、以下の理由によりSelectableDataSourceProxyを
利用し、Dao実行時にデータソースを切り替えるProxy経由で処理を行うような
コードで実装することにしました。

■ 個別にdiconを書く方法をあきらめた理由
・Daoの数が多いので、diconを書くのが面倒
・SMART deployで独自に既にAspectCustomizerで定義をいくつか追加している

■検証結果のコード
public class CopyBatch {

    public void executeCopyOne(String id) {

        HogeDao fromDao = getDao("dao1", HogeDao.class);
        Hoge hoge = fromDao.findUniqueHoge(id);

        HogeDao toDao = getDao("dao2", HogeDao.class);
        toDao.update(hoge);

    }

    public static <T> T getDao(String dataSourceName, Class<T> daoClass) {

        Object dao =
SingletonS2ContainerFactory.getContainer().getComponent(daoClass);

        T proxy = (T)Proxy.newProxyInstance(daoClass.getClassLoader(),
new Class[]{ daoClass },
                new SelectDataSourceDaoHandler(dataSourceName, dao));

        return proxy;
    }
}

いろいろありがとうございました。。。


2009年10月2日20:05 Koichi Kobayashi <[E-MAIL ADDRESS DELETED]>:
> 小林 (koichik) です.
>
> Date:    Fri, 02 Oct 2009 20:00:00 +0900
> From:    Koichi Kobayashi <[E-MAIL ADDRESS DELETED]>
> To:      [E-MAIL ADDRESS DELETED]
> Subject: [Seasar-user:18573] Re: [S2Dao] 単一Daoを2つ宣言してそれぞれのデータソースを切り替えるには?
>
>> 例えば dao1.dicon に
>>
>> <component name="fromDao" class="...HogeDao">
>>   <aspect>dao1.interceptor</aspect>
>> </component>
>>
>> dao2.dicon に
>>
>> <component name="fromDao" class="...HogeDao">
>>   <aspect>dao2.interceptor</aspect>
>> </component>
>
> あう,2 番目のコンポーネント名を修正し忘れました.
>
> <component name="toDao" class="...HogeDao">
>  <aspect>dao2.interceptor</aspect>
> </component>
>
> です.
>
>
> --
> <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 メーリングリストの案内