#渋谷Java @takezoen さん。「MySQLの例; XA START → XA END → XA PREPARE → XA COMMIT」 / 実際にXAを打鍵する例は見たことなかった。おもしろい。
2014-05-31 17:48:08#渋谷Java @takezoen さん。「XADataSourceはさまざま最適化している。最後のリソースはprepareする必要がない ← 非XAリソースでもひとつだけならXAトランザクションに参加できる」 「……で、こっからが本題」 / いよいよ
2014-05-31 17:50:27リカバリーマネージャー!RDBMSの中でやっているようなことを、トランザクションマネージャー側でやってるみたいな #渋谷java
2014-05-31 17:52:33#渋谷Java @takezoen さん。「XAプロトコルにおいて、prepare後にDB側が死亡したらどうするか。→ XAなDBが、復旧時にリカバリマネージャが長時間変化しないリソースを検出してどうにか復旧する」「リカバリマネージャがあれば安心」「……ではありません」
2014-05-31 17:54:42トランザクションログを書き込む前に落ちたらダメー。ログの書き出しってリソース更新の後で確定なのかな? #渋谷Java
2014-05-31 17:56:28#渋谷Java @takezoen さん。続き) 「ログが破損するようなケースだとリカバリマネージャがあきらめるケースがある。手動で commit または rollback すべきか判断して処理する必要がある」 / 運用さんで判断つかず→SEコール、的な。
2014-05-31 17:56:51#渋谷Java @takezoen さん。「手動リカバリの例。MySQLだと、XA RECOVERコマンドで一覧を見て、もう息してないXAトランザクションをみつけて、手動で XA COMMIT または XA ROLLBACK することで復旧できる」
2014-05-31 17:58:33トランザクションログ書き込み中にダウンしてしまった場合はリカバリマネージャでも対処できない。最後はログとDB見ながら泥臭く手で対処するしかない。ツライなぁ。。。 #渋谷Java
2014-05-31 17:57:05なるほど、Seasar2はトランザクションログを書いていない。そもそもS2JTAって2フェーズコミットをサポートしてたっけかな!? #渋谷Java
2014-05-31 17:59:37MySQLのXAコマンド。XA RECOVERで調べて、XA COMMIT とかXA ROLLBACKとか。 #渋谷Java
2014-05-31 18:00:50#渋谷Java @takezoen さん。「Seasar2が持っているXADataSourceImplはなんちゃってXAなので、バックエンドがXADataSourceを持っているならそれを明示的に指定しておくべき」
2014-05-31 18:02:16Seasar2のS2JTAはXAをエミュレートしてるだけなので、2フェーズはなんちゃって。JDBCドライバのXADatasourceかアプリケーションサーバーのJTAを使うべき。 #渋谷Java
2014-05-31 18:02:21