アットウィキロゴ
★Tomomi@Wiki★
掲示板 掲示板 ページ検索 ページ検索 メニュー メニュー

★Tomomi@Wiki★

BPEL仕様

最終更新:

匿名ユーザー

- view
管理者のみ編集可

大まかな仕様

  • 外部サービス/ビジネス・プロセス間のインタフェース
  • ビジネス・プロセス内部でのデータ・ハンドリング
  • ビジネス・プロセスの制御構造
  • 例外処理

外部Webサービスとの連携

  • 外部サービスとの関係を定義する仕様
    パートナー・リンク、パートナー・リンク・タイプ、パートナー
    ・・・パートナー・リンク・タイプはWSDLのポートタイプをBPEL4WSの                    外部インタフェースとして定義するためのWSDLの拡張要素である。
  • ビジネス・プロセスとメッセージの関連
    相関セット(correlationSet)、相関(correlation)
  • BPEL4WSプロセス自体は、基本的には、アルゴリズムをフローチャートに似た形で表現したものである。

アクティビティー(プロセスにおける各ステップ)
・プリミティブなアクティビティー

  • <invoke>

    なんらかのWebサービスの操作を呼び出す

    <receive>

    サービスのインターフェースを操作するメッセージが外部のユーザーから呼び出されるのを待つ

    <reply>

    入出力操作の応答を生成する

    <wait>

    しばらくの間待機する

    <scope>

    変数などの有効範囲を設定する

    <assign>

    ある場所から別の場所にデータをコピーする

    <throw>

    なんらかの障害の発生を通知する

    <terminate>

    サービス・インスタンス全体を終了する

    <empty>

    何も行わない
  • 例:receiveのパートナー・リンク(partnerLink)属性、ポート・タイプ(portType)属性、操作(operation)属性によって、このアクティビティが受け取るWebサービスのオペレーションを指定する。また変数(variable)属性では、このオペレーションによって送信されるデータを格納する変数を指定する。

  • ・アクティビティーを結合

    <sequence>

    一定の順序のステップ(<sequence>)を定義しする

    <switch>

    現在一般的になっている「caseステートメント」手法による分岐を行う

    <while>

    ループを定義する

    <pick>

    いくつかの代替パスのうちのいずれかを実行する

    <flow>

    ステップの集合を並列に実行すべきことを指示する

    links

    並列的に実行されるアクティビティーの中で、linksを使用して実行順序の制約を示すことができる
  • XML要素を実際の記述そのままに定義する。ただし、値が入る場所には、そこに入るべきデータのタイプを記載する。
  • 要素や属性には?(0か1)、*(0以上)、+(1以上)といった文字を付加することで、その出現回数を表現する。
  • 「|」で区切られた値は、その中のいずれかが設定されることを示す。

------------------------------------------------------------------------------------------------

外部Webサービスとの連携
外部インターフェイスの定義(WSDL内)

<partnerLinkType name="shippingLT">
 <role name="shippingService">
  <portType name="pos:shippingPT" />
 </role>
 <role name="shippingRequester">
  <portType name="pos:shippingCallbackPT" />
 </role>
</partnerLinkType>

パートナー・リンク・タイプとパートナー・リンクの構文(XMLスキーマ)

<definitions name="ncname" targetNamespace="uri"
 xmlns="http://schemas.xmlsoap.org/wsdl/"
 xmlns:plnk="http://schemas.xmlsoap.org/ws/2003/05/partner-link/">
...
 <plnk:partnerLinkType name="ncname">
  <plnk:role name="ncname">
   <plnk:portType name="qname"/>
  </plnk:role>
  <plnk:role name="ncname">?
   <plnk:portType name="qname"/>
  </plnk:role>
 </plnk:partnerLinkType>
...
</definitions>

<partnerLinks>
 <partnerLink name="ncname" partnerLinkType="qname"
  myRole="ncname"? partnerRole="ncname"?>+
 </partnerLink>
</partnerLinks>
receiveのWSDLポートタイプ定義
<portType name="purchaseOrderPT">
 <operation name="sendPurchaseOrder">
  <input message="pos:POMessage"/>
  <output message="pos:InvMessage"/>
  <fault name="cannotCompleteOrder"
   message="pos:orderFaultType"/>
 </operation>
</portType>

receiveとreplyの構文

<receive partnerLink="ncname" portType="qname"
 operation="ncname"
 variable="ncname"? createInstance="yes|no"?
 standard-attributes>
 standard-elements
 <correlations>?
  <correlation set="ncname" initiate="yes|no"?>+
 </correlations>
</receive>

<reply partnerLink="ncname" portType="qname"
 operation="ncname"
 variable="ncname"? faultName="qname"?
 standard-attributes>
 standard-elements
 <correlations>?
  <correlation set="ncname" initiate="yes|no"?>+
 </correlations>
</reply>

外部Webサービスの呼び出し(Invoke構文)

<invoke partnerLink="ncname" portType="qname"
 operation="ncname"
 inputVariable="ncname"? outputVariable="ncname"?
 standard-attributes>
 standard-elements
 <correlations>?
  <correlation set="ncname" initiate="yes|no"?
   pattern="in|out|out-in"/>+
 </correlations>
 <catch faultName="qname" faultVariable="ncname"?>*
  activity
 </catch>
 <catchAll>?
  activity
 </catchAll>
 <compensationHandler>?
  activity
 </compensationHandler>
</invoke>

相関セットと相関の構文

<correlationSets>?
 <correlationSet name="ncname" properties="qname-list"/>+
