WLI アプリケーション ライフ サイクルのベスト プラクティス

     前  次    新しいウィンドウで目次を開く     
ここから内容

WLI アプリケーションの構成および開発

WLI アプリケーションの構成および開発にはいくつかのベスト プラクティスがあります。これらについては、以下の節で説明します。

この節の詳細については、『ビジネス プロセス構築ガイド』および『Integration コントロールを使用する』を参照してください。

WLI アプリケーションのアーティファクトおよび変数の命名規約

WLI アプリケーションを開発するときには、JPD、タスク プラン、コントロール、プロジェクト、ファイルなど、さまざまな WLI アーティファクトで、統一された一貫性のある命名規約に従う必要があります。すべてのコントロール、プロセス、メソッド、変数、およびその他の WLI オブジェクト名は、オブジェクト指向や Java の標準の命名規約に従う必要があります。

WLI では、JPD、コントロール、およびデータ トランスフォーメーション ファイルで共通の .java 拡張子を使用しています。簡単に識別できるように、各アーティファクトにサフィックスを追加する必要があります。表 4-1 は、コントロールの命名の例、各アーティファクトに関連するサフィックス、場所を示しています。

表 4-1 コントロール/アーティファクトの命名の例
アーティファクトのタイプ
サフィックス
フォルダ/パッケージ
JPD プロジェクト
EAR、JPD
<Name>earjpd
 
 
Web、JPD
<Name>webjpd
 
 
Util、JPD
<Name>utiljpd
 
タスク プラン プロジェクト
EAR、JPD
<Name>eartp
EarContent/<フォルダ>
 
Web、JPD
<Name>webtp
 
 
Util、JPD
<Name>utiltp
 
JPD
process
<name>process.java
src/processes パッケージ
データ トランスフォーメーション
DTF
<name>dtf.java
src/processes パッケージ
カスタム コントロール
なし
なし
 
データベース コントロール
DBC
<name>DBC.java
src/controls パッケージ
Web サービス
WSC
<name>WSC.java
src/processes パッケージ
EJB コントロール
EJBC
<name>EJBC.java
src/controls パッケージ
JMS
JMSC
<name>JMSC.java
 
電子メール
EmailC
<name>EmailC.java
 
ファイル
FileC
<name>FileC.java
 
HTTP
HTTPC
<name>HTTPC.java
 
MQ Series コントロール
MQC
<name>MQC.java
src/controls パッケージ
プロセス コントロール
PControl
<name>PControl.java
src/controls パッケージ
タスク コントロール
TASKC
<name>TASKC.java
src/controls パッケージ
チャネル/メッセージ ブローカ
Channel
<name>Channel.java
src/processes パッケージ
イベント ジェネレータ
EG
<name>EG
 
XML スキーマ
XSD
<name>.xsd
src/schemas パッケージ
WSDL
WSDL
<name>.wsdl
src/schemas パッケージ
XQ
XQ
<name>.xq
src パッケージ

モジュール形式の JPD 設計

大きなプロセスを定義する必要がある場合は、常にモジュール形式にすることをお勧めします。モジュール型式の JPD は特定のビジネスの目的に対応します。モジュール型式の JPD には、次のような例があります。

大きな JPD を複数の小さな JPD またはサブプロセスに分割できます。サブプロセスは、中央の (主要な) JPD を使用して呼び出すことができます。JPD とサブプロセス (別の JPD) の間の通信には、プロセス コントロールを使用できます。メッセージ ブローカやパブリッシュおよびサブスクライブ アーキテクチャを使用して、2 つの JPD を緩やかに結合することも可能です。詳細については、「JPD 間の通信」および「JPD の主な実装パターン」を参照してください。

モジュール形式の XML ドキュメント

どの JPD にも開始ノードがあり、XML ドキュメントを使用して開始します。パフォーマンスを向上させるには、この XML ドキュメントをモジュール形式で小さいものにします。ドキュメントのタイプごとに別々の XSD を用意することをお勧めします。たとえば、発注書と請求書の両方で 1 つの大きなスキーマを使用する代わりに、別々の XSD を用意します。

JPD とそれに関連付けられたドキュメントのモジュール性は、相対的な概念です。JPD をモジュール化しすぎると、生産性が低下する可能性もあります。モジュール形式については、特定のシナリオに応じて、バランスの取れた判断をする必要があります。

パラレル ノード

JPD にはパラレル ノードがあります。このノードを使用する前に、その機能について理解しておくことをお勧めします。パラレル ノードは、関連しているが依存関係はない複数のタスクを管理する際に使用します。パラレル ノードはビジネス レベルの並列処理に向いています。実際の実行は並行して行われるわけではありません。

ブランチの実行は、他のブランチで実行がなくても、いつでも開始することができます。たとえば、あるタスクを実行するブランチがパートナからの見積りを要求し、応答を待機する場合があります。このブランチが応答を待機している間に、別のブランチで実行が開始された場合は、ビジネス レベルでの並列処理が実現します。

