アットマーク・アイティ @IT@IT自分戦略研究所QA@ITイベントカレンダー+ログ
 @IT > Webサービスを実現するhp netaction > 第4回 BTPによるトランザクションの実現
 
@IT[FYI]

 


Webサービスを先取りするHPからの提案
連載 Webサービスを実現するhp netaction(4)

2002/3/23

第4回 BTPによるトランザクションの実現
「HP
Web Services Transaction

 「Webサービスを実現するhp netaction」も最終回を迎えた。今回は、第1回「Webサービスの課題とその解決を探る」でも解説したWebサービスにおけるビジネストランザクションに再度触れることにしよう。この記事を読んでいただくことによって、「HP Web Services Transaction」のWebサービスにおける役割が、より具体的に見えてくるに違いない。

ビジネストランザクション

  「トランザクション」は「処理」という意味である。 例えば、海外出張のための手配(飛行機、ホテル、レンタカーの予約)を例に説明しよう。 飛行機、ホテル、レンタカー予約という3つの予約処理の集合が1つのトランザクションということになる。

 3つの予約処理がすべて正常に処理されることでビジネス的に意味のあるものになる。各処理がWebサービスとして実装されている場合に、この「海外出張のための手配」をトランザクション(ACID特性を持つ)として管理するためのプロトコルが、BTP(Business Transaction Protocol)である。BTPおよびトランザクションのACID特性に関しては「第1回 Webサービスの課題とその解決を探る」で詳細に解説しているので、こちらを参照していただきたい。

ビジネストランザクションの特徴

  ビジネストランザクションは以下のような特徴、あるいは制約を持っている。

  1. 確実に処理できなければならない
  2. トランザクションに比較して、完了するまでの時間が長い
  3. 通常、2つ以上の企業が関連する。また、システムも統一されていない
  4. 事前に取引契約が締結されていることを前提とする

 「確実に処理ができなければならない」という点では従来のトランザクションと共通するが、2.以降は異なる部分である。これらの点についてBTPがどのような形で対応しているのかについて具体例を交えて解説していこう。

BTPを構成するコンポーネントおよび動作

  最初にBTPを構成するコンポーネントについて説明しよう。ここでは、例として「海外出張のための手配」を使って説明をする。

■Case1(Atomを使ったパターン)


Webシステムのフローを定義した例

 ここで、Atomについては「第1回 Webサービスの課題とその解決を探る」に解説をゆずる。Case1の場合は、すべての予約処理が正常にできた場合のみトランザクションが成功する。また、1つでも予約が取れなかった場合にはトランザクションをロールバックさせる必要がある。

 では、HP Web Services Transactionでこのビジネストランザクションを実装した場合について説明しよう。ポイントとなるのは、信頼性および原子性を確保するために2フェーズコミットを行うということである。HP Web Services Transactionは、5つの基本コンポーネントで構成され、2フェーズコミットを実現する。

 では、基本的なコンポーネントおよびプロトコルについて、図示しながら説明しよう。 下図の右側がサービスを提供する(サーバ・サイド)だ。Case1の例を当てはめると、飛行機、ホテル、レンタカーの予約サイトということになる。 左側がサービスを利用する(クラアイント・サイド)であり、各サービスを利用し「海外出張のための手配」を実行する。 


HP Web Service Transacitonを構成する基本的なコンポーネント
Client クライアントアプリケーション。BTPによる処理を開始するinitiatorとしての位置付けとなる。JAXTXで定義されたAPIを利用してビジネストランザクションを制御する
Service サービスを提供するサイトの各アプリケーション
Factory BTPを実行するためのコンテナ
Coordinator クライアントとサービス間のBTPでのやりとりを制御するインスタンス
Participant BTPでの通信をするためのサービス側のインスタンス


各コンポーネントとプロトコルの流れ

