[Seasar-user:18573] Re: [S2Dao] 単一Daoを2つ宣言してそれぞれのデータソースを切り替えるには?
Koichi Kobayashi
[E-MAIL ADDRESS DELETED]
2009年 10月 2日 (金) 20:00:00 JST
小林 (koichik) です.
Date: Fri, 2 Oct 2009 19:29:13 +0900
From: はっしぃ <[E-MAIL ADDRESS DELETED]>
To: [E-MAIL ADDRESS DELETED]
Subject: [Seasar-user:18572] [S2Dao] 単一Daoを2つ宣言してそれぞれのデータソースを切り替えるには?
> S2Daoについては、FAQ/S2DAOにある「SMART deployで複数データソースに
> 対応するには?」のように daoのサブパッケージではなく、既存の単一Daoを
> 2つ宣言して接続先を切り替えたいのですが、このようなことは可能でしょうか?
>
> 希望としては、以下のようなコードのイメージです。
>
> public class CopyBatch {
>
> private HogeDao fromDao;
> private HogeDao toDao;
>
> public void executeCopyOne(String id) {
> Hoge hoge = fromDao.findUniqueHoge(id);
> toDao.update(hoge);
> }
> }
fromDao と toDao を個別に dicon に登録すれば
可能です.
例えば dao1.dicon に
<component name="fromDao" class="...HogeDao">
<aspect>dao1.interceptor</aspect>
</component>
dao2.dicon に
<component name="fromDao" class="...HogeDao">
<aspect>dao2.interceptor</aspect>
</component>
> SelectableDataSourceProxyも検討したのですが、アスペクトする
> タイミングが今回の場合、思いつきませんでした。
AOP を使うのは,クライアントの属性によって透過的に
DataSource を切り替える場合に便利な例というだけで,
必須ではありません.
public class CopyBatch {
public DataSourceFactory dataSourceFactory;
public void executeCopyOne(String id) {
dataSourceFactory.setSelectableDataSourceName("from");
Hoge hoge = fromDao.findUniqueHoge(id);
dataSourceFactory.setSelectableDataSourceName("to");
toDao.update(hoge);
}
のようにすることも可能です.
でも,これだと分かりにくいだけですね.
--
<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 メーリングリストの案内