2.1 Javaアプリケーションにインポーズされるデータベース・セッション

Javaを統合したOracle Databaseでは、Javaアプリケーションはデータベース・セッションのコンテキスト内に存在します。Oracle JVMセッションは、従来のOracleセッションとまったく同様です。Oracle JVMの各セッションは、セッション内の複数のコールにわたって、クライアントがアクセスするJavaアプリケーションの状態を保持します。

図2-1に、各Javaクライアントが、データベース内のJavaアプリケーションを実行する環境としてデータベース・セッションを起動する方法を示します。Javaの各データベース・セッションには、独立したガベージ・コレクタ、セッション・メモリーおよびコール・メモリーがあります。

図2-1 各データベース・セッション内のJava環境

図2-1の説明が続きます
「図2-1 各データベース・セッション内のJava環境」の説明

セッションのコンテキストで、クライアントは次の内容を実行します。

  1. データベースに接続してセッションをオープンします。

  2. データベース内でJavaを実行します。これはコールとも呼ばれます。

  3. 必要に応じてコールを実行し、セッション内で処理を続行します。

  4. セッションを終了します。

1つのセッション内で、クライアントには独自のJava環境があります。クライアントには、セッションごとに個別のJVMが個々に起動されるように見えますが、実際の実装はそれよりも効率的です。セッション内では、Oracle JVMがアプリケーションのスケーラビリティを管理します。ある単一のクライアントからのすべてのコールは、そのクライアントのセッションで管理され、各クライアントからのコールは個別に処理されます。Oracle JVMは、クライアント間の読取り専用データの共有を最大にし、セッションごとの増分フットプリントを最小限にすることで、 複数のクライアントのパフォーマンスを最大にします。

基盤となるサーバー環境では、セッション、ネットワーク、状態および他の共有リソース管理の問題に関する詳細が、Javaコードに対して明示されません。staticとして定義されたフィールドは、クライアントに対してローカルです。メモリーはセッションの境界を超えて使用できないため、クライアントは他のクライアントのstaticフィールドにはアクセスできません。各クライアントは、それぞれのセッション内でJavaアプリケーション・コールを実行するため、各クライアントのアクティビティは他のクライアントとは切り離されています。コール中にオブジェクトを異なるクラスのstaticフィールドに格納し、それを次のコールで使用できます。Javaプログラムの状態はすべてプライベートで、セッション全体にわたって存続します。

Oracle JVMは、セッション内で次の内容を管理します。

  • Javaのstaticフィールドが参照するすべてのオブジェクト、これらのオブジェクトが参照するすべてのオブジェクトなど(オブジェクトの推移閉包まで)

  • セッションを作成したクライアントのガベージ・コレクション

  • staticフィールドのセッション・メモリーおよびコール間での必要なメモリー

  • 1つのコール内に存在するフィールドのコール・メモリー