パラレル ノードには、AND と OR の 2 つの形式があります。AND モードでは、すべての並列パスが実行を完了しないと、ビジネス プロセスは先に進むことができません。OR モードでは、最初に実行が完了したパスが優先されます。他のパスの処理は停止されて、ビジネス プロセスは先に進みます。

パラレル ノードのブランチはトランザクションによって分離されます (デフォルトの動作)。パラレル ノードのパフォーマンスを向上させるために、この動作をオーバーライドすることができます。各パラレル要素のソースで continueTransaction プロパティを true に設定します。

<parallel continueTransaction="true">

JPD の例外

JPD では、ノード、グループ、またはプロセス レベルで、例外および例外ハンドラを定義できます。例外ハンドラは次の順序で実行されます。

  1. ノード
  2. グループ
  3. プロセス

プロセス レベルでは、catch all プロセス レベル例外ハンドラを使用することをお勧めします。

処理されない例外はプロセス障害を引き起こす可能性があります。freezeOnfailure プロパティを設定すると、このシナリオを回避できます。このプロパティを設定した場合、処理されない例外があるとプロセスはフリーズします。プロセスは最後にコミットされた個所までロールバックされて、管理者は最後にコミットされた状態からプロセスを再開できます。

表 4-2 は、JPD 例外を扱う場合に参照できる、高度な設計ガイドラインのリストです。

表 4-2 高度な設計ガイドライン
高度な設計ガイドライン
説明
非同期双方向プロセスでは、例外ハンドラで別のクライアント応答またはパブリッシュ ノードを使って、例外またはエラーを呼び出し側プロセスに返す方法を確立する必要がある。
エラーまたは例外が発生した場合、プロセス内で例外を捕捉できる。ただし、非同期プロセスは本来、例外にすぐに応答することはできない。しかし、呼び出し側プロセスには、正常に完了しなかったことを知らせる必要がある。コールバック プロセスに成功または失敗のパスを用意し、両方の場合の結果を呼び出し側に通知する必要がある。
すべての同期ステートレス プロセスは、呼び出し側に例外を送出する必要がある。
呼び出し側がブロックしている場合、呼び出し側は次に行うべき処理を知っている唯一のコンポーネントであるため、障害について通知する必要がある。
プロセス設計者は、プロセス定義の最初に、プロセスレベルの例外ハンドラを定義しなければならない。このハンドラはグローバルな例外ハンドラとして機能し、未定義の例外をすべて捕捉する。
これが catch-all プロセス レベル例外ハンドラである。処理されない例外はプロセスの失敗を引き起こすが、この状態からの回復は不可能である。グローバル例外ハンドラを定義すれば、プロセスが中止状態になることはない。
freezeOnfailure プロパティを true に設定する。
プロセスで freezeOnfailure プロパティを設定した場合、プロセスは最後のコミット状態までロールバックされ、保持される。管理者は問題を修正して、プロセスを再びアクティブにすることができる。
プロセスがプロセス コントロールを通じてサブ プロセスを同期的に呼び出す場合、プロセス設計者は例外処理に特に注意する必要がある。
呼び出されたサブ プロセスで処理されない例外があると、トランザクションがロールバックされる可能性がある。この場合、サブ プロセスと呼び出し側プロセスの両方がロールバックされる。サブ プロセス内で適切な例外ハンドラを定義すると、呼び出し側プロセスのロールバックを回避できる。

プロセス イベントのイベント ハンドラ

ビジネス プロセスのイベント選択ノード グループは、ビジネス プロセスが 1 つまたは複数のイベントの受信を待機するポイントを表します。イベント選択ノード グループの各ブランチの最初のノードでは、イベントの受信を処理します。着信イベント処理するために、イベント選択ノード グループの中に他のノードを設計できます。各ブランチはイベントまたはメッセージのイベント ハンドラとして機能します。

イベント選択ノードは、複数のイベントの受信を待機するビジネス プロセス上のポイントに作成する必要があります。イベント選択ノードを使用してビジネス プロセスを開始する場合は、クライアント要求ノード、戻り値のあるクライアント要求ノード、およびサブスクリプション ノードを含めることができます。ビジネス プロセスの開始ノード以外の場所にあるイベント選択ノードには、クライアント要求ノードとコントロール受信ノードを含めることができます。イベント選択ノードにタイマー ブランチを追加して、指定したタイムアウトの後にそのブランチを開始することもできます。

次のようなイベントがあります。

OnMessage および OnTimeout イベント ハンドラによって、外部イベントによるプロセスの中断が発生します。外部イベントは OnMessage および OnTimeout イベント ハンドラを使用してプロセスを中断します。OnMessage イベント ハンドラはクライアント要求を受信できます。

図 4-1 は、OnMessage および OnTimeout イベント ハンドラの使用例を示しています。

図 4-1 OnMessage および OnTimeout イベント ハンドラの例

OnMessage および OnTimeout イベント ハンドラの例

JPD のトランザクションと補正の管理

