BPEL-クイックガイド

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

  • これはビジネスに焦点を合わせており、プロセスを新しいレベルの統合、視覚化、監視、および最適化に変換できます。

  • これはテクノロジーではなく、テクノロジーを使用してビジネス自動化ソリューションを構築するための概念および戦略です。

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

BPELとは何ですか?

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

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

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

  • アプリケーション・ナビゲーターから、「ファイル」>「新規」>「アプリケーション」>「SOAアプリケーション」を選択します。

  • これにより、SOAアプリケーションの作成ウィザードが開始されます。

  • [アプリケーション名]ダイアログで、[アプリケーション名]フィールドにアプリケーション名を入力します。

  • 「ディレクトリー」フィールドに、SOA複合アプリケーションおよびプロジェクトを作成するためのディレクトリー・パスを入力します。

  • [次へ]をクリックします。

  • [プロジェクト名]ダイアログで、[プロジェクト名]フィールドに名前を入力します。

  • [次へ]をクリックします。

  • 「プロジェクトSOA設定」ダイアログで、「BPELプロセスとのコンポジット」を選択します。

  • [完了]をクリックします。

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

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

  • composite.xml −このファイルは、サービス、サービスコンポーネント、参照、およびワイヤの複合アセンブリ全体を記述します。

  • .bpel −このファイルには、プロセスに追加された一連のアクティビティが含まれています。

  • .componentType −このファイルには、BPELプロセスサービスコンポーネントのサービスと参照が記述されています。

  • .wsdl −このファイルは、このBPELプロセス・フロー、サポートされているクライアントのインターフェースと操作、およびその他の機能の入力メッセージと出力メッセージを定義します。

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

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

オーケストレーション

    通常、プライベートビジネスプロセスで使用されます。
  • 中央プロセス(別のWebサービスの場合もあります)が、関連するWebサービスを制御します。

  • 操作に関連するウェブサービスでのさまざまな操作の実行を調整します。

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

振り付け

  • 中央コーディネーターに依存しません。

  • コレオグラフィーに関係する各Webサービスは、その操作をいつ実行するか、誰と対話するかを正確に知っています。

  • コレオグラフィーに関係する各Webサービスは、その操作をいつ実行するか、誰と対話するかを正確に知っています。

  • コレオグラフィーのすべての参加者は、ビジネスプロセス、実行する操作、交換するメッセージ、およびメッセージ交換のタイミングを知っている必要があります。

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

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

アクティビティの割り当て

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

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

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

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

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

次のセクションで、呼び出しアクティビティについて詳しく学びましょう。

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

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

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

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

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

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

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

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

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

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

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

  • Name −Invoke要素の名前を指定します。

  • WSDL File −パートナーリンクに関連付けられているWSDLファイルを示します。

  • Partner Link Type −WSDLで定義されているパートナーリンクタイプを示します。

  • My Role −ビジネスプロセス自体の役割を示します。

  • Partner Pole −パートナーの役割を示します。

  • Documentation − [プロパティ]ウィンドウからアクセスします。

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

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

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

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

以下に示す手順に従って、パートナーリンクを作成します-

  • SOAコンポジット・エディターで、BPELプロセス・サービス・コンポーネントをダブルクリックします。

  • サービス・コンポーネントをクリックすると、Oracle BPELDesignerが表示されます。

  • コンポーネントパレットで、「BPELサービス」を展開します。

  • パートナーリンクを適切なパートナーリンクスイムレーンにドラッグします。

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

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

アダプターの種類

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

高度なキューイング(AQ)

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

Oracle Business Activity Monitoring(BAM)

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

データベース

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

FTPとファイル

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

Javaメッセージングサービス(JMS)

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

メッセージキュー(MQ)

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

OracleApplications

OracleApplicationの統合ビジネスアプリケーションのセットとの対話用。

Oracle B2B

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

ソケット

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

