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