S_a_k_Uの日記みたいなDB

~サクゥーと呼ばないで~

CannotGetJdbcConnectionExceptionとDB接続の例外

単純にorg.apache.commons.dbcp.BasicDataSource#getConnectionメソッドを、そのまま使ってたのが判明したり。
こいつでコネクション取得せずに、commons-dbcpのレベルでの実装を使ってただけだった。

Connection con = DataSourceUtils.getConnection(dataSource);

CannotGetJdbcConnectionExceptionって結局SpringのExceptionなんで、自前でCannotGetDbConnectionExceptionってなクラス作って、抽象化しちゃうことに。
自前のDataSourceクラスに、getConnectionメソッドをオーバーライドしてラップしてみる。
んで、今のプロジェクト用のDataSourceクラスでは、さらにgetConnectionメソッドをオーバーライドして、HiRDBのコネクションが切れてないかどうかを判定して、切れてたらCannotGetDbConnectionExceptionをthrowするようにしてみたり。
HiRDBのコネクションが切れてるかどうかは、JP.co.Hitachi.soft.HiRDB.JDBC.PrdbConnection#checkSessionメソッドで検出して、切れてるようならorg.apache.commons.dbcp.BasicDataSource#closeメソッドを呼んどいて、再度getConnectionしに行って、ダメならCannotGetDbConnectionExceptionをthrowする。
ってな対応としてみた。


途中でコネクションが切れた → だったらコネクションを開放して、再度取得してみる。
みたいな動作を期待した仕様としてみた。


けど、ダメだ(爆


・org.apache.commons.dbcp.BasicDataSource#closeメソッドは使えねぇ(java.sql.Connection#close()と勘違い)
・JP.co.Hitachi.soft.HiRDB.JDBC.PrdbConnectionが取得できねぇ
とか。
多分この辺りの話と同じ問題だわ。


PostgreSQLとかだと、DBが切断されても、再度コネクションを取得したら、DBと接続されたコネクションが取得できるからそんなことせんでもええんよなぁ〜