![]() |
OpenSOAP Project The Middleware as Platform for IT Application Services | |
メニュー
-トップ |
OpenSOAP Transaction Document
トランザクション管理サービス本体は,src/tools/Transaction/にあります. 1.概要OpenSOAP Transaction Service(以下,トランザクションサービス)は,以下の手順によって,簡易的な2フェイズコミットメント・トランザクションを実現します.
トランザクションサービスは,次のような特徴を持っています.
OpenSOAP トランザクションの概要 トランザクションサービスを利用するためには,クライアントと,トランザクションサービスから接続される各サービスがトランザクションサービスに対応している必要があります. 2.クライアント仕様(リクエストメッセージ)クライアントは以下の仕様に従ったリクエストメッセージを送信できる必要があります. 2.1.トランザクション制御記述ブロック
リクエストメッセージのBody(<SOAP-ENV:Body>)に含まれる
最初のBodyblockは<TransactionControl>である必要があります(例1).
<TransactionControl>ブロックのnamespaceは
"http://services.opensoap.jp/transaction/"であることが望ましいです. 2.2.トランザクションヘッダブロック
各サービスに送信されるべきメッセージのヘッダ部が存在する場合,
トランザクションヘッダブロック<TransactionHeaderBlock>の要素として記述します(例1).
この部分に記述された要素は,各サービスに送信されるSOAPメッセージの
ヘッダブロック(<SOAP-ENV:Header>の直下のブロック)として挿入されます.
<TransactionHeaderBlock>ブロックのnamespaceは
"http://services.opensoap.jp/transaction/"であることが望ましいです. 2.3.トランザクションボディブロック各サービスに送信されるべきメッセージのボディ部は, トランザクションボディブロック<TransactionBodyBlock>の要素として記述します(例1). この部分に記述された要素は,各サービスに送信されるSOAPメッセージの ボディブロック(<SOAP-ENV:Body>の直下のブロック)として挿入されます. <TransactionBodyBlock>ブロックのnamespaceは "http://services.opensoap.jp/transaction/"であることが望ましいです. 各<TransactionBodyBlock>ブロックには, <TransactionControl>ブロックの<endpoint>要素の対応する属性値 "transactionRequestID"を付加する必要があります. <TransactionBodyBlock>ブロックも,<TransactionHeaderBlock>ブロック同様, 第2Bodyblock以降であれば,どの順番で挿入されていてもかまいません.
例1. OpenSOAP Transaction Request Envelope 3.トランザクション対応サービス仕様OpenSOAP Transaction Serviceに対応したサービスは, クライアントが生成するSOAPメッセージの仕様(ヘッダブロック,ボディブロックの内容)と サービスの機能をクライアントに公開すると供に,トランザクションサービスとの接続について, 以下の仕様に従う必要があります. 3.1.要求処理に対する返信
トランザクションサービスによって分割生成された各Envelope(例2)は,
対応するそれぞれのendpointに送信されます.
各サービスは,Envelopeにしたがって要求された処理を行い,
その処理をRollbackできる状態で保存した後,
レスポンスメッセージ(例3)をトランザクションサービスに返信します.
例2.リクエストメッセージが分割され,A銀行へ送信されるSOAP Envelope
例3(A).A銀行からのレスポンスの例
例3(B).B銀行との送受信の例 3.2.COMMITまたはROLLBACK要求
トランザクションサービスはサービスから成功("SUCCESS")が返信されると,
<TransactionControl>ブロックに記述された順番に従って次のサービスへのリクエストメッセージを送信します. 3.3.処理の完結COMMIT要求を受け取ったサービスは要求された処理を実行して終了し, ROLLBACK要求を受け取ったサービスは対応する処理を取り消します. さらに,トランザクションサービスにそれぞれの処理が完了した旨のSOAPメッセージを返信します.
例4.トランザクションサービスからA銀行へのCOMMIT要求 4.クライアントへの返信トランザクションサービスは,一連の処理の結果をリクエストメッセージと同様にひとつのEnvelopeに結合し(例5), クライアントに返信します. SOAPメッセージの最初のボディブロック<TransactionResponse>ブロックには, トランザクションの最終結果が,COMMITまたはROLLBACKとして記述されます. 2つめ以降のボディブロックは, 各サービスから返信されたレスポンスメッセージのヘッダブロックが<TransactionHeaderBlock>ブロックに, ボディブロックが<TransactionBodyBlock>ブロックに, さらにCOMMITもしくはROLLBACKを送信した際のレスポンスメッセージのボディブロックが<TransactionActionResponseBodyBlock>に, それぞれリクエストメッセージに付加した属性値"transactionRequestID"と同じ属性値が付加されて挿入されます.
例5.クライアントに返信されるトランザクション処理結果 Copyright (C) 2001-2004 Webmasters of www.opensoap.jp. All
Rights Reserved.
ご利用の際は 免責・著作権情報をご覧ください. |