Webサービスが登場した頃から、ロングトランザクションの問題が話題になっていました。
たとえば、こんな風に…
北海道に住んでいる人が、東京で開催されるコンサートに行きたいと考えます。そこで、そのチケットを予約します。
1度のトランザクションで、飛行機搭乗券とホテルの宿泊とコンサートチケットを予約します(この順で)。トランザクションの最後にコンサートチケットを予約しようとして、もし売り切れだった場合、その処理の前で予約した飛行機搭乗券とホテルの宿泊はロールバックできるのでしょうか?(あるいはロールバックできるように作らないといけないのでしょうか?)
WebサービスでもSOAでも良いのですが、データをロックしておくことができなければ、ロールバックはできません。
この人はコンサートに行きたかったわけですから、「飛行機搭乗券がとれました」「ホテルのご予約受け付けました」「コンサートチケットは予約できません」とメッセージを返されても困るわけです。
データはきちんと整合性をもって管理されるべきです。しかし、利用者側の都合でアドホックに期待された整合性まで考慮することは難しいでしょう。
「東京に行ってホテルに宿泊できれば最低限良い、ついでにコンサートも予約できればラッキー」と思っている人にとっては、上記の結果でも困らないわけです。データの整合性は、期待する利用者によって違う場合もあるのです。
携帯電話からJRの新幹線を予約する際、在庫照会して空いている座席を確認した後で、予約申込みボタンを押したときに取れないことだって許されるはずです。
そういった処理が当たり前の時代になってきました。











