Forums: Open Discussion (Thread #6259)

ClusterStatementの問題点 (2004-10-26 22:38 by yuk #11664)

1.タイムアウト待ち
postgresでテストしたところexecuteQueryをかける直前に
DBを落としても、SQLExceptionが発生するまで90秒ほど必要。ちょっと長いなー。

2.setAutoCommit(false)されている場合、単一のStatement
だけフェイルオーバーしても、そのトランザクション内の以前のStatementを再実行しないと意味がない。しかし以前のStatementはすでにclose()されているかもしれないし、パラメータだけ変更して再実行されているかもしれない。

トランザクション内の以前のsql実行をすべて保持して障害時に再実行するには、トランザクション管理クラスを作って
executeUpdate()が呼ばれたときの接続先・sql・パラメータを再度実行させる必要がある。

とりあえず今は時間がないのでsetAutoCommit(false)してある場合のexecuteUpdate()は、フェイルオーバーしない方向で。

RE: ClusterStatementの問題点 (2004-10-28 13:39 by yuk #11683)

タイムアウト待ちの方はOracleだとDBを落とした瞬間に
切り替えが発生するので無問題。

だけど新たにrs.getString()等の時に障害が起きた場合を
想定していなかったことに気づく。これはちゃんと対応しないと
この機能自体の意味がなくなっちゃいそうなので、やるしかないかな。
Reply to #11664

2.の方も解決 (2004-11-01 22:49 by yuk #11728)

setAutoCommit(false)してある場合のexecuteUpdate()
についても、トランザクション開始時点からのすべての
sql文を再実行してフェイルオーバーできるようにした。
Reply to #11664