- shin1ogawa
- 1799
- 0
- 0
- 0
ImplicitTransactionManagementPolicyってデフォルトはどっち?どこで指定するの? #appengine
2010-01-07 18:15:44@WdWeaver おおそれです。はじめに設定するのかー。DatastoreServiceのインスタンスを2個取るとかもありか。意味あるか知らんけど。
2010-01-07 20:06:49ImplicitTransactionManagementPolicyのNONEはtxなしで複数putした場合に一部のエンティティだけが更新されるかもしれないということ?AUTOは全部更新or全部そのまま。1件putの場合は違いなし。であってる? #appengine
2010-01-07 20:12:52delete(keys)で500件とか削除しようとしてタイムアウトのエラーになったけど途中まで消えてた。ってことはあったからデフォルトNONEか? #appengine
2010-01-07 20:20:19@urekat ImplicitTransactionManagementPolicyのAUTOとNONEはjavadoc通り、current txなしで、putやdeleteを呼び出したときにtxスコープで呼び出されるかどうか #appengine
2010-01-07 20:35:32ImplicitTransactionManagementPolicyがAUTOのとき、current txがあり、tx引数ありのputやgetをtxに明示的にnullを指定して呼び出しても自動的にtxが開始される #appengine
2010-01-07 20:37:35ImplicitTransactionManagementPolicyがAUTOで自動生成されたtxはメソッドの呼び出しが終わるときに自動的にコミットされる #appengine
2010-01-07 20:38:10やっぱりデフォルトNONEじゃないですかね http://bit.ly/5zURGR #appengine
2010-01-08 01:41:17@ashigeru keyの配列を作って、トランザクション指定なしでdelete(keys)した感じです
2010-01-08 01:44:39@urekat 手前で提示されてたように、トランザクションスタックのトップを使ってればAUTOで、そうでなければNONEってことですよね>implicit tx policy
2010-01-08 01:51:51@ashigeru AUTOだとすれば、delete(keys)が自動的に作られるtxの中で実行されるので途中までってことはないはず。あと、AUTOで自動tx使ってたとしてもcurrentTxはdeleteからもどる前にcommitされているのでtx stackには現れないすよね
2010-01-08 02:13:56@urekat AUTOでさらにJavadocを信用するなら、複数のEGに対するdeleteは失敗してほしいですね。ちょっとこっちでも実験してみます
2010-01-08 02:18:17@urekat あ、もしかして自動Txってのの解釈が私と @urekat さんで異なってるかも。その辺含めて検証してみます
2010-01-08 02:19:44@ashigeru 自動tx=ImplicitTransactionManagementPolicyがAUTOのときにdelete/get/putの内部で勝手に始まって、終わってから返ってくるtxのことをいってます。で、たぶん途中まで消えた現象はNONEな環境でやってます
2010-01-08 02:25:27currentTx, 明示的に渡すtx, AUTOの時に使われる見えないtx の3つがある。であってるかしら。 #appengine
2010-01-08 02:28:22@urekat 私もその理解。Javadocを何度読んでもそうですね > "currentTx, 明示的に渡すtx, AUTOの時に使われる見えないtx の3つがある"
2010-01-08 02:33:52@urekat なので、複数EGにまたがるdeleteをbatchで実行した場合、AUTOなら常に失敗してほしい。NONEなら部分的に失敗してもいい、って感じです
2010-01-08 02:35:14@urekat 動作はあきらかにNONEでした。"DatastoreConfig.DEFAULT.getImplicitTransactionManagementPolicy().toString()"でも確認できます #appengine
2010-01-08 02:40:52@urekat ついでにAUTO渡したら期待する動きになりました。トランザクションスタックが空で、 "delete(k1, k2)" やったらエラーに。 #appengine
2010-01-08 02:45:35#appengine tips RT @ashigeru: @urekat 私もその理解。Javadocを何度読んでもそうですね > "currentTx, 明示的に渡すtx, AUTOの時に使われる見えないtx の3つがある"
2010-01-08 02:45:55@urekat ImplicitTransactionManagementPolicyのドキュメントにくどいくらい書いてありますが、Txスタックが空で複数EGに対するbatchオペレーションしたときも、作成されるTxは一つだけらしいです。これは確実にエラーになります。
2010-01-08 02:48:59@ashigeru http://bit.ly/5E1S2b くどい該当箇所はこれ。AUTOを選んでいてもtxを渡すget/put/deleteにtx=nullを渡せばtx無しで実行できるぽい。
2010-01-08 03:02:41