2005-08-30 [長年日記]

[Java]DBCPの無応答問題

org.apache.commons.dbcp.PoolableConnectionFactory#makeObject()がsynchronized宣言されているため、その内部のConnectionFactory#createConnection()が1スレッドでも無応答になると、後続のmakeObject()を呼ぶスレッドが全部待ちになってしまう。

ConnectionFactory#createConnection()が無応答にならなければ良いのだが、障害時にタイミングによってはDBからのread待ちになる場合がある模様。こうなるとOSのsocketタイムアウトまで固まりっぱなし。

最新のtrunkでも変わっていないようだし、どうしたものかなぁ・・・

[Java] Oracle JDBCドライバにオブジェクトの自動クローズ処理を追加する

artonさんの記事。Proxyを使った実装例がすばらしく、面白く読めました。

[]