[Seasar-user:19397] Re: dataSourceNameはnullあるいは空であってはいけません

Koichi Kobayashi [E-MAIL ADDRESS DELETED]
2010年 2月 27日 (土) 00:00:00 JST


小林 (koichik) です.

Date:    Fri, 26 Feb 2010 21:15:41 +0900
From:    吉村 実 <[E-MAIL ADDRESS DELETED]>
To:      <[E-MAIL ADDRESS DELETED]>
Subject: [Seasar-user:19396] Re: dataSourceNameはnullあるいは空であってはいけません

> http://s2container.seasar.org/2.4/ja/jdbc.html
> の「同じ種類のデータソースを動的に切り替える」になりますでしょうか。

既存の設定では一つの Dao クラスのインスタンスを
複数登録して異なるデータソースを使い分けている
ようなので,「同じ種類」であるように見えます.

> 以前のバージョンにおいては、
> 「プログラムでは、org.seasar.extension.datasource.DataSourceFactoryを使って
> データソース名を設定します。」
> のようなことはやっていないようで、

SelectableDataSource を使う代わりに異なる
Dao のインスタンスを使い分けているからですね.
それよりは SelectableDataSource を使う方が
いいのではないかと思います.

その場合,Dao の設定は一組だけでよくなります.
hogeX.dicon と hogeA.dicon を統合して hoge.dicon
だけにしてください.

Service を安直に修正するなら以下のように
なります.

> 「TttListCommonServiceImpl」
> 
  public DataSourceFactory dataSourceFactory;

> public List<tttData> searchByCondition4List( AaaForm aaaForm) {
    if ( referDB.isHogeADB() == true ) {
      dataSourceFactory.setSelectableDataSourceName("xxx");
    else {
      dataSourceFactory.setSelectableDataSourceName("yyy");
    }
> 
> 	// 検索実行
> 	return aaaForm.getDataDao().findBySearchList( );
> }

参照する DB がリクエスト単位などで決定できるなら
ドキュメントにあるようにインターセプタを使う方が
よりよいと思います.

> 下記※2のようなやり方をしているようなのですが、
> バージョンアップに伴い、このやり方ではダメになったりすることは
> ありますでしょうか。

いいえ.普通に動くと思います.


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