Bpel-quick-guide

提供:Dev Guides
移動先:案内検索

BPEL-はじめに

SOAまたはサービス指向アーキテクチャは、ビジネスプロセスを再利用可能なサービスとして提示するためにテクノロジーを利用するアーキテクチャアプローチです。

  • これはビジネスに焦点を当てており、新しいレベルの統合、視覚化、監視、および最適化へのプロセス変換を可能にします。
  • これはテクノロジーではなく、テクノロジーを使用してビジネス自動化ソリューションを構築するための概念および戦略です。

ここで、BPELとは何か、SOAでBPELがどのように役立つかを見ていきます。

BPELとは

ビジネスプロセスエンジニアリング言語は、SOAアーキテクチャでプログラムを構築するために使用されるテクノロジです。

BPELプロセスサービスコンポーネントの追加

BPELプロセスサービスコンポーネントを追加するには、次の手順に従います-

  • アプリケーションナビゲータから、[ファイル]> [新規]> [アプリケーション]> [SOAアプリケーション]を選択します。
  • これにより、SOAアプリケーションの作成ウィザードが開始されます。
  • [アプリケーション名]ダイアログで、[アプリケーション名]フィールドにアプリケーション名を入力します。
  • [ディレクトリ]フィールドに、SOA複合アプリケーションとプロジェクトを作成するディレクトリパスを入力します。
  • Nextをクリックしてください。
  • [プロジェクト名]ダイアログで、[プロジェクト名]フィールドに名前を入力します。
  • Nextをクリックしてください。
  • [プロジェクトSOA設定]ダイアログで、[BPELプロセスとの複合]を選択します。
  • 完了をクリックします。

BPELコンポジット内のファイル

BPELコンポジットには次のファイルが含まれています-

  • composite.xml -このファイルには、サービス、サービスコンポーネント、参照、およびワイヤの複合アセンブリ全体が記述されています。
  • .bpel -このファイルには、プロセスに追加されたアクティビティのセットが含まれています。
  • .componentType -このファイルには、BPELプロセスサービスコンポーネントのサービスと参照が記述されています。
  • .wsdl -このファイルは、このBPELプロセスフローの入力および出力メッセージ、サポートされているクライアントインターフェイスと操作、およびその他の機能を定義します。

BPELコンポジット内のファイル

BPLプロセスで使用される概念

このセクションでは、BPLプロセスに関連するさまざまな概念を学習します。

オーケストレーション

  • 中央プロセス(別のWebサービスの場合もあります)が、関連するWebサービスを制御します。
  • 操作に関係するWebサービスでのさまざまな操作の実行を調整します。
  • 関係するWebサービスは、構成プロセスに関係していること、および高レベルのビジネスプロセスに参加していることを「認識」しません(また、知る必要はありません)。
  • オーケストレーションの中央コーディネーターのみがこの目標を認識しているため、オーケストレーションは、操作の明確な定義とWebサービスの呼び出し順序で集中化されます。

オーケストレーション

振り付け

  • 中央コーディネーターに依存しません。
  • 振り付けに関与する各Webサービスは、操作をいつ実行し、誰と対話するかを正確に知っています。
  • 振り付けに関与する各Webサービスは、操作をいつ実行し、誰と対話するかを正確に知っています。
  • 振り付けのすべての参加者は、ビジネスプロセス、実行する操作、交換するメッセージ、およびメッセージ交換のタイミングを認識する必要があります。

振付

BPEL-アクティビティ

この章では、ビルディングブロックを構成するさまざまなアクティビティ、BPELプロセスサービスコンポーネントのビルディングブロックについて学習します。

Oracle BPEL Designerには、BPELプロセス・サービス・コンポーネントにドラッグしてアクティビティをダブルクリックし、その属性とプロパティ値を定義する一連のアクティビティが含まれています。

アクティビティを割り当てる

アクティビティの割り当て assignアクティビティを使用すると、ある変数の内容を別の変数にコピーするなど、データを操作できます。

アクティビティを呼び出す

Invoke Activity Logo invokeアクティビティを使用すると、サービス(パートナーリンクによって識別される)を呼び出し、このサービスが実行する操作を指定できます。

