play2.1 の DB.withTransaction、 内部で return すると rollback も commit もしてくれないの・・
2013-03-04 01:01:42scalaのブロック内returnと例外の扱いはバグの温床になる気がする…… https://t.co/7wmeHguKGp
2013-03-04 01:08:09あーなるほど。どうなっているべきなんだろか https://t.co/idnwfinTFD https://t.co/avf70XlAvG ここ単にfinally内でrollbackするべきなのか、このままでいいのか、それとも・・・? #play_ja
2013-03-04 01:28:22@xuwei_k 少なくとも NonLocalReturnControl の場合はcommit してほしいです。 try{ block; commit }catch{ rollback } となっている事を期待しててreturnがcatchに行くとか思わなかったです。
2013-03-04 01:33:50@xuwei_k おかしいですね。普通はfinallyにrollback書くような(txはcommit/rollbackで終了)。rollbackするexceptionもある程度カスタマイズ できたほうがいいような。springは→ http://t.co/T7haGFliM4
2013-03-04 01:35:58そういうのあるので「無名関数内でreturnすると内部的には https://t.co/Clw5imRXhQ ControlThrowableという例外投げてる」というのは"returnを使う初心者ほど"知っておく必要があるような https://t.co/B3932KJ8Wo
2013-03-04 01:36:27.@nazoking @yasushia pull req一覧 https://t.co/mLCPd45xO0 みたらなさそうだし、あとissueとかMLとか検索してみて、それでも見つからなかったら、MLで相談かpull reqしちゃったほうがいいですかね・・・ #play_ja
2013-03-04 01:41:07@xuwei_k 一応知ってたレベルだと「例外ならロールバックされるトランザクションがreturnでもロールバックされる」っていうところまで頭が回らなかったです(頭よぎったけどロールバックもされてなかったのではまった……)
2013-03-04 01:46:58.@nazoking git blameしたら https://t.co/1umTmUkfYq 「とりあえず全部まとめてe: ExceptionをNonFatal(e)に置き換えたときのコミット」なので、これでバグ仕込んだ感・・・ #play_ja
2013-03-04 01:50:41@nazoking @xuwei_k http://t.co/773kKtKi9t よく見てないですがこのcommitで漏れたようです。これ以前はfinallyでcloseしてるのでrollback相当になっていたはず。
2013-03-04 01:50:56あ、いや。いいのか。これblockがclose呼ぶのかな。とするとコネクションプールの実装がアレだと浮いちゃうんだろうか
2013-03-04 01:53:45playで catch{ case _:FooException=> //処理 case e=>throw e } とか catch{ case e =>/*処理*/ throw e } とか、前者は省略すればいいし後者はfinally使えばいいと思うのだけどなんなのだろう
2013-03-04 01:57:07@nazoking @xuwei_k すいません。withConnectionのfinallyでcloseしてました。素朴なコネクションプールでなければcommitしてないtxはrollbackされると思われます
2013-03-04 01:57:57https://t.co/77SOg8te84 こうすると、ControlThrowable(scala.runtime.NonLocalReturnControl) をcatchできます
2013-03-04 02:02:01@yasushia @xuwei_k うーん確かに。しかしMySQLとインテグレーションテストの中ではどちらもされなかったです…まあcloseの説明に「トランザクションを明示的にコミットまたはロールバックすることを強くお勧めします」とあるのでして欲しい
2013-03-04 02:04:46しかし、この問題 https://t.co/ADiSDqymiN Stackable-Controller も抱えてるんじゃないか?調べよう。明示的な return の場合はユーザの意図としては commit された方が嬉しいよね多分。
2013-03-04 02:16:04@xuwei_k 明示的に return している場合はユーザの意図としては正常に終了させたつもりだと思うので rollback より commit の方が適切じゃないかと思います。returnをExceptionで実現してるのはあくまで Scalaの実装の都合ですし
2013-03-04 14:59:05play の DB.withTransaction の件 http://t.co/aOQvq6YIFv pull req した https://t.co/EQeCD8dzvA
2013-03-06 08:16:55