以下の節では、さまざまな JPD トランザクションと補正の管理のベスト プラクティスについて説明します。

トランザクション境界

WLI のプロセスは、本質的にトランザクション対応です。プロセスのすべての手順は JTA (Java Transaction API) トランザクションのコンテキスト内で実行されます。プロセスを作成するときに、コントロール受信やクライアント送信などのブロック要素の場所に基づいて、暗黙的なトランザクション境界が形成されます。プロセス ノードを追加するにつれて、プロセス内のトランザクション境界は変わり続けます。

明示的なトランザクション境界を作成することもできます。それには、連続するノードを選択して別のトランザクション内で宣言することで、それらのノードとアプリケーションによって作成される暗黙的なノードとを区別します。リソースの性質やアクセスを提供するコントロールによっては、プロセスによってアクセスされるリソースもトランザクションに含めることができます。

同期プロセスと非同期プロセスのトランザクション

ステートレス プロセスはクライアント トランザクション内で、またはトランザクションの開始時に実行されます。JPD プロキシを使用して、Java クライアントは RMI を介して JPD を呼び出すことができます。このシナリオでは、クライアント トランザクションが JPD に伝播されます。JPD が Web サービスとして呼び出される場合、呼び出し側のトランザクションは伝播されません。非同期プロセスの場合にも、呼び出し側のトランザクションは JPD に伝播されません。

トランザクションとコントロール

トランザクション コントロールは次の 3 種類です。

トランザクション対応、XA 準拠

プロセスで使用されているすべてのコントロールがトランザクション対応で XA 準拠である場合は、そのプロセスのトランザクションを使用して、基底のトランザクション ブランチをコミットまたは終了することができます。問題を捕捉して必要なトランザクションの決定を行うために、プロセスには例外ハンドラが必要です。中止またはロールバックが起きるとコントロールは開始点に戻りますが、この開始点は例外が発生したプロセスの内部にはない可能性もあるため、開発者はトランザクションが開始された場所を把握する必要があります。

トランザクション対応、非 XA 準拠のコントロール

XA は分散トランザクションを管理するためのプロトコルです。WLI では XA を拡張して非 XA リソースが分散トランザクションに参加できるようにしていますが、1 つのトランザクションの中で非 XA 準拠のトランザクション リソースは 1 つのみという制限があります。そのため、1 つのプロセスで複数のトランザクション対応、非 XA リソースにアクセスする必要がある場合は、これらのリソースへのアクセスを別の JPD サブプロセスでカプセル化して、元のプロセスから非同期で呼び出す必要があります。同期的に呼び出されるサブプロセスは呼び出し側のプロセスと同じトランザクション内で実行されるため、非同期の呼び出しが必要になります。詳細については、『Integration コントロールを使用する』を参照してください。

トランザクション非対応のコントロール

電子メール コントロールのようなトランザクション非対応のコントロールでは、トランザクションをサポートしません。トランザクション非対応のコントロールの場合は、例外処理についての方策を取る必要があります。コントロールがトランザクション対応である場合は、自動ロールバックを使用します。これに対し、トランザクション非対応のコントロールの場合は捕捉された例外を使用して、ビジネス上の問題に基づいてエラーを処理します。

原子性、一貫性、独立性、持続性 (ACID) および XA トランザクションのサポートに加えて、JPD では補正もサポートしています。補正を提供するトランザクション ブロックは rollback only とマークされないようにする必要があります。そのトランザクション ブロック用の例外ハンドラを定義して、execute on rollback 例外ハンドラ プロパティを有効にします。このような場合に、トランザクションが失敗すると、例外ハンドラ パスが最初に実行されます。このパスでは取り消しや補正のロジックを定義できます。図 4-2 は、トランザクション非対応コントロールの例を示しています。

図 4-2 トランザクション非対応コントロール

トランザクション非対応コントロール

表 4-3 は、JPD のトランザクションの特性を決定するための高度なガイドラインのリストです。

表 4-3 JPD のトランザクションの特性に関する高度な設計ガイドライン
高度な設計ガイドライン
説明
トランザクションの補正の自動実行を、細心の注意を払って実装する。
設計レベルでは、この逆を実装するのは非常に簡単なように見える。問題が生じるのは補足が失敗した場合であり、障害からの回復が問題となる。こうした状況の解決策は不明確な場合が多い。デフォルトの設計ルールは、警告を発生させて、解決策について手動で判断する方法である。
問題を捕捉して必要なトランザクションの決定を行うために、プロセスに例外ハンドラを配置する必要がある。
デフォルトのままにはせず、常に、例外を特定して解決策を決定する必要がある。これはトランザクション対応リソースにもトランザクション非対応リソースにも当てはまる。
1 つのプロセスで複数のトランザクション対応、非 XA リソースにアクセスする必要がある場合は、これらのリソースへのアクセスを別の JPD サブプロセスでカプセル化する必要がある。
元のプロセスからサブプロセスを非同期で呼び出す。このようにすると、サブプロセスは別のトランザクションで実行されるため、トランザクション非対応のリソースにアクセスできる。