アクティビティを受け取る

アクティビティの受信受信アクティビティは、サービスからの非同期コールバック応答メッセージを待機します。

Invokeアクティビティの詳細については、次のセクションで説明します。

アクティビティを呼び出す

invokeアクティビティにより、サービスに対して呼び出される操作を指定できます(パートナーリンクによって識別されます)。 操作は、サービスによって提供されるポートでの一方向または要求/応答のいずれかです。 変数は、invokeアクティビティで自動的に作成できます。 invokeアクティビティは、同期サービスを起動するか、非同期Webサービスを開始します。

invokeアクティビティは、プロセス内のポートを開いてデータを送受信します。 このポートは、必要なデータを送信して応答を受信するためにさらに使用できます。 同期コールバックの場合、送信機能と受信機能の両方に必要なポートは1つだけです。

アクティビティの呼び出し

BPEL-BPELプロセスのパートナーリンク

パートナーリンクは、BPELプロセスが対話するすべての関係者間の通信交換として定義されます。

これらは、BPELプロセスが外部世界と相互作用する実際の実装への参照です。

呼び出されたパートナーリンク

これらは、BPELプロセスによって起動されるサービスへのリンクです。

クライアントパートナーリンク

これらは、BPELプロセスを呼び出すことができるサービスへのリンクです。

パートナーリンクのプロパティ

パートナーリンクプロパティエディターを使用すると、BPELプロセスのパートナーリンクを確立できます。 パートナーリンクプロパティエディターでは、次を指定できます-

  • 名前-Invoke要素の名前を指定します。
  • * WSDLファイル*-パートナーリンクに関連付けられたWSDLファイルを示します。
  • パートナーリンクタイプ-WSDLで定義されたパートナーリンクタイプを示します。
  • 私の役割-ビジネスプロセス自体の役割を示します。
  • Partner Pole -パー​​トナーの役割を示します。
  • ドキュメント-[プロパティ]ウィンドウでアクセスします。

パートナーリンクは.bpelファイルで定義されます。

BPELは、次の3つの方法でサービスと対話することができます-

  • BPELプロセスを呼び出すサービス
  • BPELプロセスによって呼び出されるサービス
  • 双方向に機能するサービス

BPEL-パートナーリンクの作成

この章では、パートナーリンクを作成する方法を学習します。

パートナーリンクを作成するには、以下に示す手順に従ってください-

  • SOA Composite Editorで、BPELプロセスサービスコンポーネントをダブルクリックします。
  • サービスコンポーネントをクリックすると、Oracle BPEL Designerが表示されます。
  • コンポーネントパレットで、BPELサービスを展開します。

パートナーリンクの作成

  • パートナーリンクを適切なパートナーリンクスイムレーンにドラッグします。
  • 上記のパートナーリンクのプロパティで説明したように、このダイアログのフィールドに入力します。

BPEL-アダプター

アダプタを使用すると、BPELプロセスサービスコンポーネントをファイルシステム、FTPサーバー、データベーステーブル、データベースキュー、ソケット、Java Message Services(JMS)、MQ、およびOracle E-Business Suiteへのアクセスと統合できます。 このウィザードを使用すると、BPELプロセスサービスコンポーネントで使用するために、次の図に示すアダプターのタイプを構成できます-

アダプターの種類

次の画像は、さまざまなアダプタタイプを示しています-

アダプターの種類

アドバンスドキューイング(AQ)

キューとの対話用。 AQは、参加アプリケーション間の双方向の非同期通信のための柔軟なメカニズムを提供します。

Oracle Business Activity Monitoring(BAM)

Oracle BAMサーバーのデータ・オブジェクトにデータを公開します。

データベース

JDBCおよびOracle Business Intelligence(特殊なデータソースタイプ)を介したOracleおよびOracle以外のデータベースとの対話用。

FTPとファイル

ローカルファイルシステムおよびリモートファイルシステムでのファイル交換(読み取りおよび書き込み)(ファイル転送プロトコル(FTP)の使用による)。

Java Messaging Service(JMS)

JMSとの対話用。 JMSアーキテクチャは、多くのメッセージングサーバーアーキテクチャに対して1つのクライアントインターフェイスを使用します。

