[DOMA-315] コネクションを閉じる前にAutoCommitが必ずtrueになる Created: 2014-07-24  Updated: 2014-08-25  Resolved: 2014-08-25

Status: Closed
Project: Doma
Component/s: Core
Affects Version/s: 1.37.0
Fix Version/s: None

Type: Improvement Priority: Major
Reporter: bufferings Assignee: taedium
Resolution: Won't Fix Votes: 0
Labels: None


 Description   

Doma1のLocalTransaction内で
コネクションを取得する際にAutoCommitをfalseにして
コネクションを閉じる前にAutoCommitをtrueにしていますが
元々デフォルトでAutoCommitがfalseの場合もtrueにしているので
元々falseの場合はfalseのままがいいなとおもいました。

コネクションプールを使っているときに
DomaのLocalTransactionを使ったあとに
プールから取り出したらAutoCommitがtrueになっていてしばらく悩みました

って言っても、テストのときくらいしか
そんなことしないので全然深刻じゃないです。
もしできれば対応していただけると嬉しいです。



 Comments   
Comment by taedium [ 2014-08-25 ]

> その例外は出しても良い例外だと思います

DomaのLocalTransactionの仕様として、アプリのfinallyブロック内でのメソッド呼び出しによってConnectionがcloseされることがあります。
そのため、Domaではclose時に例外はスローしない方針にしています(スローされる挙動はできる限り避け、スローされてもログ出力にとどめる)。
こうしている理由は、アプリのtryブロック内でスローされ得る例外の上書きを避けるためです。

> このままwon'tfixでcloseでも問題ありません!

ありがとうございます。
了解しました。

Comment by bufferings [ 2014-08-24 ]

ありがとうございます。

自分の意見としては、その例外は出しても良い例外だと思います。記載してくださっているISSUEがWon'tfixでクローズされているように、それは仕様だからです。

ですが、自分としては挙動とそうなっている理由を理解できたので満足しました。ありがとうございます。このままwon'tfixでcloseでも問題ありません!

Comment by taedium [ 2014-08-23 ]

すみません。コメントに気づかず返事が遅れました。

この修正は入れないでおきたいと考えています。

AutoCommitをfalseにしてcommitもrollbackしないでcloseすると例外が発生するケースがあるからです。
この例外はAutoCommitをtrueに戻すことで回避できます。
https://issues.apache.org/jira/browse/DERBY-2886

DomaのLocalTransactionではほとんどのケースでclose前にcommitもしくはrollbackするのですが、
ごく一部のケースでcommitもrollbackもせずにcloseする場合があります。
(KeepAliveLocalTransactionクラスのdestroyメソッドが呼ばれた場合)

コネクションプールを使っているときに
DomaのLocalTransactionを使ったあとに
プールから取り出したらAutoCommitがtrueになっていてしばらく悩みました

コネクションプールのほうで、コネクションのリフレッシュのようなことはできないでしょうか?
払い出されたコネクションのAutoCommitが変更されても、プールに戻されたら
元に戻し、次の利用者へ影響を与えないといったような。

Generated at Fri Apr 19 09:45:56 JST 2024 using Jira 9.15.0#9150000-sha1:9ead8528714127d8cfabf2446010d7e62c0a195c.