アダプターサービス名

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

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

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

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

  • クライアントBPELプロセスには、有効なパートナーリンクと呼び出しアクティビティが必要です。

  • サービスBPELプロセスには受信アクティビティが必要です。

  • すべてのパートナーアクティビティと同様に、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プロセス(下図のd1)に要求を送信し、即時応答(下図のd2)を受信します。たとえば、ユーザーが大学への入学を求めるオンライン申請フォームのサブスクリプションを要求すると、要求が受け入れられたことを確認する電子メールがすぐに送信されます。

  • クライアントBPELプロセスには呼び出しアクティビティが必要です。クライアント側のポートは要求を送信し、応答を受信します。

  • サービスBPELプロセスには、着信要求を受け入れるための受信アクティビティと、要求された情報またはWSDLで定義されたエラーメッセージ(障害、下図のf1)のいずれかを返すための応答アクティビティが必要です。

  • すべてのパートナーアクティビティと同様に、Webサービス記述言語(WSDL)ファイルが相互作用を定義します。WSDLファイルは以下のとおりです。

WSDL File

<wsdl:portType name = "BPELProcess">
   <wsdl:operation name = "process">
      <wsdl:input message = "client:BPELProcessRequestMessage" />
      <wsdl:output message = "client:BPELProcessResponseMessage"/>
   </wsdl:operation>
</wsdl:portType>

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

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

  • クライアントBPELプロセスには、要求を送信するための呼び出しアクティビティと、応答を受信するための受信アクティビティが必要です。

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

    Note −同期BPELプロセスと非同期BPELプロセスからの応答の違いは、同期サービスは応答アクティビティを使用してクライアントに応答し、非同期サービスは呼び出しアクティビティを使用することです。

  • すべてのパートナーアクティビティと同様に、Webサービス記述言語(WSDL)ファイルが相互作用を定義します。WSDLファイルは以下のとおりです。

WSDL File

<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プロセスには、リクエストを送信するための呼び出しアクティビティと、2つのブランチを持つピックアクティビティが必要です。 onMessage ブランチと onAlarmブランチ。制限時間が経過した後に応答があった場合、メッセージはデッドレターキューに送られます。

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

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

この章では、通知タイマーとの非同期相互作用について学習します。非同期相互作用に関連する次の点を考慮してください-

  • クライアントBPELプロセスは、サービスBPELプロセスに要求を送信し、応答を待ちますが、タイマーの期限が切れると通知が送信されます。

  • クライアントBPELプロセスは、タイマーの期限が切れた後も、サービスBPELプロセスからの応答を待ち続けます。

  • クライアントBPELプロセスには、要求を送信するための呼び出しアクティビティと、応答を受け入れるための受信アクティビティを含むスコープアクティビティが必要です。ザ・onAlarm スコープアクティビティのハンドラーには、時間制限と、タイマーの期限が切れたときに何をするかについての指示があります。

  • たとえば、60秒待ってから、プロセスに予想よりも時間がかかっていることを示す警告を送信します。

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

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

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

  • クライアントBPELプロセスは、単一の要求をサービスBPELプロセスに送信し、その代わりに複数の応答を受信します。

    たとえば、要求はオンラインで製品を注文することであり、最初の応答は配達予定時間、2番目の応答は支払い確認、3番目の応答は製品が出荷されたことの通知です。この例では、応答の数とタイプが予想されます。

  • クライアントBPELプロセスには、要求を送信するための呼び出しアクティビティと、3つの受信アクティビティを含むシーケンスアクティビティが必要です。

  • サービスBPELプロセスには、クライアントからのメッセージを受け入れるための受信アクティビティと、応答ごとに1つずつ、3つの呼び出しアクティビティを持つシーケンス属性が必要です。

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

この章では、1つの要求と2つの可能な応答のうちの1つの概念について学習します。

  • クライアントBPELプロセスは、単一の要求をサービスBPELプロセスに送信し、2つの可能な応答のうちの1つを受信します。

    たとえば、リクエストはオンラインで製品を注文することであり、最初の応答は在庫ありメッセージまたは在庫切れメッセージのいずれかです。

  • クライアントBPELプロセスには次のものが必要です-

    • リクエストを送信するためのinvokeアクティビティ。

    • 2つのブランチを持つピックアクティビティ。1つは在庫あり応答用のonMessageで、もう1つは在庫ありメッセージを受信した場合の対処方法です。

    • 在庫切れの応答と在庫切れのメッセージを受信した場合の対処方法に関する2番目のonMessage。

  • サービスBPELプロセスには、クライアントからのメッセージを受け入れるための受信アクティビティと、2つのブランチを持つスイッチアクティビティが必要です。1つは、アイテムが利用可能な場合に在庫メッセージを送信する呼び出しアクティビティを持ち、もう1つは呼び出しアクティビティを送信するブランチです。アイテムが利用できない場合の在庫切れメッセージ。

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