メッセージキュー(MQ)

WebSphere MQキューイングシステムとのメッセージ交換用。

Oracleアプリケーション

Oracle Applicationの一連の統合ビジネス・アプリケーションとの相互作用。

Oracle B2B

メタデータサービス(MDS)リポジトリでB2Bメタデータを参照し、ドキュメント定義を選択するため。

ソケット

TCP/IPソケットを介した通信用の標準または非標準プロトコルのモデリング用。

アダプタサービス名

アダプタ名がパレットから選択されると、[サービス名]ウィンドウで名前の入力を求められます。 この例では、 File Adapter が選択されています。 ウィザードが完了すると、このサービス名のWSDLファイルがBPELプロセスサービスコンポーネントのアプリケーションナビゲータに表示されます(この例では、 ReadFile.wsdl という名前です)。 サービス名はプロジェクト内で一意である必要があります。 この構成ファイルには、このウィザードで指定されたアダプター構成設定が含まれています。 他の構成ファイル(ヘッダーファイルやアダプター固有のファイルなど)も作成されます。 これらのファイルはアプリケーションナビゲータに表示されます。

アダプターサービス名

BPEL-プロセスモニター

Oracle BPEL DesignerのBPELプロセス・モニターは、Oracle BPEL Designerの上部にある「モニター」を選択して構成できます。

プロセスモニター

この段階で、Oracle BAMアダプタを構成する必要があります。

BPEL-一方向メッセージ

クライアントBPELプロセスは、サービスBPELプロセスにメッセージを送信し、サービスBPELプロセスは、以下の図に示すように返信する必要はありません-

一方向メッセージ

  • クライアントBPELプロセスには、有効なパートナーリンクとinvokeアクティビティが必要です。
  • サービスBPELプロセスにはreceiveアクティビティが必要です。
  • すべてのパートナーアクティビティと同様に、Webサービス記述言語(WSDL)ファイルは相互作用を定義します。 WSDLファイルは次のとおりです。
<wsdl:portType name = "BPELProcess">
   <wsdl:operation name = "process">
      <wsdl:input message = "client:BPELProcessRequestMessage"/>
      <wsdl:output message = "client:BPELProcessResponseMessage"/>
   </wsdl:operation>
</wsdl:portType>

BPEL-同期相互作用

クライアントBPELプロセスは、サービスBPELプロセスにリクエストを送信し(下図のd1)、すぐに返信を受信します(下図のd2)。 たとえば、ユーザーは大学への入学のためにオンライン申請フォームへのサブスクリプションを要求し、要求が受け入れられたことの確認メールをすぐに受信します。

同期インタラクション

  • クライアントBPELプロセスには、invokeアクティビティが必要です。 クライアント側のポートは要求を送信し、応答を受信します。
  • サービスBPELプロセスには、着信要求を受け入れるためのreceiveアクティビティと、WSDLで定義された要求情報またはエラーメッセージ(障害、以下の図のf1)を返すためのreplyアクティビティが必要です。
  • すべてのパートナーアクティビティと同様に、Webサービス記述言語(WSDL)ファイルは相互作用を定義します。 WSDLファイルは次のとおりです。
  • WSDLファイル*
<wsdl:portType name = "BPELProcess">
   <wsdl:operation name = "process">
      <wsdl:input message = "client:BPELProcessRequestMessage"/>
      <wsdl:output message = "client:BPELProcessResponseMessage"/>
   </wsdl:operation>
</wsdl:portType>

BPEL-非同期相互作用

クライアントBPELプロセスは、サービスBPELプロセスにリクエストを送信し(下図のd1)、サービスが応答するまで待機します(下図のd2)。

たとえば、ユーザーが大学への入学のためにオンライン申請フォームへのサブスクリプションを要求すると、その要求は入学事務局で受け入れられない限り確認できません。