JPD の状態管理

ステートレス JPD は、メモリ内のみで実行されるプロセスです。状態は保持されません。すべてのステートレス プロセスはステートレス セッション Bean にコンパイルされます。ステートレス プロセスの目的は、短期間のロジックが含まれる、パフォーマンスの要件が高いビジネスのシナリオに対応することです。

JPD は状態をデータベースに永続化しないため、低レイテンシ、高パフォーマンスで実行するために最適化されます。

表 4-4 は、ステートレス プロセスを扱う場合に参照できる、高度なガイドラインのリストです。

表 4-4 ステートレス プロセスの高度なガイドライン
高度な設計ガイドライン
説明
変数が static または final と宣言されていない限り、グローバル変数のデフォルト値は使用しない。グローバル変数はすべて、使用する前に初期化する。
ステートレス プロセスはステートレス セッション Bean として実装される。プロセスが完了した後、後続のプロセス インスタンスは同じステートレス セッション Bean インスタンスを再利用する。つまり、グローバル変数の最後の既知の値を継承する。
同期的に呼び出されるプロセスに対して、on sync failure プロパティを re-throw に設定する。同期的に呼び出されるプロセスでは、要求側がトランザクションの境界設定を処理する必要がある。
このプロパティはプロセスが同期サブプロセスとしてコンフィグレーションされている場合にのみ適用され、他のビジネス プロセスの場合は無視される。同期サブプロセスが失敗すると、デフォルトの動作ではプロセスは rollback としてマークされる。これにより、サブプロセスと親プロセスの両方がロールバックされる。ただし、on sync failure プロパティが re-throw に設定されている場合は、サブプロセスのみがロールバックされる。

ステートフル プロセスは、複数のトランザクションのスコープ内で実行されるプロセスです。プロセスは状態をデータベースに保持します。サービスがクラッシュした場合でも、JPD の状態は保持されます。ステートフル JPD プロセスはエンティティ Bean にコンパイルされます。ステートフル プロセスの目的は、複雑な長期間のロジックが含まれるビジネスのシナリオに対応することです。

一般に、ステートフル プロセスはステートレス プロセスより速度が低下します。特に状態を保持する必要がないシナリオでは、ステートレス プロセスを使用してください。状況によっては、ステートフル プロセスを複数のステートレス プロセスに分割できます。図 4-3 は、ステートフル プロセスをステートレス プロセスに分割する方法を示しています。

図 4-3 ステートフル プロセスのステートレス プロセスへの分割

ステートフル プロセスのステートレス プロセスへの分割

JPD のバージョニング

WLI には、現在実行中のプロセスのインスタンスを中断することなく、ビジネス プロセスを変更できるバージョン機能があります。ビジネス プロセスのバージョンを作成する場合、実際には、親ビジネス プロセスと同じパブリック インタフェースを共有する、ビジネス プロセスの子バージョンを作成しています。実行時にアクティブとしてマークされるプロセスのバージョンは、外部クライアントがパブリック URI を使用してアクセスするプロセスです。通常の開発サイクルを通じて、新しいバージョンのアプリケーションと一緒に新しいプロセス バージョンがデプロイされます。

JPD の新しいバージョンがデプロイされるとき、既存のインスタンスは開始時と同じ JPD のバージョンで完了まで実行されます。ビジネス プロセスはバージョニングできますが、そのプロセスに関連付けられた個別のコントロールや、ビジネス プロセス関連のその他のコンポーネント (スキーマやトランスフォーメーションなど) はバージョニングできません。ビジネス プロセスをバージョニングする場合は、そのプロセスのサブプロセスもバージョニングする必要があります。サブプロセスには、親プロセスと一緒に自動的にバージョンが割り当てられないためです。

表 4-5 は、JPD のバージョンを設定する場合に参照できる、高度なガイドラインのリストです。

表 4-5 JPD をバージョニングするための高度なガイドライン
高度な設計ガイドライン
説明
ビジネス プロセスの新しいバージョンをデプロイする必要がある場合は、新しいバージョンをデプロイする前に既存のプロセスにバージョンを設定する必要がある。
そのプロセスに従わない場合は、新しいバージョニングされたプロセスをデプロイする前に、バージョン管理されていないインスタンスを完了まで実行させる必要がある。
ビジネス プロセスの親子関係に従って、プロセス バージョンの方式を設定する。
これは、さまざまなバージョンの親プロセスが存在するときにサブプロセスを呼び出す方法を規定する。[strategy] ドロップダウン メニューから、次のようにする。
  • サブプロセスの呼び出し時にサブプロセスのバージョンを設定する場合は、[loosely-coupled] を選択する。
  • 親プロセスの呼び出し時にサブプロセスのバージョンを設定する場合は、[tightly-coupled] を選択する。

シングルトン JPD

JPD は静的と動的の 2 通りの方法でメッセージ ブローカ チャネルをサブスクライブできます。

