会話の存続期間
会話には、開始と途中と終了があります。会話を使用するサービスを設計するときには、クライアントや他のリソースとの通信における各メソッドとコールバックの役割を知っておく必要があります。
メソッドおよびコールバックの会話フェーズ(start、continue、および finish)を設定するだけでなく、会話の有効期間(max-age、 max-idle-time)などのサービスレベルのプロパティを設定することもできます。
会話のサポートを追加するときには、会話プロパティのフェーズ属性を使用してサービスのインタフェース(
次の例は、2 つの会話を使用するときのサービスのライフ サイクルを説明しています。1 つの会話はクライアントのリクエストに応答し、もう 1 つはサービス コントロールと通信します。
クライアントが、書籍とその著者の情報を渡して requestBook メソッドを呼び出して検索リクエストを送信します。
このメソッドは会話開始のマークが付けられているので、WebLogic Server ではサービスの新しいコンテキストを作成し、そのコンテキストとユニークな識別子(会話 ID)を関連付けます。会話 ID は、クライアントとサービスの以降の対話を相関させるために使用します。その結果、クライアントへのコールバックと他のコントロールからの呼び出しがサービスのこの特定のインスタンスと正しく関連付けられます。
requestBook メソッドはすぐに void を返し、クライアントが処理を継続できるようにします。このようなやり取り(
メソッドが復帰すると、WebLogic Server は会話のアイドル状態と存続期間のタイマーをスタートさせます。それらのタイマーは後で、アクティビティがない場合に会話を終了させる(タイムアウトを発生させる)ために使用できます。その際には同時に、サービスのステート関連データが保存されます。
requestBook メソッドの実装の一部として実行されるコードから、bookSellerControl の queryForBook メソッドが呼び出されます。
このメソッドでは bookSeller サービスによって実装される会話が開始されるので、WebLogic Server ではそのサービスの新しいコンテキストを作成します。つまり、このメソッドの呼び出しはその独自のコンテキストの中で管理されます。ただし、各サービス コンテキストが独立しており、会話 ID とステート関連データが別々であっても、WebLogic Server によってそれらの通信は正しく相関されます。
書店の在庫にリクエストされた書籍があるかどうか調べられた後、bookSeller サービスがそのインタフェースに含まれる onQueryComplete コールバックを使用して結果を返します。このコールバックは BookLocator サービスとの bookSeller サービスの会話を終了し、そのコンテキストは WebLogic Server によって解放されます。
応答は、onQueryComplete コールバック ハンドラを使用して BookLocator サービスによって処理されます。クライアントへの付加価値として、BookLocator サービスの背後の人間が、書店から返されたデータを調べてそれがクライアントとって役に立つのかどうかを判断します。このケースでは、データは状態および価格が異なる書籍の大きなリストなので、書籍検索者はリストを狭めるためにより多くの情報をクライアントに要求します。
BookLocator が、onNeedMoreInfo コールバックを通じてより多くの情報を要求します。このコールバックはインタフェースの一部なので、クライアント ソフトウェアはそれを処理する準備があり、条件の一致する書籍のリストを短くするための情報を示すパラメータに対応します。
onNeedMoreInfo コールバックは、クライアントとの会話を「続行」するようにマークされています。したがって、このコールバックは適切なリクエストに応じて確実に送信されます。BookLocator サービスに対して複数のリクエストが複数のクライアントによってなされている場合でも、それぞれのステートはそのコンテキストによって安全に維持されます。
クライアントが詳細情報で応答し、その情報を submitMoreInfo メソッドのパラメータとして BookLocator に送り返します。当然、submitMoreInfo の呼び出しは、クライアントへのコールバックと同様に会話を続行するようにマークされています。
BookLocator が追加情報を使用してリストを短縮し、別のコールバック(onSearchComplete)を使用して短いリストをクライアントに送信します。このコールバックは、会話を「終了」するようにマークされています。このコールバックが実行されると、開始メソッドの呼び出しで作成されたコンテキストが WebLogic Server で削除できるようになります。