(1) クライアントアプリケーションがビジネストランザクションを開始するにあたって、initiatorとしてCoordinatorを生成する(トランザクションの生成)
(2) クライアントからサービスサイトにSOAPメッセージを送信する。この際、SOAPのヘッダに先ほど生成したCoordinatorのアドレスをセットして送る
(3) SOAPメッセージを受け取ったサービスはParticipantインスタンスを生成し、Coordinatorに対してParticipantアドレスを送り、Atomを構成するサービスとして登録する(参加者の登録)
(4) CoordinatorからAtom IDを受け取る
(5) サービスのリクエストに対して応答する
(6) Coordinatorに対してトランザクションの実行確認のリクエストを送る
(7) Coordinatorが各Participantに確認メッセージを送る
(8) 各ParticipantがCoordinatorに確認応答メッセージを送る
(9)

すべてのParticipantから応答が帰ってくると、クライアントにその結果を返す

(10) この段階でビジネストランザクションをコミットするまたはキャンセルすることが可能になる
(11) クライアントは最終的にconfirm指示を送り、すべての予約が確定する

 さて、ここまでかなり詳細に説明したが、要約するとSOAPのヘッダに埋め込んだ制御情報を使って2フェーズコミットを実現し、トランザクションの処理をより確実にするというのがHP Web Services Transactionの機能である。

 また、Webサービスのエリアに存在するオーケストレーション用の言語(WSCL*、WSFL、XLANG)と共存するプロトコルであるという点も理解していただきたい。

*:WSCL(Web Services Conversation Language)
HPがW3Cに提唱中の言語。WSCLを使用してWebサービスのインターフェイスを指定し、サービス間で対話形式の処理を行うことができる。UDDIを使用しないでサービス間のインターフェイスを確立できる意味では、UDDIと技術的に補完関係にある。

■Case2(Cohesionを使ったパターン)


Cohesionを使ったパターンでは「航空会社」「ホテル」「レンタカー」それぞれにおいて、どれか1つの予約が実現すればAtomのトランザクションが完了したことになる

 実際のビジネスで「海外出張の手配」をする場合にはCase1のような単純なケースはむしろ稀であると思われる。実際には複数の航空会社、ホテル、レンタカーから最適でかつ可能な組み合わせの中から1つを選ぶという形が大半だ。このような場合には上図のようなCohesionを使ったパターンを使うことができる。

 「海外出張の手配」をするという立場から見ると、TrueまたはFalseに一意に決まるのでAtomをコントロールすることになる。しかし、Atomを構成する各処理はCohesionとして実装される。つまり、条件に合うフライト、ホテルまたはレンタカーであれば最低どれか1つの予約ができればAtomはTrueということになるのである。

 では、Cohesionを使ったパターンにおける、トランザクションが成立する場合、しない場合のHP Web Services Transactionのコンポーネントの役割を整理してみよう。

●トランザクションが成立する場合
 各Cohesionを構成するサービスの最低1つが予約可能である場合、トランザクションは成立する。Cohesion中の2つ以上のサービスが予約可能な場合には、クライアント・アプリケーションのビジネスロジックにより1つに絞り込む必要がある。1つを絞り込んだあとの不要になったサービスのキャンセル作業は、Coordinatorが自動的に行ってくれる。

●トランザクションが成立しない場合
 各Cohesionを構成するサービスの中に予約可能なサービスが存在しない場合は、トランザクションが成立しない。この場合、すべてのサービスに対してCoordinatorがキャンセルを送信する。

■Case3(サービスの階層化)


Webシステムのフローを定義した例

 いままでのケースでは基本的にトランザクションを管理するCoordinatorと参加するParticipantという2つの役割しか示さなかった。より、複雑なビジネストランザクションに対応する機能として、任意のParticipantが自らCoordinatorとしてAtomあるいはCohesionを管理することができる。

 例えば、航空会社が航空券の決済にカード会社の決済サービスと連携するというような場合には有効なパターンだ。

BTPを利用するシステムの開発手順

 最後に、今回を含め4回に渡って解説した内容を整理する意味でWebサービスの開発手順についてまとめておく。


(1)B2Bのワークフローを定義する
最初に企業間のワークフローを定義する。 同時に、この段階で接続するWebサービスサイトとのビジネス的な調整をする。実際には、いくつかの標準(WSDL、 WSCL、 XLANG、 PIP)が存在するので、これらをインテグレーション(オーケストレーション)するという作業になる