この章では、1つの要求、必須の応答、およびオプションの応答の概念を理解します。

  • クライアントBPELサービスは、単一の要求をサービスBPELプロセスに送信し、1つまたは2つの応答を受信します。

  • ここでのリクエストは、オンラインで商品を注文することです。製品が遅れた場合、サービスは顧客に知らせるメッセージを送信します。いずれの場合も、サービスは商品の発送時に常に通知を送信します。

  • クライアントBPELサービスには、要求を送信するためのinvokeアクティビティと、必須の応答を受け入れるためのreceiveアクティビティを含むスコープアクティビティが必要です。オプションのメッセージの場合、onMessageスコープアクティビティのハンドラは、オプションのメッセージを受信した場合の対処方法(たとえば、製品が遅延したことを通知する)とともに設定されます。クライアントBPELプロセスは、必須の応答を受信するのを待ちます。必須の応答が最初に受信された場合、BPELプロセスはオプションの応答を待たずに続行します。

  • サービスBPELプロセスには、必須の出荷メッセージを送信するための受信アクティビティと呼び出しアクティビティを含むスコープアクティビティ、およびスコープの onAlarm タイマーが期限切れになった場合にオプションの遅延メッセージを送信するハンドラー(たとえば、アイテムが24時間以内に出荷されない場合は遅延メッセージを送信します)。

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

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

  • クライアントBPELプロセスは、サービスBPELプロセスに要求を送信し、即時応答を受信しますが、処理はサービス側で続行されます。

  • このパターンには、複数のショットコールバックと、それに続く長期的な処理を含めることもできます。

  • たとえば、クライアントが休暇パッケージの購入要求を送信し、サービスが購入を確認する即時応答を送信してから、ホテル、フライト、レンタカーなどの予約を続行します。

  • クライアントBPELプロセスには、非同期トランザクションの場合、要求ごとに呼び出しアクティビティと応答ごとに受信アクティビティが必要です。または、同期トランザクションごとに呼び出しアクティビティだけが必要です。

  • サービスBPELプロセスには、クライアントからの要求ごとに受信アクティビティが必要であり、応答ごとに呼び出しアクティビティが必要です。応答が終了すると、サービスとしてのサービスBPELプロセスは、トランザクションで収集された情報を使用して、クライアントからの入力なしで必要なタスクを実行し、処理を続行できます。

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

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

  • トランザクションに3つ以上のアプリケーションが関係している場合。

  • このA-to-B-to-C-to-Aトランザクションパターンは、同時に多くのトランザクションを処理できます。したがって、どのメッセージがどこに送信されるかを追跡するためのメカニズムが必要です。

  • これは、WS-Addressingまたは相関セットを使用して処理できます。

前の章の1つで、同期Webサービスは呼び出しに即座に応答するサービスの1つであると説明しました。

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

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

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

次に、invokeアクティビティは、応答を同時に送信し、受信アクティビティでキャプチャされるHelloWorldアプリケーションを呼び出します。

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

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

receiveInput → inputVariable
callbackClient → outputVariable

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

フローアクティビティとは何ですか?

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

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

フローアクティビティでは、BPELコードが並列ブランチの数を決定します。ただし、多くの場合、必要なブランチの数は、入手可能な情報によって異なります。

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

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

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

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

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

アクティビティの切り替え

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

活動中

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

障害処理の使用方法を理解するには、Oracle SOASuiteのServiceCompositeの基本アーキテクチャを学習する必要があります。

  • Service components− BPELプロセス、ビジネスルール、ヒューマンタスク、メディエーター。これらは、SOA複合アプリケーションを構築するために使用されます。

  • Binding components −SOAコンポジットと外部世界の間の接続を確立します。

  • Services −SOA複合アプリケーションへのエントリポイントを提供します。

  • Binding − SOAP / HTTP、JCAアダプターなどのサービスと通信するプロトコルを定義します。

  • WSDL −Webサービスのサービス定義を定義します。

  • References −SOA複合アプリケーションが外部サービスにメッセージを送信できるようにします

  • Wires −サービスコンポーネント間の接続を有効にします。

