一方向起動の実行の概要
次の例に示すように、一方向起動(および可能性のあるコールバック)は、一般的にWSDLファイルで公開されます。
<wsdl:operation name="process"> <wsdl:input message="client:OrderProcessorRequestMessage"/> </wsdl:operation>
これにより、BPELプロセス・サービス・エンジンでは実行が2つの部分に分割されます。
-
第1の部分(常にコール元トランザクション内)では、デハイドレーション・ストアの
dlv_message
表への挿入が行われます(リリース10.1.3.xでは、inv_message
表に挿入されていました)。 -
第2の部分では、トランザクションおよび新規スレッドで作業アイテムが実行され、新規インスタンスが作成されます。
スレッドが使用可能な場合はサービス・エンジンのスレッド・プール(インボーカ・スレッド)で実行されるため、スケーラビリティの点で様々なメリットがあります。一方で、即時に実行される保証がないというデメリットがあります。
一方向の操作に基づく同期タイプのコールが必要な場合は、onewayDeliveryPolicy
プロパティを使用できます。これは、リリース10.1.3.xのdeliveryPersistPolicy
プロパティと同じです。
bpel.config.oneWayDeliveryPolicy
を次のように指定します。
-
新規BPELプロセスのための「BPELプロセスの作成」ダイアログ内。
-
既存のBPELプロセスの
composite.xml
ファイルのBPELプロセス・サービス・コンポーネント・セクション内。
この値がcomposite.xml
に設定されていない場合は、Oracle Enterprise Manager Fusion Middleware ControlのシステムMBeanブラウザのoneWayDeliveryPolicy
の値が使用されます。使用可能な値は、次のとおりです。
-
async.persist
: メッセージはデータベースに保存されます。この設定の場合、信頼性は確保されますが、データベースのパフォーマンスに多少の影響が出ます。システムの全体的なパフォーマンスに影響が出ることもあります。 -
async.cache
: 受信した配信メッセージはインメモリー・キャッシュにのみ保存されます。信頼性よりパフォーマンスを優先する場合は、この設定を検討してください。async.cache
に設定すると、一方向メッセージの到着頻度が配信の頻度よりかなり高い場合や、サーバー障害が発生した場合には、メッセージが失われる可能性があります。また、システムが過負荷の状態になり(メッセージがスケジュール済キューにたまり)、メモリー不足エラーが発生することもあります。各自のユースケース・シナリオを検討し、この設定が適切かどうかを判断してください。高可用性環境で
oneWayDeliveryPolicy
をasync.cache
に設定すると、サーバー・クラッシュ発生時に実行途中の起動メッセージおよびコールバック・メッセージが失われたり、重複したりすることがあります。async.cache
に対しては、サーバーのフェイルオーバーはサポートされていません。 -
sync
: 同じスレッドで直接起動が発生します。呼出しキューのメッセージのスケジューリングはバイパスされ、BPELインスタンスが同期的に呼び出されます。この設定は、データベースのパフォーマンスに影響を与えることがあります。
bpel.config.oneWayDeliveryPolicy
プロパティの設定方法の詳細は、「BPELプロセス・サービス・コンポーネントの追加方法」および「プロパティ・インスペクタでデプロイメント・ディスクリプタのプロパティを定義する方法」を参照してください。
表13-4は、メイン・プロセスがサブプロセスを非同期でコールする場合の動作を示しています。表13-4は、「bpel.config.transactionがrequiresNewに設定されているBPELCalleeプロセスがBPELCallerプロセスによってコールされる」および「bpel.config.transactionがrequiredに設定されているBPELCalleeプロセスがBPELCallerプロセスによってコールされる」に記載されているユースケースに基づいています。
表13-4 メイン・プロセスによる非同期でのサブプロセスのコール
条件 | サブプロセスがフォルトをスローした場合 | サブプロセスがbpelx:rollbackをスローした場合 |
---|---|---|
(BPELCalleeプロセスが別のスレッド/別のトランザクションで実行) |
メッセージは配信サービスに保存されるため、BPELCallerはレスポンスを取得しません。フォルトが処理されない場合は、BPELCalleeトランザクションがロールバックされます。 |
メッセージは配信サービスに保存されるため、BPELCallerはレスポンスを取得しません。フォルトが処理されない場合は、BPELCalleeインスタンスがロールバックされます。 |
and
(BPELCalleeが同じスレッド/別のトランザクションで実行) |
BPELCallerは |
BPELCallerは |
and
(BPELCalleeが同じスレッド/同じトランザクションで実行) |
BPELCalleeがフォルト状態になります。BPELCallerは |
トランザクション全体がロールバックされます。 |
and
または
|
リクエストが処理される前にコール元のスレッドが戻されるため、BPELCallerはレスポンスを取得しません。フォルトが処理されない場合は、BPELCalleeトランザクションがロールバックされます。メッセージは、データベースに保存されていないため、失われます。 |
リクエストが処理される前にコール元のスレッドが戻されるため、BPELCallerはレスポンスを取得しません。フォルトが処理されない場合は、BPELCalleeトランザクションがロールバックされます。メッセージは、データベースに保存されていないため、失われます。 |