プロセスが開始ノードでチャネルをサブスクライブする場合は、「静的サブスクリプション」と呼ばれます。サブスクリプションはアプリケーションのコンパイル時に認識され、アプリケーションの生存期間を通じて保持されます。

プロセスがメッセージ ブローカ コントロールを使用してフロー内でメッセージ ブローカ チャネルをサブスクライブする場合は、「動的サブスクリプション」と呼ばれます。サブスクリプションは実行時に開始されて終了します。ビジネス プロセスのサブスクリプションに対して suppressible 属性を設定すると、メッセージ ブローカ チャネルの静的サブスクリプションを抑制可能 (suppressible) に指定することができます。suppressible 属性に指定できる値は true および false です (デフォルト値は false)。

シングルトン JPD では、実行中の JPD インスタンスは常に 1 つのみです。前のインスタンスが完了した後にのみ、シングルトン JPD を再実行可能です。シングルトン JPD のインスタンスの実行中に受信されたキュー内のメッセージは拒否されます。

シングルトン JPD を作成するには、最初に JPD に静的サブスクリプションを設定し、suppressible 属性を True に設定します。この場合、チャネル上の最初のメッセージによって JPD が呼び出され、JPD のインスタンスが作成されます。それ以降に静的チャネルにメッセージが届いても、新しい JPD インスタンスは作成されません。このように作成されたシングルトン JPD では、動的サブスクリプションを使用してメッセージを受信し続けることができます。

動的サブスクリプションでの競合状態

動的サブスクリプションでメッセージ ブローカを使用する場合、競合状態が発生する可能性があります。サブスクリプションが完了する前にメッセージが送信されると、そのメッセージは失われます。プロセスが応答を無期限に待機し始めて、デッドレター チャネルにメッセージが届くとき、この問題が明らかになります。

要求メッセージがトランザクション非対応である場合 (たとえば、Web サービス呼び出しの場合など)、メッセージはただちに送信されますが、これに対して、応答のサブスクリプションはトランザクションがコミットされた場合にのみ発生します。プロセス フロー内で、メッセージ送信よりも前にサブスクリプションが置かれている場合、サブスクリプションは後で行われる可能性があります。この場合は、サブスクリプション ノードの後、メッセージ送信の前に、トランザクションがコミットされるようにします (たとえば、空の明示的なトランザクションを追加します)。

デッド レター チャネルのサブスクリプション

フィルタ処理プロセスが完了した後で、サブスクライバを持たないチャネルにメッセージが送信された場合、そのメッセージはデッド レター チャネルに送信されます。通常、これは期待されない動作であるため、メッセージがパブリッシュされているかどうかをチェックするには、デッド レター チャネルをサブスクライブします。

サービス品質の高い JPD

at-least-once または once-only サービス品質を実装するには、特別な手順を行う必要があります。これらの手順を行わない場合、デフォルトは at-least-once サービス品質になります。さまざまなプロセス タイプの手順は次のとおりです。

注意 : すべてのコンピュータ プログラムの正常な完了を保証することはできませんが、サービスの品質が高ければ、エラーは常に回復可能となります。

JPD の SLA しきい値

サービス レベル アグリーメント (SLA) では、JPD のパフォーマンスの目標を指定します。JPD が指定された時間内に実行されることを表明する、内部または外部の取り決めです。プロセスの SLA を達成できるように、Oracle WebLogic Integration Administration Console では以下のしきい値を設定できます (図 4-4)。

これらのしきい値に関連するプロセスのステータスは、プロセス インスタンスごとに以下の方法で追跡します。

プロセス インスタンスの経過時間が警告しきい値に達すると、WLI Administration Console の [プロセス インスタンス概要] ページおよび [プロセス インスタンス詳細] ページに警告が表示されます。SLA しきい値に達するまでの残り時間も表示されます。経過時間が SLA を超えると、WLI Administration Console に赤いフラグが表示されます。SLA しきい値を超過した制限時間も表示されます。ただし、SLA のしきい値の超過については、WLI Administration Console に表示される警告以外には、イベントは発生せず、個別の通知も受け取りません。

SLA しきい値を設定すると、目標の時間内に実行されないプロセスを簡単に特定できます。これにより、サプライヤと顧客の間の取り決めに対応したり、独自のパフォーマンス目標を達成したりするために、変更を加えることができます。

JPD のモニタ

さまざまなレベルでプロセスを追跡できます。システムにはデフォルトのトラッキング レベルがあり、各プロセスでデフォルトをオーバーライドできます。WLI Administration Console と基底の MBean では、実行中のインスタンスやその変数値に対するモニタ用インタフェースを提供しています。変数値を変更することはできませんが、インスタンス ID またはプロセス ラベルを使用して、プロセスを問い合わせることができます。JPD コンテキストの setProcessLabel を呼び出すと、インスタンスにプロセス ラベルを設定できます。表 4-6 は、JPD をモニタするための高度な設計ガイドラインのリストです。

