|
以下の各節で説明するように、WLI アプリケーションのコア実装パターンは複数あります。
JPD には複数の種類があり、それぞれが以下の固有の特性を持つように設計されます。
注意 : | 複合的なプロセスは複数の呼び出しを行うため、例外管理がより複雑になります。 |
これらの特性の組み合わせから複数の JPD のパターンが発生します。以下の節では、JPD のパターンについて簡単に説明します。
最も高速なプロセスのいくつかは、図 6-1 に示す、このパターンを使用して実装します。標準的な使用例は、バックエンド システムに簡単にアクセスしたり、ヘルパー プロセスを実装したりすることです。
最も高速なプロセスのいくつかは、図 6-2 に示す、このパターンを使用して実装します。標準的な使用例は、プロセス クライアントから切り離す必要がある場合に、バックエンド システムに簡単にアクセスすることです。
最も高速なプロセスのいくつかは、図 6-3 に示す、このパターンを使用して実装します。標準的な使用例は、イベント駆動型環境でバックエンド システムにアクセスすることです。
このパターンは、同じサービスのステートレス バージョンほど高速ではありません。非同期インタフェースを提供するバックエンド システムへのアクセスを提供する場合は、図 6-4 に示す、このパターンを使用します。
ほとんどの一方向サービスはステートレスであり、応答を待機する必要がないため、このパターンは非常にまれです。待機する呼び出しが必要なイベント駆動型環境でバックエンド システムにすばやくアクセスする場合は、図 6-5 に示す、このパターンを使用します。
優れたパフォーマンスおよびクライアントとの結合が要求される統合ロジックを実装する場合は、図 6-6 に示す、このパターンを使用します。
このパターンは、クライアントが応答を受信してからロジックが実装されるまれなケースを表します。一定期間実行され、同期要求または同期応答によって開始されるステートフル プロセスを有効にする場合は、図 6-7 に示す、このパターンを使用します。同期応答が送信されると、プロセスは従来の非同期モデルに移行します。
図 6-8 に示すパターンは、クライアントから切り離した状態を保持する一方で優れたパフォーマンスが要求される統合ロジックを実装するための標準的な方法です。このパターンは、呼び出し側との切り離しが必要なときにバックエンド システムにアクセスする場合にも使用できます。使用するすべてのリソースがステートレスである必要があるため、このパターンを必ず実装できるとは限りません。
イベント駆動型環境で優れたパフォーマンスが要求される統合ロジックを実装する場合は、図 6-9 に示す、このパターンを使用します。
1 つ以上のリソースに非同期インタフェースが含まれるため、同じパターンのステートレス バージョンを使用できない場合は、図 6-10 に示す、このパターンを使用します。長時間実行されるプロセスの標準パターンとしても使用されます。
通常、ほとんどの一方向サービスはステートレスであり、応答を待機する必要がないため、このパターンは一般的ではありません。イベント駆動型のシナリオで統合ロジックを実装し、さらに待機する呼び出しも要求される場合は、図 6-11 に示す、このパターンを使用します。
この節では、コア パターンのいずれかと組み合わせて使用できる便利なパターンを再分類します。
同期クライアントが、リソースと非同期に対話するビジネス クライアントと対話できるようにするには、同期/非同期コールバック名属性プロパティを指定したクライアント要求ノードを含むビジネス プロセスを作成します。このクライアント要求ノードのプロパティには、関連付けられたクライアント要求ノードで使用するコールバック メソッドの名前が保持されます。クライアント要求ノードとクライアント応答ノードは、クライアントがプロセスをブロックしているときに発生するアクティビティ (非同期クライアントを含む) を表します。このプロパティの設定後に、同期/非同期 WSDL を生成します。同期 WSDL の生成プロセスでは、サービスの SOAP アドレスと、修正した SOAP アドレスが入れ替わります。修正したアドレスにより、同期サーブレットがクライアント要求および後続の戻りアクションを処理します。生成されるサービス エントリの例を以下に示します。
<service name="syncAsync">
<port name="syncAsyncSoap" binding="s0: syncAsyncSoap">
<soap: address
location="http://localhost:7001/SyncAsyncWeb/processes/syncAsync.jpd"/>
</port>
<service name="syncAsync">
<port name="syncAsyncSoap" binding="s0: syncAsyncSoap">
<soap:address
location="http://localhost:7001/sync2AsyncIM/SyncAsyncWeb/processes/syncAsync.sync2JPD"/>
デシンクロナイザ パターンを使用すると、同期プロセスを非同期的に呼び出すことができます。このパターンは、以下の場合にお勧めします。
非同期インタフェースを同期プロセスに提供するには、図 6-12 に示すプロセスを実装します。
このサービスは、単純なプロキシ プロセスです。要求と応答のシグネチャが元のサービスのものと同じである必要があります。デシンクロナイザは、入力値をサブプロセスに渡し、戻り値をサブプロセスの呼び出し側に送信します。
図 6-13 は、きめの粗いプロセスときめの細かいプロセスの組み合わせの使用例を示します。きめの粗いプロセスは、特定の作業を複数のきめの細かいプロセスに割り当てます。
図 6-14 に示すパターンは、パブリッシュ アンド サブスクライブ アーキテクチャに基づき、メッセージ ブローカを介した一般的なメッセージング インタフェースを使用して疎結合プロセスを作成する方法を示しています。
以下のコントロールを使用すると、動的なプロパティ駆動型プロセスを定義できます。
図 6-15 は、レジスタ ルックアップとテーブル ルックアップを含む俊敏な動的プロセスの例を示しています。