- PR -

コネクションプーリング

1
投稿者投稿内容
るーさん
常連さん
会議室デビュー日: 2003/12/14
投稿数: 28
投稿日時: 2006-09-11 17:01
DBをレプリケーションで運用し、1台を稼動、もう1台を待機系としてます。
1台目のDBサーバーでフェイルオーバーすると、待機系のサーバーに切り替えるようになっています。
Webアプリで、DBのコネクションプーリングを使ってるのですが、フェイルオーバーが起こったときに、コネクションのエラーになります。
どういう対応をしていいのか全く検討がつきません。
何かヒントでもいいので教えて下さい。

コネクションプーリングは、SpringのStandardXAPoolDataSourceを使ってます。
あすか
ぬし
会議室デビュー日: 2006/07/12
投稿数: 309
投稿日時: 2006-09-12 10:13
Springを詳しく知らないので一般論的な回答ですが
(検索してもAPIドキュメントないんだなぁ)
getConnectionしたときに何のエラーが出るか分りませんが
SQLExceptionかな?エラーが出たときに
再度定義ファイル?を読み込んではいかがでしょうか
getObjectInstanceとかで。

こちらで試せなくて申し訳ない
あしゅ
ぬし
会議室デビュー日: 2005/08/05
投稿数: 613
投稿日時: 2006-09-12 11:12
引用:

あすかさんの書き込み (2006-09-12 10:13) より:
SQLExceptionかな?エラーが出たときに
再度定義ファイル?を読み込んではいかがでしょうか


私もSpringの接続プールは知らないので回答ではないですが、

まともなコネクションプールなら、プールから取り出した時に
接続が切れていないか検査する機構が備わっているはずですよ。

例えば、Tomcatなら<Resource validationQuery="">で
必ず成功するはずのSQL(DB依存ですが、"SELECT 0"等)を
指定すれば検査してくれるようになります。
るーさん
常連さん
会議室デビュー日: 2003/12/14
投稿数: 28
投稿日時: 2006-09-21 21:04
間違えてました。
Springではなく、JOTMのStandardXAPoolDataSourceクラスです。

あしゅさんの指摘の通り、コネクションの検証してくれるプロパティがありました。
checkLevelObjectと、jdbcTestStmtです。

しかし、この設定をしてもエラーになってしまいます。
デバックをしてみると、確かにコネクションを取得し直してるようなのですが、
そのコネクションを使ってSQLを実行した際に、
「クローズされた接続です。」というエラーが発生します。

るーさん
常連さん
会議室デビュー日: 2003/12/14
投稿数: 28
投稿日時: 2006-09-25 15:13
色々と調査した結果、コネクションが問題ではなく、XAResourceでエラーになってるようです。
2PCをあまり理解してないのですが、コネクションは再取得できてるようだが、XARecourceが古いままでエラーになってるようです。
コネクションの検証は、checkLevelObjectで出来るようになりましたが、XARecourceについても同様にできないのでしょうか?
1

スキルアップ/キャリアアップ(JOB@IT)