</correlationSets>
<correlations>?
 <correlation set="ncname" initiate="yes|no"?
  pattern="in|out|out-in"? />+
</correlations>

データのハンドリング
変数定義の構文

<variables>
 <variable name="ncname" messageType="qname"?
  type="qname"? element="qname"?/>+
</variables>

変数には、変数型としてWSDLのメッセージ型、XMLスキーマの単純型、XMLスキーマのエレメント型のいずれかを指定する。WSDLのメッセージ型の場合はmessageType属性に、単純型の場合はtype属性に、エレメント型の場合はelement要素にそれぞれ型を指定する。
assignアクティビティの構文

<assign standard-attributes>
 standard-elements
 <copy>+
  from-spec
  to-spec
 </copy>
</assign>

copy要素の子要素として、値の設定元(from-spec)と設定先(to-spec)を指定する。設定元と設定先には複数の指定方法がある。まず、設定元の指定方法には以下の5つがある。

<from variable="ncname"part="ncname"?/>
 partを指定しない場合はvariable属性で指定した変数に指定されている値。part属性を指定した場合は、それに相当するメッセージ・パートの値。

<from partnerLink="ncname"endpointReference="myRole|partnerRole"/>
 partnerLink属性で指定したパートナー・リンクとendpointReferenceで指定したロールから特定されるエンドポイント参照。

<from variable="ncname"property="qname"/>
 variable属性で指定した変数の、property属性に指定したプロパティに相当する値。

<fromexpression="general-expr"/>
 expression属性で指定されたXPATH式(後述)の評価結果。

<from> ... literal value ...</from>
 指定された文字列リテラルがそのまま設定値となる。

 続いて、設定先の指定方法は以下の3つである。

<to variable="ncname"part="ncname"?/>
 partを指定しない場合はvariable属性で指定した変数。part属性を指定した場合は、それに相当するメッセージ・パート。

<to partnerLink="ncname"/>
 partnerLink属性で指定したパートナー・リンク。

<to variable="ncname"property="qname"/>
 variable属性で指定した変数の、property属性に指定したプロパティ。

例外のハンドリング
throwアクティビティの構文

<throw faultName="qname" faultVariable="ncname"?
 standard-attributes>
 standard-elements
</throw>
例外ハンドラの構文
<faultHandlers>?
 <catch faultName="qname"? faultVariable="ncname"?>*
  activity
 </catch>
 <catchAll>?
  activity
 </catchAll>
</faultHandlers>
例外メッセージ定義(WSDL)
<portType name="shippingPT">
 <operation name="requestShipping">
  <input message="pos:shippingRequestMessage"/>
  <output message="pos:shippingInfoMessage"/>
  <fault name="cannotCompleteOrder"
   message="pos:orderFaultType"/>
 </operation>
</portType>
補正ハンドラの構文
<compensationHandler>?
 activity
</compensationHandler>

その他

アクティビティ名 概要 記述例
terminate プロセス全体を強制終了する。 <terminate/>
wait プロセスを待機状態にする。待機する期間は、期間(for)もしくは期限(until)で指定することができる。 <wait name="waitFor5Seconds" for="'PT5S'"/>
<wait name="waitUntilNextYearJP" until="'2005-01-01T00:00:00+09:00'"/>
empty 何も行わない。 <empty/>
sequence 複数のアクティビティを順番に実行する。 <sequence name="sequenseSample">
 (アクティビティ)
 (アクティビティ)
 (・・・・)
</sequence>
switch 指定した条件に合致したアクティビティを実行する。switchアクティビティの子要素であるcase要素のcondition属性に指定された条件に合致する場合はそのcase要素に指定されたアクティビティを、合致するものがなければotherwise要素に指定されたアクティビティを実行する。 <switch name="switchSample">
 <case condition="bpws:getVariableData('testId')='1'">
  (アクティビティ)
 </case>
 <otherwise>
  (アクティビティ)
 </otherwise>
 &
</switch>
while condition属性で指定された条件が真である間、このアクティビティの中で定義するアクティビティを反復実行する。 <while name="whileSample"condition="bpws:getVariableData('count')&lt;'3'">
 (アクティビティ)
</while>
pick イベントハンドラによる実行を定義する。イベントハンドラには、メッセージ着信(onMessage)によるものと、タイマー(onAlarm)によるものとがある。pickアクティビティを使うと、タイムアウトを設定したメッセージの受信待ちを実現できる。pickアクティビティにより、ビジネスプロセスのインスタンスを生成する場合は、receiveアクティビティ同様createInstance属性にyesを指定する。 <pick name="pickSample" createInstance="no">
 <onMessage partnerLink="starter"
  portType="tns:testProcessPT"
  operation="start"
  variable="startRequest">
  (アクティビティ)
 </onMessage>
 <onAlarm for="'PT1M'">
  (アクティビティ)
 </onAlarm>
&
</pick>
flow 複数のアクティビティを並行して実行する。また、アクティビティ間の遷移条件を指定するためのリンク機能を提供する。実行可能なアクティビティが存在しなくなったときに、flowアクティビティは終了する。 <flow name="flowSample">
 <links>
  <link name="receive-to-assess"/>
 </links>
 (アクティビティ)
 (アクティビティ)
 (・・・・)
</flow>
compensate 終了したスコープに対しての補正処理を定義する。例外ハンドラーもしくは補正ハンドラ内でのみ使用できる。 <compensate scope="sample -scope">
 (アクティビティ)
</compensate>
記事メニュー
最近更新されたスレッド
ウィキ募集バナー