会話の存続期間

会話には、開始と途中と終了があります。会話を使用するサービスを設計するときには、クライアントや他のリソースとの通信における各メソッドとコールバックの役割を知っておく必要があります。

メソッドおよびコールバックの会話フェーズ(start、continue、および finish)を設定するだけでなく、会話の有効期間(max-age、 max-idle-time)などのサービスレベルのプロパティを設定することもできます。

会話のサポートを追加するときには、会話プロパティのフェーズ属性を使用してサービスのインタフェース(外部にエクスポーズするメソッドおよびコールバック)にマークを付けます。この作業は、デザイン ビューでプロパティ ペインを使用して行うことができます。メソッドまたはコールバックでこのプロパティを設定すると、WebLogic Workshop ではそのアイテムが会話の開始、続行、または終了のどれを行うのかを示す以下のアイコンを追加します。

   

次の例は、2 つの会話を使用するときのサービスのライフ サイクルを説明しています。1 つの会話はクライアントのリクエストに応答し、もう 1 つはサービス コントロールと通信します。BookLocator サービスは、顧客の代わりに他の書店のネットワークを調べます。次の図の各番号は、その後に続くライフ サイクルの説明の各段階に対応します。1、4、5、および 6 では、BookLocator サービスとクライアントの間の会話が説明されています。2 および 3 では、BookLocator サービスと bookSeller コントロールの間の会話が説明されています。BookLocater サービスのコードは仲介として機能し、2 つの会話の間で情報を交換します。最初の会話は、クライアントが BookLocater に書籍をリクエストしたときに開始されます。BookLocater は、bookSeller サービスに特定のタイトルについて問い合わせます。bookSeller サービスが BookLocater に応答を返したとき、それらの間の会話は完了します。その後、BookLocator は応答を待っているクライアントの方に戻って、最初の会話を再開します。

  1. クライアントが、書籍とその著者の情報を渡して requestBook メソッドを呼び出して検索リクエストを送信します。

このメソッドは会話開始のマークが付けられているので、WebLogic Server ではサービスの新しいコンテキストを作成し、そのコンテキストとユニークな識別子(会話 ID)を関連付けます。会話 ID は、クライアントとサービスの以降の対話を相関させるために使用します。その結果、クライアントへのコールバックと他のコントロールからの呼び出しがサービスのこの特定のインスタンスと正しく関連付けられます。

requestBook メソッドはすぐに void を返し、クライアントが処理を継続できるようにします。このようなやり取り(応答が用意できたときのコールバックが約束された void の返し)は、非同期通信の極めて重要な部分です。

メソッドが復帰すると、WebLogic Server は会話のアイドル状態と存続期間のタイマーをスタートさせます。それらのタイマーは後で、アクティビティがない場合に会話を終了させる(タイムアウトを発生させる)ために使用できます。その際には同時に、サービスのステート関連データが保存されます。

  1. requestBook メソッドの実装の一部として実行されるコードから、bookSellerControl の queryForBook メソッドが呼び出されます。

このメソッドでは bookSeller サービスによって実装される会話が開始されるので、WebLogic Server ではそのサービスの新しいコンテキストを作成します。つまり、このメソッドの呼び出しはその独自のコンテキストの中で管理されます。ただし、各サービス コンテキストが独立しており、会話 ID とステート関連データが別々であっても、WebLogic Server によってそれらの通信は正しく相関されます。

  1. 書店の在庫にリクエストされた書籍があるかどうか調べられた後、bookSeller サービスがそのインタフェースに含まれる onQueryComplete コールバックを使用して結果を返します。このコールバックは BookLocator サービスとの bookSeller サービスの会話を終了し、そのコンテキストは WebLogic Server によって解放されます。サービスを実行するために保持されていたリソースもすべて解放されます。BookLocator サービスの会話コンテキストはアクティブなままです。

応答は、onQueryComplete コールバック ハンドラを使用して BookLocator サービスによって処理されます。クライアントへの付加価値として、BookLocator サービスの背後の人間が、書店から返されたデータを調べてそれがクライアントとって役に立つのかどうかを判断します。このケースでは、データは状態および価格が異なる書籍の大きなリストなので、書籍検索者はリストを狭めるためにより多くの情報をクライアントに要求します。

  1. BookLocator が、onNeedMoreInfo コールバックを通じてより多くの情報を要求します。このコールバックはインタフェースの一部なので、クライアント ソフトウェアはそれを処理する準備があり、条件の一致する書籍のリストを短くするための情報を示すパラメータに対応します。

onNeedMoreInfo コールバックは、クライアントとの会話を「続行」するようにマークされています。したがって、このコールバックは適切なリクエストに応じて確実に送信されます。BookLocator サービスに対して複数のリクエストが複数のクライアントによってなされている場合でも、それぞれのステートはそのコンテキストによって安全に維持されます。

  1. クライアントが詳細情報で応答し、その情報を submitMoreInfo メソッドのパラメータとして BookLocator に送り返します。当然、submitMoreInfo の呼び出しは、クライアントへのコールバックと同様に会話を続行するようにマークされています。

  2. BookLocator が追加情報を使用してリストを短縮し、別のコールバック(onSearchComplete)を使用して短いリストをクライアントに送信します。このコールバックは、会話を「終了」するようにマークされています。このコールバックが実行されると、開始メソッドの呼び出しで作成されたコンテキストが WebLogic Server で削除できるようになります。

関連トピック

会話のサポートを追加するには

会話を実装する