アプリケーション開発は、WSDLやSimple Object Access Protocol(SOAP)、Universal Description, Discovery and Integration(UDDI)それに今度はBPEL、といった、XMLベースの規格を採り入れたサービス指向アーキテクチャー(Service Oriented Architecture: SOA)の到来によって大きな変化を受けました。ところが、より強力なことができるようになった一方で、開発規模や複雑さが増し、山のようなファイルや構文の中で、開発者は仕事本来の目的を見失いがちです。さらに、規格自体も次々と変化しており、開発者にとっては標的が動いていくような状況になっています。ですからWebサービスの急速な普及をサポートするために、開発者達は複雑さや生産性、技術変化に対応できるような答えを模索している最中です。
UMLからBPELへのマッピング・ツールは、IBM RationalのXDEやRoseのようなUMLツールで開発されたプロセスのモデルを取り込み、そのプロセスの実装に適切なBPELファイルやWSDLファイルに変換することができます。Emerging Technologies Toolkit version 1.1(ETTK)は、興味深い、新しい技術を試みるための環境であり、現在autonomicとwebservicesの2種類が用意されています。この記事では、後者(webservices)に注目することにします。
BPELにはWebサービスに基づいたビジネス・プロセスの振る舞いを指定するために、XML表記と意味体系が用意されています。BPEL4WSプロセスは、BPEL4WSプロセスとパートナーとの相互動作に関して定義されています。パートナーはプロセスにサービスを提供したり、プロセスからサービスを要求したり、プロセスとの双方向動作に参加したりします。従ってBPELは、呼ぶ順序が意味を持つようにサービス順序を規定することでWebサービスを調整し、それぞれのサービスに対する責任をパートナーに割り当てます。パートナーのパブリック・インタフェースの指定、および実行可能プロセスの指定の両方にBPELを使用することができます。
BPEL 1.1が最近の、新しいバージョンです。用語を明確にしたことに加え、変数のスコープやイベント・ハンドラーの追加が細かくできるようになっています。最新バージョンおよびBPELの紹介については、この仕様の最初にある、関連の2項目を見てください。
UMLは複雑なシステムの設計や理解に便利な、視覚的なモデル化表記法(modeling notation)を備えたOMG規格です。
UMLには一般的な利点がいくつかあります。UMLは、最もよく知られているオブジェクト指向モデル化表記法で、既によく理解されているグラフィカルな表記法と、オブジェクト指向システムの重要機能を捉えるための豊富な意味体系を備えています。UMLはオブジェクト指向のソフトウェア開発で広く使用されており、(カスタマイズされた上で)コンポーネントベースのソフトウェア、ビジネス・プロセスのモデル化、システム設計などに使用されてきました。そのおかげで、UMLでの経験のかなりの部分をWebサービス技術に生かすことができるのです。
UMLを拡張したりカスタマイズしたりする機能はMDAに必須です。UMLをカスタム化することで、Webサービスの下層構造に完全または部分展開されるシステムのモデル化をサポートすることができます。この記事では、主にステレオタイプ(stereotype)を中心に説明します。ステレオタイプはモデルの要素を分類する方法の1つです。例えば顧客(Customer)を表わすクラスがあれば、<<entity>>のステレオタイプを付加して、それがデータオブジェクト(おそらくEntity Bean)であることを示すことができます。この情報は人にモデルが読みやすくなるように使用され、さらにRational RoseのようなCASEツールで、クラスを表現するアイコンを変更するのにも使用することができます。しかしこの場合には、モデル変換の振る舞いを案内するために使用します。また、UMLモデルのほとんどの要素にステレオタイプを追加できることを覚えておいてください。プロファイルでこうしたステレオタイプを組み合わせることができます。UMLプロファイルは、(特定の関心領域を表現するための)基本UMLに対する特定な拡張セットの定義に使用します。例えば、CORBAやデータモデル化のために定義されたプロファイルがあります。プロファイルは、UMLのどんな要素が使用されるのか、それがどのように拡張されるのか、また要素の組み立てを制限する構成規則(well-formedness rules)などを定義しています。
以下のセクションでは、1つのUMLプロファイルを紹介します。これは、Business Process Execution Language for Web Servicesでの(意味体系)構成に対応した意味体系構成でのモデル化をサポートするものです。またBPEL4WSへのマッピングについても説明しますが、これはこのプロファイルに合致したUMLモデルから、Webサービスのアーティファクト(BPEL、WSDL、XSD)を自動生成することができるものです。
以下のセクションはBPELの実際の例です。UMLプロファイルによって、鍵となる概念が明確になっています。
このセクションでは簡単な融資承認プロセスを定義する例を通して、UMLプロファイルのサブセットを紹介します。これは、変換に使用するETTKのREADMEファイルにある例です。これは次のように要約できます。
「融資の要求を受け取ると、要求額を値(10000)と比較します。要求額の方が小さい場合、Assessor(査定)サービスを呼びます。それ以外の場合は、Approver(承認)サービスを使用します。Assessorがハイリスクな要求であると見なすと、その要求をApproverにも渡します。Approverが完了するか、またはAssessorが受理した場合、承認情報が返ります。」
BPELプロセスはステートフルでインスタンスがあります。従ってBPELではこのシナリオは、実際に処理される融資申し込み毎にインスタンスを持つ、LoanApprovalプロセスとして実装されます。各インスタンスには、(BPEL変数でキャプチャーされる)それぞれ独自の状態があります。UMLプロファイルでは、プロセスはステレオタイプ<<Process>>を持つクラスで表わされます。クラスの属性は、プロセスの状態 (BPEL4WS 1.0用語でのコンテナー、あるいはBPEL 1.1での変数) に対応します。融資承認プロセスを表すUMLクラスを図1に示します。
図1. BPELプロセスのモデル化に使用されるUMLクラス
クラスの振る舞いはアクティビティ図を使って表現します。融資承認プロセスのアクティビティ図は図2のようになります。invokeAssessorのようなアクティビティは角が丸い四角で示されます。実行されるべきアクションは、アクティビティへのエントリー条件として示されます。例えばriskAssessment(変数)には、チェック・サービスの結果がセットされます。プロセスが通信する相手となるパートナー、customer、assessor、approverは、UMLパーティション(スイムレーン(swimlanes)としても知られています)で表わされます。パートナーへのメッセージ送受信操作を伴うアクティビティは、対応するパーティションに現れます。矢印は、プロセスがアクティビティを実行する順序を示しています。割り付けアクティビティ(assignment activity)はスイムレーンに無いことに注意してください。割り付けアクティビティは外部サービスを要求せず、プロセス自体の内部での動作を表現します。
図2. 融資承認プロセスのアクティビティ・ダイアグラム
応答アクティビティはcustomerに応答を返し、プロセスの実行が終了します。各アクティビティには、そのアクティビティが実行する作業の詳細を説明する記述的な名前と、エントリー・アクション(entry action)があります。
自動化ビジネス・プロセスのUMLプロファイルは、完全な実行可能BPELアーティファクトがUMLモデルから生成できることを表現しています。表1はこのプロファイルからBPELへのマッピングの概要で、この記事で紹介しているプロファイルのサブセットを表しています。
表1. UML からBPEL4WSへのマッピングの概要
| プロファイル構成 | BPEL4WS概念 |
| <<process>>クラス | BPELプロセス定義 |
| <<process>>クラスのアクティビティ図 | BPELアクティビティ階層 |
| <<process>>クラス属性 | BPEL変数 |
| 階層構造および制御フロー | BPELシーケンスおよびフロー・アクティビティ |
| <<receive>>、<<reply>>、<<invoke>>アクティビティ | BPELアクティビティ |
リスト1は今回の融資承認の例から生成されるBPEL文書の抜粋です(詳細の大部分は紙面の都合上省略しています)。
リスト1. EPELリストの抜粋
<process name="loanApprovalProcess" ...>
<variables>
<variable name="request"
messageType="loandef:creditInformationMessage"/>
<variable name="riskAssessment"
messageType="asns:riskAssessmentMessage"/>
...
</variables>
...
<flow>
<receive name="receive1" partner="customer"
portType="apns:loanApprovalPT"
operation="approve" variable="request"
createInstance="yes">
<source linkName="receive-to-assess"
transitionCondition=
"bpws:getVariableData('request', 'amount')<10000"/>
<source linkName="receive-to-approval"
transitionCondition=
"bpws:getVariableData('request', 'amount')>=10000"/>
</receive>
<invoke name="invokeAssessor" partner="assessor"
portType="asns:riskAssessmentPT"
operation="check"
inputVariable="request"
outputVariable="riskAssessment">
<target linkName="receive-to-assess"/>
<source linkName="assess-to-setMessage"
transitionCondition=
"bpws:getVariableData('riskAssessment', 'risk')='low'"/>
<source linkName="assess-to-approval"
transitionCondition=
"bpws:getVariableData('riskAssessment', 'risk')!='low'"/>
</invoke>
<assign name="assign">
<target linkName="assess-to-setMessage"/>
<source linkName="setMessage-to-reply"/>
<copy>
<from expression="'yes'"/>
<to variable="approvalInfo" part="accept"/>
</copy>
</assign>
...
<reply name="reply" partner="customer" portType="apns:loanApprovalPT"
operation="approve" variable="approvalInfo">
<target linkName="setMessage-to-reply"/>
<target linkName="approval-to-reply"/>
</reply>
</flow>
</process>
|
完全なプロファイルへのリンクは参考文献にあります。
(Rational XDEのような)UMLツールからBPEL4WSランタイム(BPWS4J)に至るまでの、エンド・ツー・エンドのシナリオをサポートする技術デモは、ETTKの一部としてIBM alphaWorksから入手できます。マッピングの実装はEclipseプラグインとして構築され、入力はUMLモデル(XMI)交換用の業界標準ファイル形式です。これにより、必要なWSDLやXSDアーティファクトに加えてBPEL4WSアーティファクトが生成されます。
では、デモを見てみましょう。これを見るためには、いくつか事前に必要なものがあります。詳細はETTKのページにあります(参考文献)が、要約すると必要なものは以下です。
- RoseあるいはXDE(この記事ではXDE v2003を使用しています)
- Eclipse 2.0+あるいは WebSphere Studio Application Developer(WSAD) 5.0+
- WebSphere Application Server (WAS) 5.0+あるいはApache Tomcat 4.1.24+
- ETTK自体(BPWS4Jを含む)
ここでは適切な環境が備わっていることを前提として話を進めます。
このデモには融資承認や購入注文プロセスのような、異なるシナリオのサンプル・ファイルがいくつか一式ついてきます。サンプル・ファイルには主に2種類あり、一つはRoseまたはXDEで開いて修正できるUMLモデル・ファイルであり、もう一つはRoseまたはXDEでエクスポートされたXMIバージョンのUMLモデルを含むXMLファイルです。図3では、これがRoseまたはXDE自体でのモデル、またはこれらツールのXMI出力に対応していることが分かるでしょう。
図3はUMLアクティビティ・ダイアグラムを使って、ファイル変換全体のプロセスを説明しています。UMLは便利だと思いませんか? 四角はアーティファクト(通常はファイル)を表わし、楕円はアクションまたはアクティビティを表わしています。主要な段階は次の通りです。
- (RoseまたはXDEを使用して)UMLモデルを構築しXMIにエクスポートする
- BPEL、WSDL、XSDファイルを生成する
- これらをBPWS4Jランタイムで展開し、実行する・・試してみてください。
図3. プロセスを開発する
RoseもしくはXDEのいずれかがあれば、UMLファイル(.mdlまたは.mdx)を開くことができます。これは先ほどの融資承認の例で見た通りです。
図4. XDEでのモデル化とエクスポート
図4では、UMLモデルがXMIにエクスポートされています・・XDEはv2003以上が必要です。この手法の良いところは、汎用かつ未変更のUMLツールとUMLの標準拡張機構を使ってプロセス定義を構築、エクスポートできるという点です。
モデルが出来上がれば、図4に示すようにFile --> Export メニューからXMI Exportを選択し、そのモデルをエクスポートすることができます。
Eclipse(あるいはWebSphere Application Developer (IE))内でJava Projectを作成し、前のセクションで作成したXMIファイルをインポートします(あるいはETTKにあるサンプルXMIファイルを使用します)。次にそのXMIファイルを選択し、右クリック・メニューから「Generate BPEL from UML」を選択します(図5)。
図5. XMIファイルを変換する
次に、様々なプレフィックスを変更するように促されます。自分の設定に合うように変更すべきですが、単にETTKをインストールしただけで使っているのであれば、デフォルトで構いません(図6)。
図6. プレフィックスを設定する
「Finish」をクリックすると、いくつかのファイルがプロジェクトに現れます。これにはメインのBPELとWSDLファイルに加えて、LoanAssessorサービス用、LoanApproverサービス用のWSDLファイル、それにデータ定義などがあります。
この時点で、生成されたファイルは展開できるようになっているはずです。今回はApache Tomcatに展開しますが、WebSphere Application Serverを使用しても全く構いません。
BPEL4WS展開パネル(deployment panel: http://localhost:8080/bpws4j/admin/index.html)にまでナビゲートし、次にメインのサービスに対応するWSDLファイル(ここではLoan ApprovalProcess.wsdl)と、BPELファイル(ここではProcessOrder.bpel)を、それぞれのフィールドに入力します(図7)。
図7. プロセスを展開する
「Continue Deployment」をクリックし、そのプロセスでの別の役割に要求される、任意のファイルを入力します。ここでは別の役割として、LoanAssessorとLoanApproverという2つがあります。
図8. サービスを展開する
プロセスが展開したら(図8を参照)、サンプルの実行はBPWS4Jサンプルの場合と同じです。自分のOSに合ったLoanApprovalSampleスクリプトを起動します。
LoanApprovalSample [soap-address] first-name last-name amount
例えば次のようになります。
LoanApprovalSample http://localhost:80/bpws4j/soaprpcrouter John Doe 10
UMLアクティビティ・ダイアグラムから、10000という額はかなり大きいことが分かるでしょう!
この記事では、UMLからBPELへの変換による自動化ビジネス・プロセスのためのUMLプロファイルを紹介しました。UMLプロファイルを利用することにより、通常のUMLに関する技能やツールだけで、BPEL4WS を使ってWebサービスのプロセスを開発できるようになります。既存のソフトウェア技術での蓄積を利用して、サービス指向のBPEL4WSコンポーネントを全体的なシステム設計に組み込むことも、この手法で可能になります。さらにUMLからBPEL4WSへのマッピングにより、モデル駆動(model driven)開発手法が使え、UMLモデルからBPEL4WS実行可能プロセスが自動生成できるようになります。
この手法は、MDAの概念がいかに他の分野にも高い抽象化レベルで適用できるか、また、いかに開発者を技術の変化から保護できるかを明確に示しています。
この手法が有用となるシナリオはいくつもあります。
- プロジェクトに使われる技術のバージョン変更を見えないようにする。BPELはバージョンが変わるものであり、実際変わってきました。新しい意味体系で大幅な変更が行われ、それをプロセスが使おうとしているのでない限り、実装は開発者の介入無しに再生成することができます。こうした変換手法は開発者が元のUMLモデルのために費やした努力を無駄にしないためにも使うことができます。新しいUMLのバージョンが入手可能となった時(例えばバージョン1.4からバージョン2への移行)には、UMLモデル自体を変換することができます。
- 第2に、(BPMLのような)他のプロセス実装を生成できる、UMLプロファイルを生成することができます。
- 第3に、複数の技術へのアーティファクトを、一つのモデルから生成できることが分かります。今回の例ではBPELとWSDLを生成しましたが、Java出力のような非XML出力も生成することができます。
- 最後に、変換は双方向で可能です。今回の例では逆方向のマッピングとして、既存のBPEL4WSおよびWSDLアーティファクトのインポートと、UMLモデルおよびBPEL4WSアーティファクトを同期して片方の変更を他方にも反映するものがありました。
今回の記事のために意見や助言を寄せてくれたGary FloodとCatherine Griffin、それにTracy Gardnerに感謝します。
- alphaWorksから ETTKをダウンロードしてください。
- developerWorksでETTKの実際のインストールを参照してください。
- James Snellによるチュートリアル「Implementing Web services with the ETTK」(developerWorks、2003年4月)を参照してください。
- OMGにある、MDAに関するページを調べてみてください。ここには多くの記事があり、会議やその他の情報に対するポインタも数多くあります。
- OMGにある、UMLに関するページを参照してください。ここには多くの記事があり、会議やその他の情報に対するポインタも数多くあります。
- UMLプロファイルが<ettk install directory>\wstk\services\demos\uml2bpel\docs\UMLProfileForBusinessProcess1.1.pdfにあります。
-
BPEL 1.1仕様(developerWorks、2003年5月)を読んでみてください。
- BPEL4WSの概要について、Frank LeymannとDieter Rollerが「Business processes in a Web services world」で素晴らしい説明をしています(developerWorks, 2002年8月)。