ConnectionPoolImpl#checkOut() で maxPoolSize を超えて
コネクションを要求されると、現状、空くまで wait() に
なってしまいます。この場合ですと、高負荷サイトにおいては
これにより処理が詰まってしまいます(運用環境によっては
ここで詰まることによりTomcat/Apacheがレスポンスを返すことが
できず、その結果ロードバランサから切り離されたりなどの問題に
遭遇することもあるかと思います)。ここで詰まるより
maxPoolSizeを超えた場合にはExceptionを投げて例外処理で
処理を継続できた方が良い場合もあるかと思います。
たとえば、ConnectionPoolImpl#checkOut()で以下のように
最大プールサイズを超えた場合にExceptionで抜けるような
プロパティ throwExceptionOnExceededMaxPoolSize みたいな
ものがあると上記の問題を回避できると考えています。
変更も限定的なので、デフォルト値をfalseにしておけば
既存のコードに影響を与えないと考えています。
while (getMaxPoolSize() > 0 && getActivePoolSize() + getTxActivePoolSize() >= getMaxPoolSize()) { // 追加: ここから if(throwExceptionOnExceededMaxPoolSize){ throw new SIllegalStateException("ESSR03XX", null); } // 追加: ここまで try { wait(); } catch (InterruptedException ignore) { } }