BPELサーバとの関連付け
プロセス識別子の設定
BPELで扱うプロセスは、時間のかかるものも多い。そのため、相手先を呼び出して相手の準備が完了したら再度呼び出してもらうといった動作、いわ ゆる非同期のCallbackというMEP(Message Exchange Pattern)をサポートしている。
複数のプロセスが実行されて同じ呼び出しを待っている状況の場合、どれがどのプロセスへの呼び出しなのかを明確にしないとプロセス実施が混乱してし まう。そのため、プロセスをあらわす識別子を定義する必要がある。これはWebシステムにおけるセッションIDのようなものだ。BPELではこの識別子を CorrelationSet要素であらわす。
例えば、次のように定義する。
プロセス識別子の定義(BPEL)
<correlationSets> |
この例ではwsdl1で修飾された名前空間のOrderIdをプロセス識別子としてOrder_PIDという名前で定義している(7)。この OrderIDという名前は先にあげたのWSDLの(4)で宣言されており、property拡張要素で定義されたものだ。
このように定義することで、プロセスを特定付け、複数のプロセスを並行に稼動することができるようになる。
プロセス変数の定義
各プロセスはプロセス内部をスコープとする変数を定義することができる。この変数は、内部で利用されるメッセージや値を格納する。受け取ったメッ セージや呼び出すサービスに渡すメッセージは変数に格納されている必要があり、この変数はvariable要素で定義される。
変数の定義とその利用例(BPEL)
<variable messageType="wsdl1:order" name="serviceRequest"/> |
上記のコード例の上部は、wsdl1で修飾された名前空間で定義されたorderという型をserviceRequestという名前の変数に格納 (8)し、同様にorderResponse型をserviceResponseという名前の変数に格納することをあらわしている(9)。
コードの例の下部はこれらの変数を利用している例だ。invoke要素で、入力としてserviceRequest変数を、出力として serviceResponse変数を利用することをあらわしている(10)。このinvoke要素に含まれるcorrelations要素は、この invokeアクティビティによってプロセスの関連付けがスタートされることを意味しており、プロセス識別子Order_PIDの初期化をおこなっている (11)。
セッション識別子の利用例(BPEL)
<receive name="service2" partnerLink="servicePartner" portType="wsdl:entry" operation="entry" variable="entryRequest"> |
別のinvokeアクティビティで呼び出した後に、非同期処理として外部からBPELを呼び出しがある場合にその呼び出しを受け取るreceiveアクティビティの例だ。このreceive要素の子要素にcorrelations要素があるに注目して欲しい。
これは上記のinvokeアクティビティで初期化されたプロセス識別子(11)によってプロセスを識別していることを意味している。この correlationがあることによって複数のプロセスを並行稼動させて、このreceiveアクティビティで待機してもプロセスの区別ができることに なる(12)。
次回は
SOAらしいシステムを構築しるためにBPELサーバが重要になってくるのに対し、今回はBPELがどのように構成され、外部とどのように関連付けられているのかを解説してきた。次回は、BPELの根幹的な要素となるアクティビティについて解説する。