アプリケーション制御の分散作業単位では、タイプ 2 の接続を使用します。 タイプ 2 の接続は、 指定されたアプリケーション・サーバーにアプリケーション・プロセスを接続し、 アプリケーション制御の分散作業単位のための規則を確立します。
アプリケーション・プロセスの各接続は、 その接続のアプリケーション・サーバーのデータベース別名によって、一意に識別されます。
個々の接続の状態は、常に以下の中のいずれか 1 つになっています。
タイプ 2 のアプリケーション・プロセスは当初、 未接続状態 であり、接続はありません。
初期の接続は、 現行 で保留状態 です。
状態の移行する様子を次の図に示します。
図 6. アプリケーション制御の分散作業単位とアプリケーション・プロセスの接続状態遷移
明示的または暗黙の CONNECT ステートメントの実行により、 種々のアプリケーション・サーバーを確立することができます。 10 以下の規則が適用されます。
アプリケーション・プロセスに現行の接続がある場合、 アプリケーション・プロセスは接続済み 状態です。 CURRENT SERVER 特殊レジスターに、 現行の接続のアプリケーション・サーバーの名前が入れられています。 アプリケーション・プロセスは、 アプリケーション・サーバーによって管理されるオブジェクトを参照する SQL ステートメントを実行できます。
未接続状態のアプリケーション・プロセスは、 CONNECT または SET CONNECTION ステートメントが正常に実行されたときに、 接続済み状態に移行します。 アプリケーションに接続がなく、SQL ステートメントが発行された場合に、 DB2DBDFT 環境変数がデフォルトのデータベースで定義されているなら、 暗黙の接続が行われます。
アプリケーション・プロセスに現行の接続がない場合、 アプリケーション・プロセスは未接続 状態です。 実行できる SQL ステートメントは、CONNECT、 DISCONNECT ALL、 データベースを指定した DISCONNECT、 SET CONNECTION、 RELEASE、COMMIT、 および ROLLBACK だけです。
接続状態 のアプリケーション・プロセスは、 現行の接続が意図的に終了された場合、 またはアプリケーション・サーバーでのロールバック操作を引き起こして、 接続が失われることになるような障害のために SQL ステートメントが正常に実行されなかった場合、 未接続状態 に移行します。 接続が解放保留状態 のときに、 DISCONNECT ステートメントが正常に実行された場合、 またはコミット操作が正常に実行された場合、接続は意図的に終了させられます。 意図的な接続終了の動作は、 DISCONNECT プリコンパイラー・オプションで指定される各種のオプションの影響を受けます。 それが AUTOMATIC に設定されている場合は、すべての接続が終了します。 CONDITIONAL に設定されている場合は、 オープンされている WITH HOLD カーソルのない接続がすべて終了します。
アプリケーション・プロセスが CONNECT ステートメントを実行し、 サーバー名がアプリケーション・リクエスターに認識され、 かつ、そのサーバー名がそのアプリケーション・プロセスの既存の一連の接続にない場合は、 以下のようになります。
サーバー名がすでにアプリケーション・プロセスの既存の接続の集合に含まれている場合に、 アプリケーションを SQLRULES(STD) オプション付きでプリコンパイルすると、 エラー (SQLSTATE 08002) になります。
接続に対して解放が明示されていなくても、 コミット操作が DISCONNECT プリコンパイラー・オプションの条件を満たしていれば、 コミット操作によって切断可能です。
接続が終了すると、アプリケーション・プロセスが接続によって獲得していたすべての資源、 および接続を確立し維持するために使用されたすべての資源が割り振り解除されます。 たとえば、アプリケーション・プロセスが RELEASE ステートメントを実行すると、 その次のコミット操作で接続が終了するときにオープンしているカーソルがすべてクローズされます。
接続は、通信の障害によっても終了することがあります。 終了する接続が現行の接続であった場合、 アプリケーション・プロセスは未接続状態に移行します。
アプリケーション・プロセスが終了すると、そのプロセスのすべての接続が終了します。