非同期インタラクション

  • クライアントBPELプロセスには、リクエストを送信するinvokeアクティビティとリプライを受信するreceiveアクティビティが必要です。 サービスBPELプロセスには、着信要求を受け入れるreceiveアクティビティと、要求された情報または障害のいずれかを返すinvokeアクティビティが必要です。 + 注*-同期BPELプロセスと非同期BPELプロセスからの応答の違いは、同期サービスが応答アクティビティを使用してクライアントに応答し、非同期サービスが呼び出しアクティビティを使用することです。
  • すべてのパートナーアクティビティと同様に、Webサービス記述言語(WSDL)ファイルは相互作用を定義します。 WSDLファイルは次のとおりです。
  • WSDLファイル*
<wsdl:portType name = "BPELProcess">
   <wsdl:operation name = "process">
      <wsdl:input message = "client:BPELProcessRequestMessage"/>
   </wsdl:operation>
</wsdl:portType>

<wsdl:portType name = "BPELProcessCallback">
   <wsdl:operation name = "processResponse">
      <wsdl:input message = "client:BPELProcessResponseMessage"/>
   </wsdl:operation>
</wsdl:portType>

タイムアウト付きの非同期相互作用

クライアントBPELプロセスは、サービスBPELプロセス(下図のd1)に要求を送信し、サービスが応答するか、特定の制限時間に達するまでのいずれか早い方を待ちます。 (下図のd2)。

たとえば、ユーザーが大学への入学のためにオンライン申請フォームへのサブスクリプションを要求し、ユーザーが指定された時間内に確認応答を受信しない場合、要求はキャンセルされます。

タイムアウト付きの非同期相互作用

クライアントBPELプロセスには、リクエストを送信するinvokeアクティビティと、2つのブランチ( onMessage ブランチと onAlarm ブランチ)を持つpickアクティビティが必要です。 制限時間が経過した後に応答が来た場合、メッセージは配信不能キューに送られます。

サービスBPELプロセスには、着信要求を受け入れるreceiveアクティビティと、要求された情報または障害のいずれかを返すinvokeアクティビティが必要です。

すべてのパートナーアクティビティと同様に、Webサービス記述言語(WSDL)ファイルは相互作用を定義します。 Bpel-asynchronous-interactions-with-notification-timer

BPEL-1つのリクエストと複数のレスポンス

この章では、1つの要求と複数の応答の概念について学習します。

  • クライアントBPELプロセスは、単一の要求をサービスBPELプロセスに送信し、代わりに複数の応答を受信します。 +たとえば、要求は製品をオンラインで注文することであり、最初の応答は推定配達時間、2番目の応答は支払い確認、3番目の応答は製品が出荷されたことの通知です。 この例では、応答の数とタイプが予想されます。
  • クライアントBPELプロセスには、リクエストを送信するinvokeアクティビティと、3つのreceiveアクティビティを持つシーケンスアクティビティが必要です。
  • サービスBPELプロセスには、クライアントからのメッセージを受け入れるreceiveアクティビティと、各応答に1つずつ、3つのinvokeアクティビティを持つシーケンス属性が必要です。
  • すべてのパートナーアクティビティと同様に、Webサービス記述言語(WSDL)ファイルは相互作用を定義します。

1つのリクエストと複数のレスポンス Bpel-one-request-one-of-two-possible-responses Bpel-one-request-mandatory-and-optional-response

BPEL-部分処理

ここで、BPELの部分処理の概念を学習します。

  • クライアントBPELプロセスはリクエストをサービスBPELプロセスに送信し、すぐに応答を受け取りますが、サービス側で処理が続行されます。
  • このパターンには、複数のショットコールバックを含めることができ、その後に長期的な処理が続きます。
  • たとえば、クライアントは休暇パッケージの購入要求を送信し、サービスは購入を確認する即時の返信を送信し、ホテル、フライト、レンタカーなどの予約を続けます。
  • クライアントBPELプロセスには、各要求のinvokeアクティビティと、非同期トランザクションの各応答のreceiveアクティビティ、または各同期トランザクションのinvokeアクティビティが必要です。
  • サービスBPELプロセスには、クライアントからの各リクエストに対するreceiveアクティビティと、各レスポンスに対するinvokeアクティビティが必要です。 応答が終了すると、サービスとしてのサービスBPELプロセスは処理を続行でき、トランザクションで収集された情報を使用して、クライアントからの入力なしで必要なタスクを実行します。
  • すべてのパートナーアクティビティと同様に、Webサービス記述言語(WSDL)ファイルは相互作用を定義します。

