この章では、TopLinkアプリケーションの永続層の概要について説明します。
この章の内容は次のとおりです。
アプリケーションの永続層の用途は、TopLinkのキャッシュ(86.1.3項「キャッシュ」を参照)、問合せおよび式(86.1.4項「問合せおよび式」を参照)ならびにトランザクション(86.1.5項「トランザクション」を参照)を使用して永続オブジェクトを作成、読取り、更新および削除するために、実行時にセッション(86.1.1項「セッション」を参照)を使用して、マッピング・メタデータ(2.4.3.1項「マッピング・メタデータ」を参照)とデータ・ソース(86.1.2項「データ・アクセス」を参照)を関連付けることです。
この項では、次の永続層の概念について説明します。
セッションは、クライアント・アプリケーションとTopLinkランタイムとの間のプライマリ・インタフェースで、基礎となるデータ・ソースへの接続を表します。
POJOプロジェクトでは、TopLinkにはいくつかの異なるセッション・タイプ(第87章「TopLinkセッションの概要」を参照)が用意されており、各タイプは様々な設計要件およびアーキテクチャについて最適化されています。最も一般的に使用されるセッションは、サーバー・セッションです。これは、クライアントがサーバー上でクライアント・セッションを介してアクセスするセッションです。サーバー・セッションは、共有キャッシュおよび共有接続リソースを提供します。
CMPプロジェクトの場合、TopLinkランタイムは、セッションを内部的に作成して使用しますが、アプリケーションがこのセッションを直接取得したり使用することはありません。使用するアプリケーション・サーバーに応じて、この内部セッションに対するパラメータのいくつかを指定できます(9.1.4項「JAVA-EE-CONTAINER-ejb-jar.xmlファイル」を参照)。
JPAプロジェクトでは、セッションは次のように内部的に使用されます。
EntityManagerFactory
によって、ServerSession
がラップされます。
EntityManager
によって、UnitOfWork
およびClientSession
がラップされます。
セッションに関連付けられたログイン(存在する場合)により、TopLinkランタイムがプロジェクトのデータ・ソースに接続する方法が決まります。
ログインには、認証、接続プールの使用、および外部トランザクション・コントローラの使用などのデータ・ソース・アクセスの詳細が含まれます。ログイン(Login
インタフェースのインスタンス)は、データ・ソース・プラットフォームを所有します。
プラットフォームには、バインディング、ネイティブSQLの使用、バッチ書込みの使用、順序付けなどの、特定のデータ・ソースに固有のオプションが含まれます。プラットフォームの詳細は、96.1.3項「データ・ソース・プラットフォームのタイプ」を参照してください。
データ・ソースに永続化しないプロジェクトの場合、ログインは必要ありません。データ・ソースに永続化するプロジェクトの場合、ログインは常に必要です。
関係する情報および詳細は、第96章「データ・アクセスの概要」を参照してください。
デフォルトでは、TopLinkセッションはオブジェクト・アイデンティティを保証するオブジェクト・レベルのキャッシュを提供し、アプリケーションがデータ・ソースにアクセスする回数を減らしてパフォーマンスを向上します。TopLinkは、ロック、リフレッシュ、無効化、分離およびコーディネーションなどの、様々なキャッシュ・オプションを提供します。キャッシュ・コーディネーションを使用して、デプロイされたアプリケーションの他のインスタンスと変更を同期化するようにTopLinkを構成できます。ほとんどのキャッシュ・オプションは、セッション・レベルで構成します。また、問合せ単位またはディスクリプタでキャッシュ・オプションを構成して、参照クラスのすべての問合せに適用されるようにできます。
詳細は、第102章「キャッシュの概要」を参照してください。
TopLinkには、いくつかのオブジェクトおよびデータ問合せタイプが用意されており、問合せ選択条件に対して次のような柔軟なオプションが提供されています。
TopLinkの式
JP QL
SQL
ストアド・プロシージャ
例による問合せ
これらのオプションを使用して、あらゆるタイプの問合せを作成できます。事前定義問合せを使用してアプリケーション問合せを定義することをお薦めします。事前定義問合せは、プロジェクトのメタデータ内に保持され、名前で参照されます。これにより、アプリケーション開発は簡単になり、問合せはカプセル化されてメンテナンス・コストが軽減します。
アーキテクチャまたは永続エンティティのタイプに関係なく、あらゆる問合せオプションを自由に使用できます。Oracle JDeveloper TopLinkエディタおよびTopLink Workbenchには、問合せを定義するための最も簡単な方法が用意されています。また、TopLink APIを使用してコードで問合せを作成することもできます。
詳細は、次を参照してください。
TopLinkには、作業ユニットを使用して、基礎となるデータベースおよびスキーマから分離されたトランザクション・コードを記述するための機能が用意されています。
作業ユニットは、トランザクション内で行われた変更を、その変更がデータベースに正常にコミットされるまで、他のスレッドから分離します。その他のトランザクション・メカニズムとは異なり、作業ユニットはトランザクション内のオブジェクトに対する変更、変更の順序および他のTopLinkのキャッシュを無効にする可能性がある変更を自動的に管理します。作業ユニットは、最小のチェンジ・セットを計算し、参照整合性規則に準拠してデッドロックを回避するようにデータベース・コールを順序付けし、変更されたオブジェクトを共有キャッシュにマージして、これらの問題を管理します。クラスタ化環境では、作業ユニットはコーディネート・キャッシュ内の他のサーバーと変更を同期化することもできます。
アプリケーションがEJBエンティティBeanを使用する場合は、直接作業ユニットAPIにアクセスしませんが、その機能の利点を活用できます。TopLinkランタイムとJava EEコンテナ間の統合により、自動的に作業ユニットが使用されます。
詳細は、第113章「TopLinkトランザクションの概要」を参照してください。