BPELサーバとの関連付け

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

外部との関係

   BPELは外部から呼び出される、あるいは外部を呼び出すことによってプロセスを実行させる。そのため外部との関係をあらわすことが重要となる。また、外部との関係はインターフェースによって定義されるためWSDL(注1)と密接な関係がある。


※注1: WSDL(Wen Service Description Language)
XMLをベースとしたWebサービスを記述するための言語

   BPELとWSDLの関係は表3の手順で定義する。

  1. WSDLにBPEL拡張要素(partnerLinkType)を追加する
  2. BPELにpartnerLink要素を追加する
  3. アクティビティinvoke/receiveを利用してサービスの呼び出し、受け取りをおこなう
表3:WSDLとBPELの関係

   通常、WSDLはサービスの記述をおこなったもので、外部との関係をあらわすものではない。そのため、WSDLにBPEL拡張要素(partnerLinkType)を追加して外部関係をあらわす。

   もっと具体的に説明するため、次のWSDLを元に説明する。

WSDLのpartnerLinkType要素(WSDL)

<definitions targetNamespace="http://www.opst.co.jp/tcu/service1"
 xmlns:tns="http://www.opst.co.jp/tcu/service1"
 xmlns:plnk="http://schemas.xmlsoap.org/ws/2003/05/partner-link/"
 xmlns:bpws="http://schemas.xmlsoap.org/ws/2003/03/business-process/">   

(中略)

<portType name="service1Port">
   <operation name="getOrder">
      <input message="orderRequest"/>
      <output message="orderInformation"/>
      <fault name="unableToHandleRequest" message="errorMessage"/>
   </operation>
</portType>

(中略)

<plnk:partnerLinkType name="Service1">   
   <plnk:role name="servicePartner">
      <plnk:portType name="tns:service1Port"/>   
   </plnk:role>
</plnk:partnerLinkType>

<bpws:property name="OrderId" type="xsd:string"/>   

</definitions>

   ここでは、元のWSDLにplinkで修飾された名前空間が追加され(1)、この名前空間で定義されたpartnerLinkType要素(2)で外部関係をあらわしている。

   どのPortTypeが外部と関係を持つのかを名前をつけて定義付け(3)をおこなう。この名前がBPELから参照されることとなる。

   BPELでは、このWSDLで定義されたpartnerLinkTypeを型として、partnerLink要素を定義する。例えば、BPELファイルからpartnerLink要素に関係する箇所だけを抜粋すると次のようになる。

BPELでのWSDLとの関連付け(BPEL)

<process name="Process1" suppressJoinFailure="yes"
 targetNamespace="http://www.opst.co.jp/tcu/process1"
 xmlns:bpws="http://schemas.xmlsoap.org/ws/2003/03/business-process/"
 xmlns:wsdl1="http://www.opst.co.jp/tcu/service1">   

<partnerLink name="servicePartner1" partnerLinkType="wsdl1:Service1" partnerRole="servicePartner"/>   

   wsdl1で修飾された名前空間はWSDLで定義された名前空間と同じ(5)であり、このWSDLで定義されたplink要素の名前 Service1と関連をつけている(2、6)。3番目の属性であるpartnerRoleは「WSDLを呼び出す」関係にあることを意味している。 「BPELが呼び出される」関係にあるWSDLと関係付けする場合はpartnerRole属性ではなく、myRole属性を用いて定義する。この partnerRole、myRole属性にはWSDLのrole要素のname属性の値を設定する(6)。

   この2つの定義によって、BPELとWSDLの関係付けがおこなわれBPELのアクティビティとWSDLのオペレーションを結びつけることができる ようになる。上の2つの例では、BPELからWSDLのオペレーションを呼び出すことを意図した定義であり、外部呼出しのアクティビティである invokeを用いると次のように記述される。

invokeする場合(BPEL)

<invoke name="service1" partnerLink="servicePartner1" portType="wsdl1:service1Port" operation="getOrder" inputVariable="serviceRequest" outputVariable="serviceResponse" />

   この要素のpartnerLink属性がBPELのpartnerLinkの名前(6)をあらわしており、間接的にWSDLのpartnerLinkTypeをあらわし、どのサービスが呼び出されるのかが明確となる。

WSDLとBPELの関係
図2:WSDLとBPELの関係

   図2上は上記で説明したWSDLとBPELの関係をあらわしており、図2下は例示したコードを図示したものだ。

   これで、WSDLのpartnerLinkType要素とBPELのpartnerLink要素の関係が明確になったと思う。この関係は名前空間で 修飾された名前によって関係付けられ、物理的なWSDLファイルとは結び付けられていない。この物理的なWSDLとの結びつきは他の個所で行われており、 システムの構成を柔軟なものとしている。

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

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

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

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

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

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