部分処理

BPEL-複数のアプリケーションの相互作用

この章では、複数のアプリケーションとBPELの相互作用について学習します。

  • トランザクションに関係するアプリケーションが3つ以上ある場合。
  • このA-to-B-to-C-to-Aトランザクションパターンは、多数のトランザクションを同時に処理できます。 したがって、どのメッセージがどこに行くのかを追跡するためのメカニズムが必要です。
  • これは、WS-Addressingまたは相関セットを使用して処理できます。

複数のアプリケーションの相互作用

BPEL-同期Webサービスの呼び出し

前の章のいずれかで、同期Webサービスは呼び出しに対する即時の応答を提供するものであることを説明しました。

以下に示すスクリーンショットでは、ユーザーからのリクエストを受け入れるreceiveアクティビティを持つ同期BPELプロセスを作成しました。 応答アクティビティは同時に応答を送り返します。

同期Webサービスの呼び出し

非同期Webサービスの呼び出し

前に説明したように、非同期Webサービスは、他のWebサービスに要求を送信し、応答を待機するサービスです。

以下に示すスクリーンショットでは、ユーザーからのリクエストを受け入れるreceiveアクティビティを持つ非同期BPELプロセスを作成しました。 assignアクティビティは、リクエスト内の異なる要素に値をさらに割り当てます。

次に、invokeアクティビティはHelloWorldアプリケーションを起動します。HelloWorldアプリケーションは同時にレスポンスを送信し、receiveアクティビティでキャプチャされます。

さらに、最終的に出力を生成し、非同期で応答を送信するコールバックアクティビティがあります。

*receiveInput* または *callbackClient* をダブルクリックすると、それぞれに変数が1つしかないことがわかります。
receiveInput → inputVariable
callbackClient → outputVariable

非同期Webサービスの呼び出し

BPEL-並列フローの使用

この章では、BPELで並列フローがどのように機能するかを理解します。

フローアクティビティとは

通常、フローアクティビティには多くのシーケンスアクティビティが含まれ、各シーケンスは並行して実行されます。 フローアクティビティには、他のアクティビティを含めることもできます。

たとえば、2つの非同期コールバックが並行して実行されるため、一方のコールバックがもう一方のコールバックが完了するのを待つ必要はありません。 各応答は、異なるグローバル変数に保存されます。

flowアクティビティでは、BPELコードによりパラレルブランチの数が決定されます。 ただし、必要なブランチの数は、利用可能な情報に応じて異なることがよくあります。

フローアクティビティ

FlowNアクティビティとは何ですか?

flowNアクティビティは、使用可能なデータとプロセス内のロジックに基づいて実行時に定義されるNの値に等しい複数のフローを作成します。 インデックス変数がNの値に達するまで、新しいブランチが作成されるたびに、インデックス変数の増分があります。

flowNアクティビティは、任意の数のデータ要素でアクティビティを実行します。 要素の数が変わると、BPELプロセスはそれに応じて調整します。

flowNによって作成されたブランチは同じアクティビティを実行しますが、異なるデータを使用します。 各ブランチは、インデックス変数を使用して入力変数を検索します。 インデックス変数をXPath式で使用して、そのブランチに固有のデータを取得できます。

FlowNアクティビティ

BPEL-条件分岐の使用

BPELはロジックを適用して、条件分岐によって選択を行います。 条件分岐に基づいた2つの異なるアクションは以下に示されています-

スイッチアクティビティ

この方法では、2つ以上のブランチを設定します。各ブランチはXPath式の形式です。 式が真の場合、ブランチが実行されます。 式がfalseの場合、BPELプロセスは次の分岐条件に移動します。有効な分岐条件が見つかるか、それ以外の分岐が見つかるか、分岐がなくなるまでです。 複数のブランチ条件が真の場合、BPELは最初の真のブランチを実行します。

活動中

whileアクティビティを使用して、whileループを作成し、2つのアクションから選択できます。

条件分岐

BPEL-障害処理の使用