使用するツール:UMLモデリングツールなど

(2)Webサービスのパブリックインターフェイスを定義する
Webサービスのサービス名、公開する機能(メソッド)、引数などを決定する。 通常はWSDL(WebServices Definition Language)で記述し、UDDIレジストリに登録する

使用するツール:サービスコンポーザー

(3)ビジネスオブジェクトまたはデータを構築する
Webサービスから呼ばれるシステム(通常はファイアウォールの内側のシステム)を構築する。 大半のケースでは全ての処理をスクラッチで記述するよりは既存のシステムをラッピングするクラスを作るという作業になる。 また、基幹システムとの連携が必要な場合にもこのステップで検討をする。 基幹システムとの連携用のツールとしてInsevo(JCA対応ツール)がある

使用するツール:Java開発環境(Rose、Forteなど)、Insevo

(4)ファイアウォールの内側のシステムについてワークフローを作成する

(3)のステップが複雑な場合にはワークフローエンジンを使用したシステムになる場合がある

使用するツール:HP Process Manager interactive


(5)パブリックインターフェイスとバックエンドシステムのマッピング
ステップ(1)、(2)で定義したインタフェイスを(3)、(4)のバックエンドシステムの処理にマッピングする。単純なRPCのWebServicesであれば1対1に対応するが、複雑なシステムであればWSCL、 WSFL、 XLANGといったフロー制御用の言語を使用してマッピングを行う

使用するツール: レジストリコンポーザー

(6)Webサービスのパッケージ作成
作成したEJB、JSP、Servletなどをパッケージングする

使用するツール:RADパック

(7)Webサービスのデプロイ
作成したパッケージをデプロイする

使用するツール:RADパック

(8)Webサービスの公開
UDDIに作成したWebServicesを登録する。適切なサービス内容、分類コードなどが指定されていれば利用するクライアントが容易に見つけることができるようなる

使用するツール:WebServicesRegistry

(9)モニタリング
各種ツール(UDDI検索ツール、SNMPベースの管理ツール、Webサービス実行ツール)を使用して正常に機能しているかをチェックする

 

 HP Web Services Transactionの製品リリースは 2002年5月を予定している。 それまでは、HPのWebサイトで詳細な情報を入手することができる。また、ユーザー登録すれば、e-mailで最新の情報を受け取ることができる。

 ぜひ以下のWebサイトにアクセスして、HPのWebサービス構築のミドルウェア群の情報を入手してほしい。

日本HPミドルウェア(http://www.jpn.hp.com/software/middleware/)


連載 Webサービスを実現するhp netaction
  第1回 [総論]
Webサービスの課題とその解決を探る

「Webサービスのためのミドルウェアhp netaction」
(2001/12/19)
  第2回 [プロダクトレビュー]
Simple Webサービス実現のプラットフォーム

「HP Web Services Platform」
(2002/1/22)
  第3回 [プロダクトレビュー]
Webサービスのビジネスロジックを容易に構築

「HP Process Manager interactive」
(2002/2/16)
第4回 [プロダクトレビュー]
BTPによるトランザクションの実現

「HP Web Services Transaction」
(2002/3/23)

 

 



HPがアプリケーション・サーバを無償提供、その狙いは?

HP、アプリサーバ市場で勝負へ


.NETとJavaに対応が特徴、HPのECプラットフォーム

[hp world 2001開催]端末、インフラ、e-servicesで巻き返しを図るHP

e-servicesでサービス中心のコンピューティングを実現、HP

HPが初のappサーバを発表、Webサービス市場へ本格進出

Javaの先を見据えるWebアプリサーバベンダー


製品情報INDEX

HP-ASダウンロード

問合せ先


</comment> <tr> <td bgcolor="#EEEEEE"><font size="2"><a href="javascript:KeepIt();"> <img src="/club/keepoint/images/ico_kpt.gif" alt="kee&lt;p&gt;oint保存" border="0" align="absmiddle" width="24" height="18">kee&lt;p&gt;ointで保存</a></font></td> </tr> <comment>

 
@ITトップ@IT Special インデックス会議室利用規約プライバシーポリシーサイトマップ