413が思うにXidというのは2層コミットを行う際に、トランザクションモニターが作成するトランザクションIDで、
セキュアやコミット、ロールバックを行う際にトランザクションリソースに対してトランザクションリソースが
保持するトランザクションを特定させるためのIDだと思うのですよ。
なのでトランザクションリソースの「トランザクション」とトランザクションモニターの「トランザクション」は
スコープが違うんじゃないかと。
そもそもXA手順が当初想定していたのは同一のデータを同時に複数のサイトに書き込むような冗長構成の
システムだと思うんですね。
EJBがXA手順を利用してトランザクション管理を行うことに関してはEJBの仕様として問題があるというような
記事をどこかで読んだ気がします。
そんときは理由がわかんなかったけどひょっとしたら399のような状況が発生してしまうことがあるからという
ことなのかもしれませんね。
そうするともうひとつ疑問が湧いてきました。
「EntityBeanをCMPで更新したあと同一トランザクションでそのEntityBeanを再度更新できるのは何でだ?」
キャッシュなしのパススルーの状況です。当然413的にはデッドロックですが、更新できます(あたりまえ)。
そこで今日一日考えてみたのですが、CMPの機構は414の機能を実装しているのではないかなと。
もしくは413がでたらめを言っているかです。
ここらへんはCMPの実装方式としてEJBの仕様書に書いてありそうなんですがね・・・・。ちょっと調べてみます。