フォルト処理の使用方法を理解するには、Oracle SOA SuiteのService Compositeの基本アーキテクチャを学習する必要があります。

  • サービスコンポーネント-BPELプロセス、ビジネスルール、ヒューマンタスク、メディエーター。 これらは、SOA複合アプリケーションを構築するために使用されます。
  • コンポーネントのバインド-SOAコンポジットと外部の世界との接続を確立します。
  • サービス-SOA複合アプリケーションへのエントリポイントを提供します。
  • Binding -SOAP/HTTP、JCAアダプタなどのサービスと通信するプロトコルを定義します。
  • WSDL -Webサービスのサービス定義を定義します。
  • 参照-SOA複合アプリケーションがメッセージを外部サービスに送信できるようにします
  • ワイヤー-サービスコンポーネント間の接続を有効にします。

障害の種類

さまざまな種類の障害を見てみましょう。

ビジネスの欠陥

アプリケーションがTHROWアクティビティを実行するか、INVOKEが応答として障害を受信すると発生します。 障害名はBPELプロセスサービスコンポーネントによって指定されます。 障害名と障害変数を使用する障害ハンドラーは、この障害をキャッチします。

ランタイム障害

これはシステムによってスローされます。 これらの障害は、 RunTimeFaultMessage に関連付けられており、

  • http://schemas.oracle.com/bpel/extensionnamespace*。

障害処理の方法

このセクションでは、障害処理のさまざまな方法について学習します。

アクティビティを投げる

Throwアクティビティは明示的に障害をスローします。 catchブロックはこの障害をキャッチし、対応するアクションが実行されます。

  • throwアクティビティを使用すると、ビジネスフォールトをスローできます。作成されたスコープ内で、このフォールトをキャッチし、呼び出し元(コンシューマー)にリダイレクトしてアクションを実行できます。
  • 上記のアプローチの代わりに、作成されたスコープのcatchアクティビティでキャッチされた同じ障害をスローします。 メインスコープでは、catchallアクティビティを使用してこの障害をキャッチできます。

エラーハンドラフレームワーク(EHF)

EHFで使用される2つの主なファイルは-

  • Fault-Policy.xml
  • Fault-Bindings.xml

BPELプロセスがエラーをスローするたびに、EHFはエラーがFault-Bindings.xmlファイルに存在するかどうかを確認します。 その場合、Fault-Policy.xmlファイルのアクションが実行されます。 アクションが見つからない場合、フォールトがスローされ、catchブロックで処理されます。

障害管理フレームワーク(Fault-Policy.xmlおよびFault-Bindings.xml)はSOAコンポジット内に保持されます。

catchやcatchallなどのフォールトハンドラーはすべてのフォールトをキャッチするためにBPEL内にありますが、* faultポリシーはinvokeアクティビティが失敗したときにのみ実行されます。*

BPEL-障害のあるプロセスの再送信

この章では、障害のあるプロセスの再送信に関連するさまざまなシナリオを紹介します。

シナリオA

BPELコードは障害ポリシーを使用し、障害は「ora-human-intervention」アクティビティを使用して処理されます。 その後、障害は回復可能としてマークされ、インスタンスの状態は「実行中」に設定されます。

シナリオB

BPELコードはfault-policyを使用し、「ora-rethrow-fault」アクションを使用して障害がキャッチされ、再スローされます。 障害は回復可能としてマークされ、インスタンスの状態は「障害」に設定されます。障害が回復可能なものであれば(URLが利用できなかったなど)。

BPEL-JavaおよびJava EEコードの組み込み

BPELプロセスにJavaおよびJava EEコードを組み込む方法はいくつかあります。 以下はいくつかの重要な方法です-

  • Simple Object Access Protocol(SOAP)サービスとしてラップ
  • bpelx-execタグを使用して、JavaコードスニペットをBPELプロセスに埋め込みます
  • XMLファサードを使用してDOM操作を簡素化する
  • bpelx-exec組み込みメソッドを使用します
  • サービスインターフェイスにラップされたJavaコードを使用する

