QA@IT

ネストされたトランザクションにおけるコネクションプールの設定について

3642 PV

いつもお世話になります。

ネストされたトランザクションにおけるコネクションプールの設定についてお尋ねします。
SpringFrameworkを利用すると、以下のアノテーションの設定でトランザクションをネストさせることが可能です。
※実行中のトランザクションと分けるために、別のコネクションを取りに行くと理解しております。

@Transactional(propagation = Propagation.REQUIRES_NEW)

このとき、例えばコネクションプールにDBCPを利用していたとして、DBCPのmaxActiveの設定を2にしたとします。
ある処理でネストされたトランザクションを伴う処理が走り、仮にトランザクションA、トランザクションBとします。
(トランザクションAの中にトランザクションBがネストされている想定)

同時にトランザクションAが2リクエスト到達し、ネストされたトランザクションBを開始しようとした場合、DBCPのmaxActiveの上限に達しているため、トランザクションBが開始できず、後続の処理のトランザクションも開始できないため、Tomcatがハングアップしてしまいます。

DBCPの設定にあるmaxWait、testOnBorrowなどを試しましたが、DBCPがコネクションを解放してくれず、悩んでおります。
ネストさせている以上、maxActiveを上げるしかないのかと考えておりますが、皆さま、どのように考えておられるのか、もしくは対応されているのかと思い、質問させて頂きました。

ウォッチ

この質問への回答やコメントをメールでお知らせします。