BPELサーバとの関連付け
外部との関係
BPELは外部から呼び出される、あるいは外部を呼び出すことによってプロセスを実行させる。そのため外部との関係をあらわすことが重要となる。また、外部との関係はインターフェースによって定義されるためWSDL(注1)と密接な関係がある。
XMLをベースとしたWebサービスを記述するための言語
BPELとWSDLの関係は表3の手順で定義する。
- WSDLにBPEL拡張要素(partnerLinkType)を追加する
- BPELにpartnerLink要素を追加する
- アクティビティinvoke/receiveを利用してサービスの呼び出し、受け取りをおこなう
通常、WSDLはサービスの記述をおこなったもので、外部との関係をあらわすものではない。そのため、WSDLにBPEL拡張要素(partnerLinkType)を追加して外部関係をあらわす。
もっと具体的に説明するため、次のWSDLを元に説明する。
WSDLのpartnerLinkType要素(WSDL)
<definitions targetNamespace="http://www.opst.co.jp/tcu/service1" |
ここでは、元のWSDLにplinkで修飾された名前空間が追加され(1)、この名前空間で定義されたpartnerLinkType要素(2)で外部関係をあらわしている。
どのPortTypeが外部と関係を持つのかを名前をつけて定義付け(3)をおこなう。この名前がBPELから参照されることとなる。
BPELでは、このWSDLで定義されたpartnerLinkTypeを型として、partnerLink要素を定義する。例えば、BPELファイルからpartnerLink要素に関係する箇所だけを抜粋すると次のようになる。
BPELでのWSDLとの関連付け(BPEL)
<process name="Process1" suppressJoinFailure="yes" |
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をあらわし、どのサービスが呼び出されるのかが明確となる。
図2上は上記で説明したWSDLとBPELの関係をあらわしており、図2下は例示したコードを図示したものだ。
これで、WSDLのpartnerLinkType要素とBPELのpartnerLink要素の関係が明確になったと思う。この関係は名前空間で 修飾された名前によって関係付けられ、物理的なWSDLファイルとは結び付けられていない。この物理的なWSDLとの結びつきは他の個所で行われており、 システムの構成を柔軟なものとしている。