Java Embeddingアクティビティを使用すると、BPELプロセスにアクティビティを追加できます。 標準のJDKライブラリ、BPEL API、デプロイされたSCAコンポジット(SCA-INF/libディレクトリ内)のJARファイルに含まれるカスタムおよびサードパーティJavaクラス、およびSOAのクラスパスで利用可能なJavaクラスとライブラリを使用してJavaスニペットを記述できます。スイートの実行時間。

Java Embeddingは、内部に隠された機能を意味し、それほど切り離された方法ではありません。 Javaコードの保守は困難です。 JavaをBPEL(XML駆動)に埋め込むことで、さまざまなスキルと高価なXMLからJavaオブジェクトへのマーシャリングとアンマーシャリングが必要なミキシングテクノロジーを開始します。

Java Embeddingの最適な使用例は、高度なログ/トレースまたは特別な検証/変換の場合です。 ただし、BPELエンジンのビルトイン機能、SOA Suite 11gの他のコンポーネント、およびそれに付属するアダプタを置き換えないでください。

BPEL-XMLデータの操作

XPathは主に、BPELプロセスでXMLを操作するために使用されます。 XMLの操作に使用できる貴重なXpath関数がいくつかあります。 以下の機能を見てみましょう。

bpel:getVaribleData(varName、partName、xpathStr)

これは、XPath式を使用して、変数から要素のセットを抽出するために使用できます。