表 4-6 JPD のモニタに関する高度な設計ガイドライン
高度な設計ガイドライン
説明
トラッキング データは運用をサポートする目的にのみ使用し、ビジネスまたは監査のロギングには使用しない。
トラッキング データを定期的にパージする必要がある。WLI Administration Console を使用して、実行時に、プロセスごとに動的にトラッキングをオンまたはオフに設定できる。
高いパフォーマンスが必要なプロセスについては、プロセスのトラッキングを無効にする。
プロセス トラッキングには、データベースに何度も書き込まれる情報が含まれている。パフォーマンス上の理由から、トラッキングを除外する必要がある。
WLI システム データはサポートのためにのみ使用し、ビジネス レベルの監査には使用しない。
WLI システム データをビジネス レベルの監査に使用するべきではない。監査またはロギングのフレームワークを設計する場合は、WLI システム データ収集領域の外側に実装する必要がある。
すべての InstanceID をログに記録する。
エラー、ログ、監査のすべてのメッセージで InstanceID を記録する必要がある。
WLI データの定期的なアーカイブ化をスケジューリングする。
アーカイバはデータベースに対する選択クエリを実行するプロセスであるため、少量のデータに対して定期的に実行するようにスケジューリングする必要がある。プロセスのアーカイブ化のスケジュールはピーク時は避けるようにする。
プロセス ラベルには関連するクエリ値を設定する。
プロセス ラベルは、値を実装する人が自由に決めるのではなく、値を設計する際に推奨されるクエリ文字列となる。たとえば、プロセス ラベルに注文番号が示されていたら、サポート担当者が見つけやすくなる。

JPD のセキュリティ ポリシー

JPD のセキュリティ ポリシーを定義できます。セキュリティ ポリシーは、JPD が外部システムやバックエンド システムにアクセスするために使用する識別子を制御します。管理者は、JPD が外部システムに、呼び出し側アプリケーションとしてアクセスするか、プロセスを後から呼び出すアプリケーションとしてアクセスするかをコンフィグレーションできます。たとえば、プロセスがチャネルをサブスクライブしてクライアント要求を待機する場合、管理者は実行ポリシーを設定して、バックエンド リソースにアクセスするときにクライアント要求からの識別子を使用できます。

JPD セキュリティ ポリシーには 4 つの主要なコンポーネントがあります。

相互運用可能な JPD

JPD を Java Web サービス (JWS) としてエクスポーズできます。相互運用可能な JPD の開発には、以下のような制限事項があります。

図 4-5 では、相互運用性の制限事項に留意した推奨アーキテクチャを示しています。

図 4-5 SC を持つフロントエンド JWS と JWS およびプロセス コントロールを持つ JPD

SC を持つフロントエンド JWS と JWS およびプロセス コントロールを持つ JPD

次の手順に従うと、ビジネス プロセスを Web サービス (JWS) としてエクスポーズできます。

  1. ビジネス プロセス (JPD) を選択します。JPD を右クリックします。[生成|プロセス コントロール] を選択します。
  2. プロセス コントロールを使用して、フロントにする JWS を生成します。プロセス コントロールを右クリックします。[前置 JWS の生成] を選択します。

JPD 間の通信

WLI アプリケーションには、互いに通信する複数の JPD が含まれています。他の JPD から呼び出される JPD はサブプロセスと呼ばれます。表 4-7 は、JPD 間の通信について参照できる高度なガイドラインのリストです。

表 4-7 JPD の通信に関する高度な設計ガイドライン
高度な設計ガイドライン
説明
別々のドメインにあるプロセス間の非同期通信では、JMS イベント ジェネレータまたは JMS を介した Web サービスと一緒に、JMS とメッセージング ブリッジを使用することを推奨。
メッセージング ブリッジでは、ドメイン間の非同期メッセージングに関するすべての QoS オプションをサポートする。メッセージング ブリッジのストア アンド フォワード機能は、ローカル プロセスを問題から分離し、リモート プロバイダへのアクセスを提供する。
同じドメインにあるプロセス間の非同期双方向通信では、メッセージ ブローカよりもプロセス コントロールを使用することを推奨。
プロセスを開始する場合は、プロセス コントロールとメッセージ ブローカのどちらを使用してもパフォーマンスはほとんど同じだが、プロセス コントロールのコールバックを受信する方が、メッセージ ブローカのサブスクリプションよりも大幅に速くなる。メッセージ ブローカのサブスクリプション フィルタ メカニズムでは、データベースを使用してフィルタ値をプロセス インスタンスにマップする。プロセス コントロールのコールバックは、プロセス インスタンスに直接ルーティングされる。
メッセージ サイズが大きい場合は、JMS を直接使用する。
Web サービスでは、大きなメッセージをマーシャリングするよりも JMS の方が効率的である。
同じドメインにあるプロセス間の同期通信で、プロセス間でトランザクションを伝播する必要がある場合や、パフォーマンスが問題となる場合は、サービス コントロールやサービス ブローカ コントロールではなく、プロセス コントロールを使用する。
プロセス コントロールはトランザクション対応であり、SOAP マーシャリングは回避される。サービス コントロールやサービス ブローカ コントロールはトランザクション対応ではない。
別々のドメインにあるプロセス間の同期通信では、サービス コントロールまたはサービス ブローカ コントロール、あるいは JPD プロキシを使用する。
プロセス コントロールはドメインの内部でのみ使用できる。JPD プロキシは、厳密な結合と同じコストで、トランザクションの伝播を提供する。サービス コントロールとサービス ブローカ コントロールはトランザクションの伝播は提供しないが、緩やかな結合を可能にする。
データに依存するルーティング機能が必要な場合は、サービス コントロールやプロセス コントロールではなく、サービス ブローカ コントロールを使用する。
サービス ブローカ コントロールを使用すると、データに応じて異なるサービス実装へサービス呼び出しをルーティングする機能をコンフィグレーション可能であるが、この機能はトランザクション対応ではない。

