HTTP 要求は、HTTP セッション・コンテキストを作成できます。要求によって作成されたセッションは必ずすぐにインスタンス化されるので、このセッション・コンテキストを必要とする後続の HTTP 要求は作成されたセッションによってキューに追加されます。
セッションなしで開始し、セッション・コンテキストを作成した HTTP 要求が、そのセッションの作成者になります。作成者の要求は、セッション・コンテキストを変更または削除でき、変更または削除はただちに実行されます。セッション・コンテキスト内で開始された HTTP 要求も、自身のセッションを変更または削除できます。自身のセッションを変更すると、完全に動作可能な保留中のセッションがただちに作成されます。ただし、他の HTTP 要求は所有権を取得できません (保留中のセッションを必要とする要求は、受信されるとそのセッションのキューに追加されます)。要約すると、作成者要求のセッションを変更または削除すると、現在のセッション・コンテキストがただちに変更されますが、自身のセッションを変更するだけの要求は、自身の保留中のセッションを変更します。HTTP 要求は、完了すると、保留中のセッションがあるかどうかを確認します。保留中のセッションがある場合は、現在のセッションを削除し、保留中のセッションに置き換えます。セッションによってキャッシュされたデータベース接続は、効率的に新しいセッション・コンテキストに移動され、テンポラリ・テーブルや作成された変数などのステータス・データはすべて保持されます。
どのような場合にも、HTTP セッションが削除されると、キュー内にあった要求はすべて解放され、セッション・コンテキストなしで実行可能になります。要求がセッション・コンテキスト内で実行されることを想定しているアプリケーション・コードは、CONNECTION_PROPERTY('SessionID') を呼び出して、有効なセッション・コンテキストを取得する必要があります。
DECLARE ses_id LONG VARCHAR; SELECT CONNECTION_PROPERTY( 'SessionID' ) INTO ses_id; |
HTTP 要求が、故意またはネットワーク障害によって取り消された場合、既存の保留中のセッションは削除され、元のセッション・コンテキストが保持されます。作成者の HTTP 要求は、取り消されても通常に終了された場合でも、セッションのステータスをただちに変更します。
Copyright © 2009, iAnywhere Solutions, Inc. - SQL Anywhere 11.0.1 |