<bpel:copy>
   <bpel:from>
   <![CDATA[count(bpel:getVariableData(‘$Variable','$partName')/ns:return)]]>
   </bpel:from>
      <bpel:to variable = "itemNumber">
   </bpel:to>
</bpel:copy>

bpel:getLinkStatus()

:getVariableProperty(string、string)

:doXSLTTransform()

文字列()

string-length()

ブール値

XPathブール関数を使用してブール値を割り当てることができます。

<assign>
   <!-- copy from boolean expression function to the variable -->
   <copy>
      <from expression = "true()"/>
      <to variable = "output" part = "payload" query="/result/approved"/>
   </copy>
</assign>

日付または時刻を割り当てる

Oracle BPEL XPath関数getCurrentDate、getCurrentTime、またはgetCurrentDateTimeをそれぞれ使用して、日付フィールドまたは時間フィールドの現在の値を割り当てることができます。

<!-- execute the XPath extension function getCurrentDate() -->
<assign>
   <copy>
      <from expression = "xpath20:getCurrentDate()"/>
      <to variable = "output" part = "payload"
      query = "/invoice/invoiceDate"/>
   </copy>
</assign>

文字列の連結

ある文字列変数(または変数部分やフィールド)の値を別の文字列変数にコピーするのではなく、最初に複数の文字列を連結するなどの文字列操作を実行できます。

<assign>
   <!-- copy from XPath expression to the variable -->
   <copy>
      <from expression = "concat('Hello ',
      bpws:getVariableData('input', 'payload', '/p:name'))"/>
      <to variable = "output" part = "payload" query = "/p:result/p:message"/>
   </copy>
</assign>

文字列リテラルの割り当て

BPELの変数に文字列リテラルを割り当てることができます。

<assign>
   <!-- copy from string expression to the variable -->
   <copy>
      <from expression = "'GE'"/>
      <to variable = "output" part = "payload" query = "/p:result/p:symbol"/>
   </copy>
</assign>

数値の割り当て

XPath式で数値を割り当てることができます。

<assign>
   <!-- copy from integer expression to the variable -->
   <copy>
      <from expression = "100"/>
      <to variable = "output" part = "payload" query = "/p:result/p:quantity"/>
   </copy>
</assign>

-XMLドキュメントの変換には、いくつかのXSLT関数が使用されました。 Bpel-using-correlation-sets-message-aggregation

BPELプロセスでのイベントとタイムアウトの使用

非同期Webサービスは通常、応答を返すのに長い時間がかかるため、BPELプロセスサービスコンポーネントはタイムアウトするか、待機をあきらめ、一定時間後に残りのフローを続行できる必要があります。 pickアクティビティを使用して、指定された時間だけ待機するか、職務の実行を継続するようにBPELフローを構成できます。 時間の有効期限を設定するには、待機アクティビティを使用できます。 メッセージを管理するために、ビジネスプロセスがパートナーWebサービスからのコールバックを待機している場合は特に、イベントを使用できます。

イベント

BPELは2種類のイベントをサポートしています-

メッセージイベント

これらのイベントは、ポートタイプでの操作呼び出しを介した着信メッセージによってトリガーされます。

アラームイベント

これらのイベントは時間に関連しており、特定の期間後または特定の時間にトリガーされます。

ただし、多くの場合、複数のメッセージを待機する方が便利です。そのうち1つだけが発生します。

アラームイベントは、15分間などの特定の期間、プロセスがコールバックを待機する場合に役立ちます。

  • コールバックを受信しない場合、プロセスフローは設計どおりに続行します。
  • 常に利用可能なWebサービスに依存できない、疎結合のサービス指向アーキテクチャで役立ちます。

ピックアクティビティ

pickアクティビティには2つのブランチがあります-

  • onMessage -このブランチのコードは、タイムアウトが追加される前に応答を受信するためのコードと同じです。
  • onAlarm -この条件には、1分のタイムアウトのコードがあります。

待機アクティビティ

待機アクティビティを使用すると、プロセスは指定された期間、または制限時間に達するまで待機できます。 有効期限基準の1つのみを指定する必要があります。

BPEL-通知サービスの使用

BPELプロセスは、通知サービスに利用できます。 プロセスは、次を送信するように設計することができます-

  • Eメール
  • ボイスメッセージ
  • インスタントメッセージング(IM)、または
  • ショートメッセージサービス(SMS)通知

上記のサービスの場合、着信メッセージと発信メッセージのチャネルを構成できます。

Oracle BPEL Process Managerセンサーの使用

SOAアプリケーション内の複合センサーは、メッセージの追跡可能なフィールドを定義する機能を提供し、メッセージ内のフィールドを検索することで特定の複合インスタンスを見つけることができます。 たとえば、メッセージ内の注文番号に対してセンサーを定義することで、問題の注文番号が見つかったインスタンスを見つけることができます。

複合センサーは、いくつかのコンポーネントのSOAアプリケーション内で定義することができます-

  • サービスコンポーネント(公開サービス)
  • 参照コンポーネント(外部参照)
  • ビジネスイベントにサブスクライブしているメディエーターまたはBPELコンポーネント(イベントの発行ではセンサーを使用できません)

複合センサーを定義するさまざまな方法

複合センサーを定義するにはさまざまな方法があります-

  • 既存の変数をセンサーとして指定する。
  • 式ビルダーの助けを借りた式による。
  • プロパティを使用する(例: メッセージヘッダープロパティ)。

Enterprise Managerのセンサー

センサーを定義すると、EM Consoleの複合インスタンス内のデータをすばやく検索できます。

EM Consoleダッシュボードでは、ユーザーはセンサー名と値でインスタンスを検索できます。

Oracle Process Managerセンサー

[フローインスタンス]タブでは、ドロップダウンからセンサーを選択し、センサー値にワイルドカードのような値を使用できます。

フローインスタンスタブ

BPEL 1.1とBPEL 2.0の違い

2.0で新しいアクティビティが追加され、1.1のアクティビティが置き換えられました。

<forEach>

このアクティビティは、一連のアクティビティを繰り返すのに役立ちます。 このアクティビティは、BPEL 1.1バージョンのFlowNアクティビティを置き換えます。

<繰り返しまで>

このアクティビティは、アクティビティの本体を少なくとも1回実行する必要がある場合に役立ちます。 repeatUntilアクティビティのXPath式条件は、アクティビティの本体が完了した後に評価されます。

<if>-<elseif>-<else>

このアクティビティは、BPEL 2.0のスイッチアクティビティを置き換えます。 アクティビティを使用すると、特定のアクティビティの条件付き動作を定義して、2つ以上のブランチを決定できます。 一連のブランチから実行するアクティビティが1つだけ選択されます。

<compensateScope>

このアクティビティは、指定された子スコープの補正に役立ちます。

<再スロー>

このアクティビティは、フォールトハンドラーに追加されました。 これにより、すぐに囲むフォールトハンドラーによって最初にキャプチャされたフォールトを再スローできます。