[Seasar-user:21144] 動的なデータソース切り替えについて

大久保俊 [E-MAIL ADDRESS DELETED]
2011年 11月 16日 (水) 10:19:23 JST


お世話になっております。大久保と申します。

現在、SAStruts+S2JDBCを使ってウェブアプリケーションを作成しています。

今回、『Seasar2徹底入門』の7.3章の「動的にデータソースを切り替える」を参考に、
DBの振り分け(マスタ、スレーブ)をしようと考えています。
(SelectableDataSourceProxyを使う方法です。)
具体的には、Actionのメソッドに対してアノテーションでマスタ向けかスレーブ向けかを指定し、
SwichDataSourceInterceptorでアノテーションの情報を元に、
dataSourceFactory.setSelectableDataSourceName(dataSourceName)を実行しています。
(アノテーションがない場合は、マスタ向けとしています。)

デフォルトではJdbcManagerやDataSourceFactoryがシングルトン(デフォルトのライフサイクル)のため、
一度dataSourceFactory.setSelectableDataSourceName(dataSourceName)を実行してしまうと、
次のリクエストから同じDBのコネクションを取得してしまいます。
また、複数スレッドから同時アクセスされる場合、タイミングによっては、
適切なDBへのコネクションが取れないのではないかと思います。
(間違っていたら、ごめんなさい。)

この対応として、JdbcManagerのライフサイクルをrequestに変更しようかと考えています。
動作やパフォーマンスの面で、この方法で大丈夫でしょうか?
もし、もっと良い方法があれば、ご教示いただければ幸いです。

以下、実行環境です。
Java 1.6
Tomcat 6.0
Seasar 2.4.41

分かりにくい説明で申し訳ございませんが、よろしくお願いいたします。
-------------- next part --------------
HTMLの添付ファイルを保管しました...
URL: <http://ml.seasar.org/archives/seasar-user/attachments/20111116/790ab7db/attachment.html>


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