障害の種類

ここで、さまざまなタイプの障害を見てみましょう。

ビジネス上の欠点

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

ランタイム障害

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

http://schemas.oracle.com/bpel/extensionnamespace

障害処理の方法

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

スローアクティビティ

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

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

  • 上記のアプローチの代わりに、作成されたスコープの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 policies will only be executed when an invoke activity fails.

この章では、障害が発生したプロセスの再送信に関連するさまざまなシナリオについて説明します。

シナリオA

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

シナリオB

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

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

  • シンプルオブジェクトアクセスプロトコル(SOAP)サービスとしてラップ

  • bpelx −execタグを使用してJavaコードスニペットをBPELプロセスに埋め込みます

  • XMLファサードを使用してDOM操作を簡素化する

  • bpelx −exec組み込みメソッドを使用する

  • サービスインターフェイスにラップされたJavaコードを使用する

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

Java埋め込みとは、あまり分離されていない方法で、内部に隠された機能を意味します。Javaコードは保守が困難です。JavaをBPEL(XML駆動型)に組み込むことにより、さまざまなスキルと、Javaオブジェクトのマーシャリングおよびアンマーシャリングに高価なXMLを必要とするテクノロジーの混合を開始します。

Java埋め込みの最良の使用例は、高度なロギング/トレースまたは特別な検証/変換の場合のようです。ただし、BPELエンジンの組み込み機能、およびSOA Suite11gの他のコンポーネントとそれに付属するアダプターを置き換えることはできません。

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()

これにより、XSLT変換が実行されます。

ストリング ()

これは、/ text()を使用するのではなく、要素からテキストコンテンツを抽出するために使用できます。

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>

Note −XMLドキュメントの変換にいくつかのXSLT関数が使用されました。

BPEL相関は、インバウンドメッセージを特定のプロセスインスタンスと照合します。特定のデータをビジネスプロセスの特定のインスタンスに関連付ける必要がある場合は、相関関係を使用します。

たとえば、アカウント番号を確認し、アカウントの与信限度額を確認するプロセスを作成しているときです。検証されると、プロセスは別のシステムを呼び出して在庫を確認し、アイテムが在庫にある場合は発注書を生成します。注文書は、どのアカウントから引き落とされるかをどのように知るのですか?この質問に対する答えは相関関係です。

相関セット

相関セットは、プロセスインスタンスを一意に識別するために使用されます。各相関セットに一意の名前を付けてから、1つ以上のプロパティで定義します。各プロパティには、名前とタイプ(たとえば、文字列または整数)があります。

プロパティエイリアス

相関セット内の各プロパティのプロパティエイリアスを定義する必要があります。プロパティエイリアスは、プロパティを入力値または出力値にバインドするマッピングです。

重要なポイント

に関連する次の重要な点を考慮してください Correlation Sets and Message Aggregation

  • 複数の受信または選択アクティビティを含むプロセスには、相関セットが必要です。

  • 相関セットは、プロセスのインバウンドまたはアウトバウンドメッセージからの値で初期化されます。

  • 1つの特定のプロセスに関連付けられているメッセージのグループがある場合は、処理する1つ以上の相関セットを設定できます。

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

イベント

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

メッセージイベント

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

アラームイベント

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

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

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

    • コールバックが受信されない場合、プロセスフローは設計どおりに続行されます。

    • 疎結合のサービス指向アーキテクチャーで役立ちます。このアーキテクチャーでは、Webサービスが常に利用可能であるとは限りません。

アクティビティを選択

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

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

  • onAlarm −この条件には、1分のタイムアウトのコードがあります。

アクティビティを待つ

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

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

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

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

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

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

  • サービスコンポーネント(公開サービス)

  • 参照コンポーネント(外部参照)

  • ビジネスイベントをサブスクライブしたメディエーターまたはBPELコンポーネント(イベントの公開にはセンサーを含めることはできません)

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

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

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

EnterpriseManagerのセンサー

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

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

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

2.0では、1.1のアクティビティに代わる新しいアクティビティが追加されました。

<forEach>

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

<repeatUntil>

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

<if>-<elseif>-<else>

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

<compensateScope>

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

<再スロー>

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