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