BPELサーバとの関連付け

2006年9月7日(木)
高安 厚思

プロセス識別子の設定

   BPELで扱うプロセスは、時間のかかるものも多い。そのため、相手先を呼び出して相手の準備が完了したら再度呼び出してもらうといった動作、いわ ゆる非同期のCallbackというMEP(Message Exchange Pattern)をサポートしている。

   複数のプロセスが実行されて同じ呼び出しを待っている状況の場合、どれがどのプロセスへの呼び出しなのかを明確にしないとプロセス実施が混乱してし まう。そのため、プロセスをあらわす識別子を定義する必要がある。これはWebシステムにおけるセッションIDのようなものだ。BPELではこの識別子を CorrelationSet要素であらわす。

   例えば、次のように定義する。

プロセス識別子の定義(BPEL)

<correlationSets>
   <correlationSet name="Order_PID" properties="wsdl1:OrderId"/>   
</correlationSets>

   この例ではwsdl1で修飾された名前空間のOrderIdをプロセス識別子としてOrder_PIDという名前で定義している(7)。この OrderIDという名前は先にあげたのWSDLの(4)で宣言されており、property拡張要素で定義されたものだ。

   このように定義することで、プロセスを特定付け、複数のプロセスを並行に稼動することができるようになる。

プロセス変数の定義

   各プロセスはプロセス内部をスコープとする変数を定義することができる。この変数は、内部で利用されるメッセージや値を格納する。受け取ったメッ セージや呼び出すサービスに渡すメッセージは変数に格納されている必要があり、この変数はvariable要素で定義される。

変数の定義とその利用例(BPEL)

<variable messageType="wsdl1:order" name="serviceRequest"/>   
<variable messageType="wsdl1:orderResponse" name="serviceResponse"/>   

(中略)
<invoke name="service1" partnerLink="servicePartner" portType="wsdl1:service1Port" operation="getOrder" inputVariable="serviceRequest" outputVariable="serviceResponse">   
   <correlations>
      <correlation initiate="yes" pattern="in" set="Order_PID"/>   
   </correlations>
</invoke>

   上記のコード例の上部は、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">
   <correlations>
      <correlation set="Order_PID"/>   
   </correlations>
</receive>

   別のinvokeアクティビティで呼び出した後に、非同期処理として外部からBPELを呼び出しがある場合にその呼び出しを受け取るreceiveアクティビティの例だ。このreceive要素の子要素にcorrelations要素があるに注目して欲しい。

   これは上記のinvokeアクティビティで初期化されたプロセス識別子(11)によってプロセスを識別していることを意味している。この correlationがあることによって複数のプロセスを並行稼動させて、このreceiveアクティビティで待機してもプロセスの区別ができることに なる(12)。

次回は

   SOAらしいシステムを構築しるためにBPELサーバが重要になってくるのに対し、今回はBPELがどのように構成され、外部とどのように関連付けられているのかを解説してきた。次回は、BPELの根幹的な要素となるアクティビティについて解説する。

株式会社オープンストリーム テクニカルコンピテンシーユニット 主管システムズアーキテクト

横浜国立大学経営学部卒。銀行系シンクタンクでオブジェクト指向技術の研究に携わった後、大手SIerにて アーキテクチャ構築、プロセス研究に携わった。現在株式会社オープンストリームにてSOAを中心とする研究開発およびアーキテクチャ構築に従事。最近は XMLのダイナミックさに魅了されている。

Think ITメルマガ会員登録受付中

Think ITでは、技術情報が詰まったメールマガジン「Think IT Weekly」の配信サービスを提供しています。メルマガ会員登録を済ませれば、メルマガだけでなく、さまざまな限定特典を入手できるようになります。

Think ITメルマガ会員のサービス内容を見る

他にもこの記事が読まれています