[Seasar-user:3345] Re: 接続先DBを動的に変更する

Hikaru Taniguchi [E-MAIL ADDRESS DELETED]
2006年 3月 9日 (木) 09:20:49 JST


谷口です。

私もアプリ起動中の動的な接続先データベースの変更
(スキーマもDBMSも完全にコンパチで拠点だけ2つある(テスト系:本番系のよう
な)イメージ)
をしています。

方法で実施しています

  1. connectionPoolを複数設定 (接続先ごとに)
  2. DataSourceを継承したクラスを作成
  2-1. connectionPoolを動的に変更できるsetterを準備しておく
  3. 必要なときに setterを読んで接続先を変更する
  4. あとは S2Daoでもなんでも...

ただし、この方法でS2Daoの接続先を変更する場合には、複数の接続先はDBMS
も含めてほぼ?コンパチである必要があると思います。
(DBMSの情報を取得していますから > S2DaoInterceptor)

ですので、ご質問の内容で driverClassまで置き換えることが前提となってい
るようですのでこの方法ではS2Daoは誤動作する可能性があると思います。
(DaoMetaDataImplのコンストラクタ内でDBMS情報を取得しているようです)

Daoインタフェースから参照しているエンティティも同様ですので、テーブル
構造が微妙に違う場合も同様の問題がありますね.

当方はWebアプリということもあり以下のようなことになっています

  a. sessionスコープの "コネクション先情報" コンポーネントを用意
  b. 継承したDataSourceから sessionスコープの上記コンポーネントをget
    (するとユーザーごとの接続先データベースが取得できる)
  c. connectionPoolのsetterは この"コネクション先情報"コンポーネントに
     格納する (=sessionに格納される)

このコンポーネントは ConnectionPoolのフィールドを1つだけ持つJavaBeanで
充分です。

やり方としてはエレガントではないかもしれませんがいまのところ機能してい
ます。

ご質問の意味を外してたらごめんなさい。

At Thu, 09 Mar 2006 03:34:42 +0900,
Matsukaze Takashi <[E-MAIL ADDRESS DELETED]> wrote:
> 
> 松風と申します。
> 
> j2ee.diconで定義しているxaDataSourceのdriverClassNameや、URLなどの値
> を、他外部ファイルの値にプログラム内で置き換え、変更後はその変更した
> 値でDBにアクセスすることは可能でしょうか?
> 
> 例)
>  ・j2ee.diconファイルの情報
>    driverClassName =oracle.jdbc.driver.OracleDriver
>    URL = jdbc:oracle:thin:@xxx:1521:yyy
>      :
>     
>       ↓ 動的に、外部ファイルの内容に置き換えたい。
>     
>  ・外部ファイルの情報
>       driverClassName =org.postgres.jdbc.driver.PostgresDriver
>      URL=jdbc:postgresql://localhost:5432:yyy
> 
> j2ee.dicon 一部抜粋 ---------
> 
> <component name="xaDataSource" class="org.seasar.extension.dbcp.impl.
> XADataSourceImpl">        
> 	<property name="driverClassName">
>           "oracle.jdbc.driver.OracleDriver"        
>        </property>
>        <property name="URL">            
>           "jdbc:oracle:thin:@xxx:1521:yyy"        
>        </property>
>        <property name="user">
>          "aaa"
>        </property>  
>        <property name="password">
>          "bbb"
>        </property>
> </component>
> 
> -----------------------------
> 
> なぜ上記のような質問をしたかと言いますと、現在「S2DAOを使用しDBにア
> クセスするサーバ常駐プログラム」を開発しており、設定ファイルなどを使用
> して動的に接続先DBを変更できる仕様を検討しているためです。
> 
> 以下URLに記載されているように、DAOクラスにてprivate変数にDataSource
> を定義して、コネクション取得時にURLなどの情報を変更することもできそ
> うですが、なるべくDAO実装クラスを書きたくありません。
> (DAOインタフェースのみで対処したい)
> 
> http://www.seasar.org/dbcp.html
> 
> 
> _______________________________________________
> Seasar-user mailing list
> [E-MAIL ADDRESS DELETED]
> https://www.seasar.org/mailman/listinfo/seasar-user
> 
> 
--
Hikaru Taniguchi <[E-MAIL ADDRESS DELETED]>



Seasar-user メーリングリストの案内