コントロールの使用

コントロールは JPD の不可欠な部分です。WLI コントロールはオープン ソースの Apache Beehive 標準に基づいています。JSR-175 標準に基づいたアノテーションをサポートしています。コントロールは再利用可能であり、エンタープライズ リソースに簡単にアクセスできるようになります。コントロールは、バックエンド システムの呼び出しを行うために、プロセス定義内で使用されます。たとえば、データベース コントロールを使用すると、プロセスは JDBC 接続プールを使用して RDBMS に SQL を送信できます。表 4-8 に、コントロールを使用する場合に参照できる、高度なガイドラインを示します。

表 4-8 コントロールの使用に関する高度なガイドライン
高度な設計ガイドライン
説明
コントロールの再利用
すべてのコントロールは、別のプロセス定義でも再利用できるように記述しなければならない。
カスタム コントロールを開発する際には、ネイティブの WLI コントロールに留意する。
できる限り WLI で用意されているコントロールを使用する。カスタム コントロールは、絶対に必要な場合にのみ記述する。
コードの再利用性を考慮する場合は、カスタム Java コードの代わりにカスタム コントロールを使用する。
カスタム Java コードに対するコントロールを作成すると、そのコードは別のプロセス定義でも再利用可能になる。
コントロールはソース コード管理でバージョニングする必要がある。
コントロールは Java コードとして扱い、適切にバージョニングする必要がある。
Oracle Workshop for WebLogic の各アプリケーション プロジェクトで、個別のコントロール プロジェクトを用意する。
すべてのアプリケーションで使用できるようにするため、コンポーネント ライブラリからこのプロジェクトにコントロールをインポートする。

コントロールの動的プロパティとアノテーションの使用

多くの場合、コントロール属性はアノテーションを使用して静的に定義されます。ただし、一部のコントロールは、属性を動的に変更するための Java API を備えています。サービス ブローカ コントロールやプロセス コントロールなどの動的コントロールは、コントロール属性を動的に設定する機能を備えています。動的または遅延バインディング プロセスが使用されますが、このプロセスでは、ルックアップ ルールと値の組み合わせを使用して実行時に属性が決定されます。動的バインディングをサポートするコントロールを「動的コントロール」と呼びます。

ルックアップ ルールは設計時に定義します。ルックアップ値を定義するには、実行時に WLI Administration Console から、ルックアップ ルールと値を格納している DynamicProperties.XML ファイルを変更します。メッセージ ペイロード (ルックアップ キー) の値と対応するコントロール プロパティの値のマッピングが含まれています。このファイルは、ドメイン内のすべての WLI アプリケーションが共有するドメイン全体のファイルであり、WLI Administration Console を使用して管理します。この機能によって、コントロール属性をアプリケーションから完全に切り離すことができます。このファイルを使用すると、アプリケーションの実行中に動的なプロパティを管理できます。変更を反映するためにアプリケーションを再デプロイする必要はありません。このファイルは、ドメインのルートのサブディレクトリ (wliconfig) に格納されています。

プロパティの動的バインディングを行うには、以下の機能を使用します。

現在のプロパティ設定を取得するには、getProperties() メソッドを使用します。また、XML メタ データ キャッシュ コントロールを使用すると、実行時の動的データ ルックアップのパフォーマンスを向上させることができます。

非同期呼び出し中のサービス コントロール メソッドのバッファリング

ビジネス プロセスから Web サービスを非同期に呼び出す場合は、ビジネス プロセスから Web サービスに送信されるメッセージが確実にキューに入るように、非同期呼び出しをバッファリングすることをお勧めします。リソースに対する非同期呼び出しによって、ビジネス プロセス内でトランザクションの境界がマークされます。リソースに対する呼び出しは、トランザクションがコミットされるまではキューに追加されません。

リソースに対する呼び出しをバッファリングすることで、リソースからの応答が来る前に、トランザクションは確実にコミットされます。呼び出しをバッファリングしない場合、ビジネス プロセスでは、トランザクションがコミットされる前に、HTTP の確認応答を待機する必要があります。この場合、リソースは HTTP の確認応答より前にビジネス プロセスに応答しようとします。

