- - PR -
コネクションプーリング
1
投稿者 | 投稿内容 | ||||
---|---|---|---|---|---|
|
投稿日時: 2006-09-11 17:01
DBをレプリケーションで運用し、1台を稼動、もう1台を待機系としてます。
1台目のDBサーバーでフェイルオーバーすると、待機系のサーバーに切り替えるようになっています。 Webアプリで、DBのコネクションプーリングを使ってるのですが、フェイルオーバーが起こったときに、コネクションのエラーになります。 どういう対応をしていいのか全く検討がつきません。 何かヒントでもいいので教えて下さい。 コネクションプーリングは、SpringのStandardXAPoolDataSourceを使ってます。 | ||||
|
投稿日時: 2006-09-12 10:13
Springを詳しく知らないので一般論的な回答ですが
(検索してもAPIドキュメントないんだなぁ) getConnectionしたときに何のエラーが出るか分りませんが SQLExceptionかな?エラーが出たときに 再度定義ファイル?を読み込んではいかがでしょうか getObjectInstanceとかで。 こちらで試せなくて申し訳ない | ||||
|
投稿日時: 2006-09-12 11:12
私もSpringの接続プールは知らないので回答ではないですが、 まともなコネクションプールなら、プールから取り出した時に 接続が切れていないか検査する機構が備わっているはずですよ。 例えば、Tomcatなら<Resource validationQuery="">で 必ず成功するはずのSQL(DB依存ですが、"SELECT 0"等)を 指定すれば検査してくれるようになります。 | ||||
|
投稿日時: 2006-09-21 21:04
間違えてました。
Springではなく、JOTMのStandardXAPoolDataSourceクラスです。 あしゅさんの指摘の通り、コネクションの検証してくれるプロパティがありました。 checkLevelObjectと、jdbcTestStmtです。 しかし、この設定をしてもエラーになってしまいます。 デバックをしてみると、確かにコネクションを取得し直してるようなのですが、 そのコネクションを使ってSQLを実行した際に、 「クローズされた接続です。」というエラーが発生します。 | ||||
|
投稿日時: 2006-09-25 15:13
色々と調査した結果、コネクションが問題ではなく、XAResourceでエラーになってるようです。
2PCをあまり理解してないのですが、コネクションは再取得できてるようだが、XARecourceが古いままでエラーになってるようです。 コネクションの検証は、checkLevelObjectで出来るようになりましたが、XARecourceについても同様にできないのでしょうか? |
1