コントロール ファクトリを使用したコントロールの複数のインスタンスの管理

コントロールのコントロール ファクトリ機能を使用すると、JPD は同じ JPD の複数のインスタンスと対話できるようになります。ファイル、電子メール、WLI JMS、トレーディング パートナ管理、サービス、ワークリストの各コントロールをコントロール ファクトリとして実装できます。たとえば、JPD で融資申し込みなどのドキュメントを複数のサービス プロバイダに送信する必要がある場合は、コントロール ファクトリを使用して、サービス コントロールの複数のインスタンスを作成し、それらのサービス コントロール インスタンスに並行して要求をディスパッチできます。コントロールでコールバックを使用する場合は、呼び出し側の JPD 内にパラメータ化したコールバック ハンドラを 1 つ用意し、すべてのコントロール インスタンスから受信するコールバックを管理させることができます。

データ トランスフォーメーション

ビジネス プロセスではデータのトランスフォーメーションと操作が統合されています。サービス コンシューマとプロバイダは、さまざまなデータ形式と型を必要としています。WLI ではデータ トランスフォーション用に以下のツールを提供しています。

注意 : WLI 8.1 との下位互換性を保つために、WLI は実行時の XQuery 2002 の実行をサポートしています。

標準データ モデル

アプリケーションの標準データ モデルを作成することをお勧めします。標準データ モデルとは、データを合意された標準の形式にマップしたものです。適切に実装した場合、こうしたデータモデルによって、エンタープライズ情報システム (EIS) に依存しないインタフェースがサービスに提供されます。参照データ、静的データ、識別子データを EIS のデータ形式から標準形式にマップする方法を指定することで、ホストのデータ モデルと受信者のデータ モデルを分離することができます。最初にサービス インタフェースの標準を作成する必要があります。それによって、企業内のデータ型とエンティティの共通の表現が提供されます。日付、数、郵便番号、住所などの表現方法には一貫性を持たせる必要があります。

トランスフォーメーションの実行時選択

動的トランスフォーメーション コントロールを使用すると、ビジネス プロセスは実行時にトランスフォーメーションを動的に選択して実行できます。実行時に呼び出される XQuery、XSLT、または MFL ファイルを選択できます。たとえば、さまざまな支社からドキュメントを受信する統合ハブがある場合、動的トランスフォーメーション コントロールを使用すると、各支社の市外局番に基づいて異なるトランスフォーメーションを実行することができます。表 4-9 に、データ トランスフォーメーションに関する高度な設計ガイドラインを示します。

表 4-9 データ トランスフォーメーションに関する高度な設計ガイドライン
高度な設計ガイドライン
説明
XSLT ではなく XQuery を使用して、新しいデータ トランスフォーメーションを作成する。
XQuery には、追加機能や優れたパフォーマンスなど、XSLT に比べていくつかの利点がある。
追加のコストや複雑さを相殺する明確な利点がある場合にのみ、データ モデル (エンタープライズ データ モデル (EDM)) を使用する。
データ モデルを使用するには、企業では大量のリソースが必要になる。必要なリソースを用意する意思が組織にある場合にのみ、データ モデルを使用すること。
データ モデルの実装にはコストと社会的な課題がある。投資収益を迅速に回収するために、インタフェースで標準を実装できる。
これは、すべてのサービス インタフェースにわたって一貫性のあるデータ表現を確保するためである。たとえば、日付、郵便番号、住所が常に特定の形式で表現される。
メッセージ ヘッダなどの情報は、必ず標準の形式で表現するようにする。
メッセージの起点を受信者に開示してはならない。
データ モデルまたは標準のサービス インタフェースが適切に実装されている場合、メッセージの受信者には、メッセージをディスパッチしているシステムのデータ形式はわからない。
再利用可能な情報はすべてステートレス プロセスでラップする。
再利用可能なトランスフォーメーションをステートレス プロセスとしてラップすると、他のコンポーネントがサービスで呼び出すことができる。これにはフロントエンド システムからの直接呼び出しも含まれる。

 


タスク プランの開発

WLI のワークリストでは、いくつかの機能が拡張されています。

例外管理用のタスク プラン

タスク プランを使用して JPD の例外を管理できます。ユーザは、例外が発生したときに、呼び出されたタスク プランに取り組むことができます。

カスタム ロジックとタスク プランの統合

カスタム ロジックをタスク プランに統合するには、タスク プランのイベント サービスを使用します。

タスク プランのイベントをサブスクライブするには、独自のカスタム イベント リスナを記述して、タスク プランに登録します。リスナ クラスにはカスタム コードを記述できます。タスク プラン イベントによって、タスクに関連付けられている各イベント リスナが呼び出されると、このカスタム コードが実行されます。

カスタム ロジック内でカスタム割り当てハンドラを使用すると、実行時にデフォルトのタスク割り当てを変更できます。

詳細については、『Worklist の使い方』を参照してください。


  ページの先頭       前  次