この章では、TopLinkセッションを構成する方法について説明します。
この章の内容は次のとおりです。
表89-1は、構成可能なTopLinkセッション・タイプと、そのタイプで対応している構成可能オプションが記載されたタイプ別の章への相互参照を示します。
表89-1 TopLinkセッションの構成
作成対象 | 参照先 |
---|---|
サーバーおよびクライアント・セッション(87.3項「サーバーおよびクライアントのセッション」を参照) |
|
作業ユニット・セッション(87.4項「作業ユニット・セッション」を参照) |
|
独立クライアント・セッション(87.5項「独立クライアント・セッション」を参照) |
第92章「Virtual Private Database用の排他独立クライアント・セッションの構成」 |
履歴セッション(87.6項「履歴セッション」を参照) |
|
セッション・ブローカおよびクライアント・セッション(87.7項「セッション・ブローカおよびクライアント・セッション」を参照) |
第94章「セッション・ブローカおよびクライアント・セッションの構成」 |
データベース・セッション(87.8項「データベース・セッション」を参照) |
|
表89-2は、2つ以上のTopLinkセッション・タイプで共通に使用される構成可能オプションを示します。
詳細は、次を参照してください。
表89-2は、2つ以上のTopLinkセッション・タイプで共通に使用される構成可能オプションを示します。ここで説明する構成可能オプション以外にも、表89-1に示すように、特定のセッション・タイプについて説明しているオプションも構成する必要があります。
表89-2 セッションの構成可能オプション
構成オプション | Oracle JDeveloper |
TopLink Workbench | Java |
---|---|---|---|
プライマリ・マッピング・プロジェクト(89.2項「プライマリ・マッピング・プロジェクトの構成」を参照) |
|||
セッション・ログイン(89.3項「セッション・ログインの構成」を参照) |
|||
ロギング(89.4項「ロギングの構成」を参照) |
|||
複数マッピング・プロジェクト(89.5項「複数マッピング・プロジェクトの構成」を参照) |
|||
パフォーマンス・プロファイラ(89.6項「パフォーマンス・プロファイラの構成」を参照) |
|||
例外ハンドラ(89.7項「例外ハンドラの構成」を参照) |
|||
セッション・カスタマイザ・クラス(89.8項「セッション・カスタマイザ・クラスの構成」を参照) |
|||
サーバー・プラットフォーム(89.9項「サーバー・プラットフォームの構成」を参照) |
|||
セッション・イベント・リスナー(89.10項「セッション・イベント・リスナーの構成」を参照) |
|||
コーディネート・キャッシュ(第103章「コーディネート・キャッシュの構成」を参照) |
|||
整合性チェッカ(89.11項「整合性チェッカの構成」を参照) |
|||
接続ポリシー(89.12項「接続ポリシーの構成」を参照) |
|||
名前付き問合せ(89.13項「セッション・レベルでの名前付き問合せの構成」を参照) |
マッピング・プロジェクトには、ディスクリプタやマッピングなど、TopLinkのマッピング・メタデータを格納します(第15章「プロジェクトの概要」を参照)。セッションがディスクリプタを登録できるように、各セッションは少なくとも1つのプロジェクトと関連付けられます。
表89-3では、どのセッションがプライマリ・マッピング・プロジェクトの構成をサポートしているかを示します。
表89-3 セッションでのプライマリ・マッピング・プロジェクトのサポート
セッション | Oracle JDeveloperの使用方法 | TopLink Workbenchを使用したプライマリ・マッピング・プロジェクトの構成方法 |
Javaを使用したプライマリ・マッピング・プロジェクトの構成方法 |
---|---|---|---|
サーバーおよびクライアント・セッション(87.3項「サーバーおよびクライアントのセッション」を参照) |
|
|
|
セッション・ブローカおよびクライアント・セッション(87.7項「セッション・ブローカおよびクライアント・セッション」を参照) |
|
|
|
データベース・セッション(87.8項「データベース・セッション」を参照) |
|
|
|
Oracle JDeveloper TopLinkエディタまたはTopLink Workbenchを使用すると、マッピング・メタデータを、デプロイXMLファイルまたはJavaクラスとしてエクスポートできます。このため、セッションには、マッピング・プロジェクトをXMLファイルまたはJavaクラスとして指定できます。
マッピング・メタデータをOracle JDeveloperからデプロイXMLファイルとしてエクスポートすることをお薦めします(116.3項「プロジェクト情報のエクスポート」を参照)。
マッピング・メタデータをJavaクラスとしてエクスポートした場合は、セッションに追加する前に、コンパイルしてセッション構成クラスパスに追加する必要があります(88.3項「セッション構成の構成」を参照)。
注意: XMLを使用してマッピング・プロジェクトを指定する場合、Javaリソース・パスを指定できます。ほとんどのアプリケーションで、sessions.xml ファイルとproject.xml ファイルをJARファイル内にデプロイし、Javaリソース・パスとしてプロジェクトXMLパスを指定します。
Javaリソース・パスを指定する場合、ディレクトリにはバックスラッシュ(\)ではなくスラッシュ(/)を使用してください。たとえば、 |
セッションでの追加のTopLinkプロジェクトの構成の詳細は、89.5項「複数マッピング・プロジェクトの構成」を参照してください。
セッション用にTopLinkプライマリ・プロジェクトのメタデータを指定するには、次の手順を実行します。
ナビゲータでサーバーまたはデータベース・セッションを選択します。そのプロパティがエディタに表示されます。
「一般」タブをクリックします。「一般」タブが表示されます。
「プロジェクト」サブタブをクリックします。「プロジェクト」サブタブが表示されます。
次のオプションを選択します。
「編集」をクリックしてプライマリ・プロジェクトを定義します。「プライマリ・プロジェクトの編集」ダイアログ・ボックスが表示されます。
「複数のプロジェクト」 オプションを選択すると、追加のプロジェクトをセッションに追加できます。詳細は、89.5項「複数マッピング・プロジェクトの構成」を参照してください。
次の情報を参照し、「プライマリ・プロジェクトの編集」ダイアログ・ボックスの各フィールドにデータを入力します。
フィールド | 説明 |
---|---|
XML | 「XML」を選択すると、マッピング・プロジェクトをデプロイXMLファイルとして追加できます。「参照」をクリックしてファイルを選択します。 |
クラス | 「クラス」を選択すると、マッピング・プロジェクトをコンパイル済のJavaクラス・ファイルとして追加できます。「参照」をクリックしてファイルを選択します。 |
Javaを使用すると、次のAPIを使用してディスクリプタをセッションに登録できます。
Project
API: project.xml
ファイルを読み取り(またはプロジェクト・クラスをインスタンス化し)、Project
メソッドcreateServerSession
またはcreateDatabaseSession
を使用してセッションを作成します。
Session
API: 表89-4に示すDatabaseSession
APIを使用して、ディスクリプタまたはディスクリプタのセットをセッションに追加します。ディスクリプタはログインする前に登録してください。ただし、プライマリでないプロジェクトのディスクリプタのセットはログイン後に追加できます。
セッション・ログインでは、データ・ソースに永続化するセッションのデータ・ソース・アクセスの詳細をカプセル化します。セッション・ログインにより、その他のログイン構成がオーバーライドされます。
表89-5では、どのセッションがセッション・ログインの構成をサポートしているかを示します。
セッション・ログインを使用すると、様々な機能を利用できます。次の機能があります。
接続構成(例: 外部接続プールを使用するかどうか)
順序付け構成(プロジェクト・レベルで設定された順序付け構成をオーバーライド)。
選択されたデータ・ソースに固有のその他のオプション。
プロパティ(任意。アプリケーション固有の名前付きの値)。
詳細は、次を参照してください。
TopLinkのロギング・フレームワークを使用して、ログ・ファイルまたはセッション・コンソールにTopLinkの動作を記録します。
表89-6では、どのセッションがロギング構成をサポートするかを示します。
表89-6 セッションでのロギングのサポート
セッション | Oracle JDeveloperの使用方法 | TopLink Workbenchを使用したロギングの構成方法 |
JavaでのセッションAPIを使用したロギングの構成方法 |
Java EEコンテナにおけるロギングの構成方法 |
---|---|---|---|---|
サーバーおよびクライアント・セッション(87.3項「サーバーおよびクライアントのセッション」を参照) |
|
|
|
|
作業ユニット・セッション(87.4項「作業ユニット・セッション」を参照) |
|
|
|
|
セッション・ブローカおよびクライアント・セッション(87.7項「セッション・ブローカおよびクライアント・セッション」を参照) |
|
|
|
|
データベース・セッション(87.8項「データベース・セッション」を参照) |
|
|
|
注意: セッションがセッション・ブローカに登録されている場合は、セッション自体にではなくセッション・ブローカにロギング情報を指定する必要があります。 |
デフォルトでは、TopLinkは独自のネイティブ・ロギングを使用します。あるいは、java.util.logging
パッケージを使用するようにTopLinkを構成できます(89.4.5項「java.util.loggingパッケージを使用するためのセッションの構成方法」を参照)。
詳細は、87.2.6項「ロギング」を参照してください。
セッションにロギング情報を指定するには、次の手順を実行します。
ナビゲータでデータベース・セッションを選択します。そのプロパティがエディタに表示されます。
「ロギング」タブをクリックします。「ロギング」タブが表示されます。
次の情報を参照し、「ロギング」タブの各フィールドにデータを入力して、このセッションで使用するプロファイラ・オプションを選択します。
オプション | 説明 |
---|---|
ロギングなし | このオプションを選択すると、このセッションでは何も記録されません。 |
サーバー | このオプションを選択すると、このアプリケーションがデプロイされているアプリケーション・サーバーのロギング機能が使用されます。 |
Java | このオプションを選択すると、java.util.logging パッケージが使用されます。 |
標準 | このオプションを選択すると、TopLinkのロギング・フレームワークが使用されます。
選択すると、任意で次のオプションを構成することもできます。 |
ロギング・レベル | (情報の昇順で)記録するロギング情報の量を定義します。
|
コンソール | このオプションを選択すると、ロギング情報が標準コンソール出力に表示されます。 |
ファイル | このオプションを選択すると、ロギング情報がファイルに記録されます。「参照」をクリックしてログ・ファイルの名前と場所を指定します。 |
オプション | このオプションを選択すると、「Java」または「標準」ロギングを選択した場合の、これ以外のロギング・オプションのデフォルトをオーバーライドします。 |
例外のログのスタック・トレース | このオプションを選択すると、スタック・トレースが含まれ、すべての例外がログに書き込まれます。
デフォルト: |
接続を出力 | このオプションを選択すると、接続識別子が接続関連ログ・メッセージに記録されます。
デフォルト: すべてのメッセージ・レベルとログ・レベルで有効化されます。 |
日付を出力 | このオプションを選択すると、ログ・メッセージが生成された日付と時刻も記録されます。
デフォルト: すべてのメッセージ・レベルとログ・レベルで有効化されます。 |
セッションを出力 | このオプションを選択すると、セッション名がセッション関連ログ・メッセージに記録されます。
デフォルト: すべてのメッセージ・レベルとログ・レベルで有効化されます。 |
スレッドを出力 | このオプションを選択すると、スレッド名がスレッド関連ログ・メッセージに記録されます。
デフォルト: |
TopLinkネイティブ・ロギング(デフォルト)を使用した場合は、実行時にoracle.toplink.sessions.Session
ロギングAPIを使用してロギング・オプションを構成できます。
Session
インタフェースは、次のロギング・メソッドを定義します。
setSessionLog
: 使用するロギング・タイプを指定します(oracle.toplink.logging.SessionLog
の任意のインプリメンタ)。
dontLogMessages
: ロギングを無効にします。
setLog
: セッションがメッセージを書き込むjava.io.Writer
を指定します。
setLogLevel
: セッションがoracle.toplink.logging.SessionLog
定数を使用して行うロギングのレベルを指定します。
OFF
SEVERE
WARNING
INFO
CONFIG
FINE
FINER
FINEST
ALL
例89-1は、java.util.logging
パッケージを使用するようにセッションを構成する方法を示します。
例89-2は、OC4Jが用意しているサーバー・ログを使用するようにセッションを構成する方法を示します。サーバー・ロギングの詳細は、87.2.6.1.3項「サーバー・ロギング」を参照してください。
例89-3は、java.io.Writer
にログを書き込むようにセッションを構成する方法を示します。
EclipseLink JPAアプリケーションまたはTopLink CMPアプリケーションをOracle Application Serverにデプロイする場合は、Oracle Enterprise Managerを使用してTopLinkロギングを構成できます。
詳細は、次を参照してください。
A.1項「Oracle Application ServerのManageability and Diagnosabilityに対するTopLinkのサポート」
『Oracle Fusion Middleware Administrator's Guide』
アプリケーション・サーバーにデプロイされたTopLink対応CMPアプリケーションの場合は、セッションを直接構成する必要はありません。この場合は、次のいずれかの値にシステム・プロパティtoplink.log.destination
を構成することでロギング・タイプを指定します。
完全修飾されたファイルの指定(C:\logs\toplink.log
など): TopLinkネイティブ・ロギングを使用して、指定されたファイルにログ・メッセージが書き込まれます。
JAVA
: java.util.logging
パッケージを使用して、ログ・メッセージが<JRE_HOME>
/lib/logging.properties
ファイルに構成した任意の宛先に書き込まれます。
SERVER
: サーバー・ロギングを使用して、ログ・メッセージがアプリケーション・サーバーのログ・ファイルに書き込まれます(この場合、これとは別にTopLinkログ・ファイルが存在することはありません)。
SYSOUT
: ログ・メッセージがSystem.out
に書き込まれます。
TopLinkの標準(デフォルト)ロギングのログ・レベルは、toplink.log.level
システム・プロパティを通じて設定できます。
その他のロギング・オプションを構成するには、customization-class
を使用します(9.9.1.1項「pm-propertiesの構成」を参照)。
java.util.logging
パッケージを使用する場合は、<JRE_HOME>
/lib/logging.properties
ファイルでロギング・オプションを構成します。メッセージは、この構成ファイルに基づいて0(ゼロ)の宛先や複数の宛先に書き込まれます。
java.util.logging
パッケージを使用するようにセッションを構成する場合は、次に留意してください。
例89-4のようにlogging.properties
ファイルを構成します。
例89-4 logging.propertiesでのjava.util.loggingの構成
handlers = java.util.logging.ConsoleHandler java.util.logging.ConsoleHandler.level = CONFIG java.util.logging.ConsoleHandler.formatter = oracle.toplink.logging.TopLinkSimpleFormatter oracle.toplink.LoggingSession.connection.level = CONFIG
使用可能なフォーマッタのタイプについては、89.4.6.2項「フォーマッタ」を参照してください。
TopLinkでは、TopLinkSimpleFormatter
とTopLinkXMLFormatter
の2つのフォーマッタを用意しています。この2つは、対応するjava.util.logging
フォーマッタをオーバーライドし、セッション情報や接続情報があれば必ずそれらを記録します。また、ロギング・レベルで指定されたレベルでスレッドと例外スタック・トレース情報を記録します。
java.util.logging
では、ネームスペースがサポートされています。表89-7は、TopLinkコンポーネント用にoracle.toplink.sessions.SessionLog
で定義されている静的定数と、logging.properties
内の対応する文字列を示します。
表89-7 ロギング・プロパティのファイル名
SessionLog | logging.properties |
---|---|
適用なし |
|
適用なし |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
表89-7にリストしたlogging.properties
名において、<sessionname>
はアプリケーションが稼働するセッションの名前です。たとえば、セッションの名前がMyApplication
である場合は、SQLロギング・プロパティにはoracle.toplink.MyApplication.sql
を使用します。
また、アプリケーションは、独自のネームスペースを定義し、そのネームスペースへのロギングAPIをロギング構成に定義することで、そのネームスペースにロギングAPIで書き込むこともできます。ロギングAPIがロギング構成に定義されていない場合は、メッセージは親のロギングAPI oracle.toplink.<sessionname>
に書き込まれます。
各セッションは少なくとも1つのマッピング・プロジェクトに関連付けられています(89.2項「プライマリ・マッピング・プロジェクトの構成」を参照)。セッションに追加のTopLinkマッピング・プロジェクトを関連付けることができます。
表89-8では、どのセッションが追加のマッピング・プロジェクトの構成をサポートしているかを示します。
表89-8 セッションでの追加マッピング・プロジェクトのサポート
セッション | Oracle JDeveloperの使用方法 | TopLink Workbenchを使用した複数マッピング・プロジェクトの構成方法 |
Javaを使用した複数マッピング・プロジェクトの構成方法 |
---|---|---|---|
サーバーおよびクライアント・セッション(87.3項「サーバーおよびクライアントのセッション」を参照) |
|
|
|
セッション・ブローカ・セッションおよびクライアント・セッション(第87章の「セッション・ブローカおよびクライアント・セッション」を参照) |
|
|
|
データベース・セッション(87.8項「データベース・セッション」を参照) |
|
|
セッション用に追加のTopLinkプロジェクトを指定するには、次の手順を実行します。
ナビゲータでサーバーまたはデータベース・セッションを選択します。そのプロパティがエディタに表示されます。
「一般」タブをクリックします。「一般」タブが表示されます。
「プロジェクト」サブタブをクリックします。「プロジェクト」サブタブが表示されます。
「複数のプロジェクト」オプションを選択します。「複数のプロジェクト」サブタブが表示されます。
このセッションに追加のマッピング・プロジェクトを追加するには、「追加」をクリックします。詳細は、89.2項「プライマリ・マッピング・プロジェクトの構成」を参照してください。
TopLinkのマッピング・プロジェクトを削除するには、プロジェクト・ファイルを選択して「削除」をクリックします。
Javaを使用する場合は、表89-9に示すDatabaseSession
APIを使用して、セッションに複数のプロジェクトのディスクリプタを登録できます。ディスクリプタはログイン前に登録できますが、プライマリでないプロジェクトのディスクリプタのセットはログイン後に追加できます。
TopLinkアプリケーションのパフォーマンス向上を期すには、最適化の前と後にパフォーマンスを測定する必要があります。TopLinkでは、様々な組込みのパフォーマンス測定機能(プロファイラとも呼ぶ)を備えており、これらはセッション・レベルで構成できます。
表89-10では、どのセッションがパフォーマンス・プロファイラの構成をサポートしているかを示します。
表89-10 セッションでのパフォーマンス・プロファイラ構成のサポート
セッション | Oracle JDeveloperの使用方法 | TopLink Workbenchを使用したパフォーマンス・プロファイラの構成方法 |
Javaを使用したパフォーマンス・プロファイラの構成方法 |
---|---|---|---|
サーバーおよびクライアント・セッション(87.3項「サーバーおよびクライアントのセッション」を参照) |
|
|
|
セッション・ブローカおよびクライアント・セッション(87.7項「セッション・ブローカおよびクライアント・セッション」を参照) |
|
|
|
データベース・セッション(87.8項「データベース・セッション」を参照) |
|
|
|
TopLinkには、次のプロファイラが用意されています。
TopLinkプロファイラ: 指定のセッションで実行されたすべての問合せのパフォーマンス統計を記録します(12.3項「TopLinkプロファイラを使用したTopLinkパフォーマンスの測定」を参照)。
Oracle Dynamic Monitoring System(DMS): 不可欠なオブジェクトにDMSインスツルメンテーションを組み込むことで、TopLink対応アプリケーションのランタイム・データの効率的な監視を、Webブラウザによって提供します(12.4項「Oracle Dynamic Monitoring System(DMS)を使用したTopLinkパフォーマンスの測定」を参照)。
セッションにプロファイラのタイプを指定するには、次の手順を実行します。
ナビゲータでセッションを選択します。そのプロパティがエディタに表示されます。
「オプション」タブをクリックします。「オプション」タブが表示されます。
次の情報を参照し、このセッションで使用するプロファイラのオプションを選択します。
オプション | 説明 |
---|---|
プロファイラなし | すべてのプロファイリングを無効にします。 |
DMS | Oracle Dynamic Monitoring System(DMS)によるプロファイリングを有効にします。詳細は、次を参照してください。 |
標準(TopLink) | TopLinkによるプロファイリングを有効にします。詳細は、次を参照してください。 |
Javaを使用して、Session
メソッドsetProfiler
を使用したプロファイラにより、セッションを構成できます(例89-5を参照)。
プロファイリング・セッションを終了するには、Session
メソッドclearProfiler
を使用します。
各セッションに1つの例外処理クラスを関連付けできます。このクラスは、oracle.toplink.exceptions.ExceptionHandler
インタフェースを実装する必要があります。
表89-11では、どのセッションが例外ハンドラの構成をサポートしているかを示します。
表89-11 セッションでの例外ハンドラ構成のサポート
セッション | Oracle JDeveloperの使用方法 | TopLink Workbenchを使用した例外ハンドラの構成方法 |
Javaを使用した例外ハンドラの構成方法 |
---|---|---|---|
サーバーおよびクライアント・セッション(87.3項「サーバーおよびクライアントのセッション」を参照) |
|
|
|
セッション・ブローカおよびクライアント・セッション(87.7項「セッション・ブローカおよびクライアント・セッション」を参照) |
|
|
|
データベース・セッション(87.8項「データベース・セッション」を参照) |
|
|
|
例外ハンドラ実装の例については、89.7.2項「Javaを使用した例外ハンドラの構成方法」を参照してください。
詳細は、87.2.9項「例外ハンドラ」を参照してください。
セッションに例外ハンドラ・クラスを指定するには、次の手順を実行します。
ナビゲータでセッションを選択します。そのプロパティがエディタに表示されます。
「オプション」タブをクリックします。「オプション」タブが表示されます。
「例外ハンドラ」フィールドを指定します。
「参照」をクリックし、このセッションに対して例外ハンドラ・クラスを選択します。
例89-6は、例外ハンドラの実装例を示します。この実装では、例外ハンドラは、接続がピアによってリセットされた場合は必ず接続を再確立しようとしますが、問合せがReadQuery
のインスタンスである場合はその問合せを再試行するのみです。この例外ハンドラは、再実行されたReadQuery
の結果を返すか、例外をスローします。
session.setExceptionHandler( new ExceptionHandler() { public Object handleException(RuntimeException exception) { if (exception instanceof DatabaseException) { DatabaseException dbex = (DatabaseException) exception; if ((dbex.getInternalException() instanceof SQLException) && (((SQLException) dbex.getInternalException()).getErrorCode() == MyDriver.CONNECTION_RESET_BY_PEER)) { dbex.getAccessor().reestablishConnection(dbex.getSession()); if (dbex.getQuery() instanceof ReadQuery) { return dbex.getSession().executeQuery(dbex.getQuery(), dbex.getQuery().getTranslationRow()); } throw exception; } } throw exception; } } );
注意: 未処理例外は、例外ハンドラ・コードにより新たにスローする必要があります。 |
セッション・カスタマイザ・クラスはJavaクラスで、oracle.toplink.tools.sessionconfiguration.SessionCustomizer
インタフェースを実装し、デフォルト(ゼロ引数)コンストラクタを備えています。セッション・カスタマイザを使用すると、ログインが行われる前にロード済だったセッションに基づいて、別のセッションを実行時にカスタマイズできます。その方法は修正メソッドを使用してディスクリプタをカスタマイズする方法と似ています(119.35項「修正メソッドの構成」を参照)。たとえば、セッション・カスタマイザ・クラスを使用すると、セッション・イベント・リスナーを定義してセッション・イベント・マネージャに登録できます(89.10項「セッション・イベント・リスナーの構成」を参照)。
表89-12では、どのセッションがカスタマイザ・クラスの構成をサポートしているかを示します。
表89-12 セッションでのカスタマイザ・クラス構成のサポート
セッション | Oracle JDeveloperの使用方法 | TopLink Workbenchを使用したカスタマイザ・クラスの構成方法 |
Javaの使用方法 |
---|---|---|---|
サーバーおよびクライアント・セッション(87.3項「サーバーおよびクライアントのセッション」を参照) |
|
|
|
セッション・ブローカおよびクライアント・セッション(87.7項「セッション・ブローカおよびクライアント・セッション」を参照) |
|
|
|
データベース・セッション(87.8項「データベース・セッション」を参照) |
|
|
|
詳細は、87.2.3項「セッションのカスタマイズ」を参照してください。
セッションにセッション・カスタマイザ・クラスを指定するには、次の手順を実行します。
ナビゲータでセッションを選択します。そのプロパティがエディタに表示されます。
「オプション」タブをクリックします。「オプション」タブが表示されます。
「参照」をクリックし、このセッションに対してカスタマイザ・クラスを選択します。
Javaを使用する場合は、oracle.toplink.tools.sessionconfiguration.SessionCustomizer
インタフェースを実装するカスタマイザ・クラスを作成します。例89-7は、セッション・カスタマイザの作成を示します。customize
メソッドには、Session
が所有するLogin
の構成と、適切なトランザクション分離が含まれます。
例89-7 SessionCustomizerクラスの作成
import oracle.toplink.tools.sessionconfiguration.SessionCustomizer; import oracle.toplink.sessions.Session; import oracle.toplink.sessions.DatabaseLogin; public class EmployeeSessionCustomizer implements SessionCustomizer { public void customize(Sesssion session) { DatabaseLogin login = (DatabaseLogin)session.getDatasourceLogin(); login.setTransactionIsolation(DatabaseLogin.TRANSACTION_READ_UNCOMMITTED); } }
TopLinkサーバー・プラットフォームでは、セッションとJava EEサーバーをどのように統合するか、その方法を定義します。方法には次のものがあります。
ランタイム・サービス: TopLinkセッションの監視を可能にするJava Management Extensions(JMX)MBeanのデプロイを有効にします。
外部トランザクション・コントローラ: TopLinkセッションをサーバーのJava Transaction API(JTA)サービスと統合します。EJBまたはJTAトランザクションを使用する場合は、常にこれを使用する必要があります。TopLinkの外部トランザクション・コントローラを指定することで、コンテナの外部トランザクション・サービスと統合するように、TopLinkを構成します。外部トランザクション・サービスの詳細は、113.1.2項「作業ユニット・トランザクション境界」を参照してください。
表89-13では、どのセッションがサーバー・プラットフォームをサポートしているかを示します。
表89-13 セッションでのサーバー・プラットフォームのサポート
セッション | Oracle JDeveloperの使用方法 | TopLink Workbenchを使用したサーバー・プラットフォームの構成方法 |
Javaを使用したサーバー・プラットフォームの構成方法 |
---|---|---|---|
サーバーおよびクライアント・セッション(87.3項「サーバーおよびクライアントのセッション」を参照) |
|
|
|
セッション・ブローカおよびクライアント・セッション(87.7項「セッション・ブローカおよびクライアント・セッション」を参照) |
|
|
|
データベース・セッション(87.8項「データベース・セッション」を参照) |
|
|
|
セッションと関連付けたプライマリ・マッピング・プロジェクトに、永続性タイプとしてBean管理の永続性(BMP)またはJavaオブジェクトのいずれかのデータがある場合は、Oracle JDeveloperまたはTopLink Workbenchを使用してサーバー・プラットフォームを構成できます。プライマリ・マッピング・プロジェクトの詳細は、89.2項「プライマリ・マッピング・プロジェクトの構成」を参照してください。
セッションと関連付けたプライマリ・マッピング・プロジェクトに、コンテナ管理の永続性(CMP)の永続性タイプを持つデータがある場合、TopLinkランタイムでは、デフォルトで、デプロイ先のアプリケーション・サーバーに対応するように自動的にサーバー・プラットフォームが構成されます。
セッションにサーバー・プラットフォームのオプションを指定するには、次の手順を実行します。
ナビゲータでセッションを選択します。そのプロパティがエディタに表示されます。
「一般」タブをクリックします。「一般」タブが表示されます。
「サーバー・プラットフォーム」サブタブをクリックします。「サーバー・プラットフォーム」サブタブが表示されます。
次の情報を参照し、「サーバー・プラットフォーム」サブタブの各フィールドにデータを入力します。
フィールド | 説明 |
---|---|
サーバー・プラットフォーム | アプリケーションをJava EEアプリケーション・サーバーにデプロイする場合、このフィールドを選択します。
このフィールドを選択した場合、「プラットフォーム」を選択してターゲット・アプリケーション・サーバーを構成する必要があります。 |
プラットフォーム | アプリケーションのデプロイ先となるJava EEアプリケーション・サーバーを選択します。
TopLinkでは、次のJava EEアプリケーション・サーバーがサポートされます。
サポートされるアプリケーション・サーバーのバージョン、構成要件の詳細は、第8章「TopLinkとアプリケーション・サーバーの統合」を参照してください。 独自の 選択されたサーバー・プラットフォームは、セッション構成レベルで設定されたデフォルトのサーバー・プラットフォームをオーバーライドします(88.2項「セッション構成の作成」を参照)。 |
ランタイム・サービスを有効にする | このフィールドを選択すると、TopLinkセッションの監視を可能にするJMX-MBeanのデプロイを有効にするようにTopLinkランタイムが構成されます。
この機能を使用するには、DMSデータ収集を有効にする必要があります。詳細は、12.4.1項「Oracle DMSプロファイラの構成方法」を参照してください。 |
外部トランザクション・コントローラを有効にする(JTA) | アプリケーションと外部トランザクション・コントローラを統合するには、このフィールドを選択します。詳細は、113.1.2項「作業ユニット・トランザクション境界」を参照してください。
TopLinkでサポートされているJava EEアプリケーション・サーバーを「プラットフォーム」に構成した場合は、必要な外部トランザクション・コントローラ・クラスが自動的に選択されます。 「プラットフォーム」を「カスタム」に構成した場合は、「外部トランザクション・コントローラを有効にする(JTA)」を選択してトランザクション・コントローラ・クラスを指定する必要があります。 |
サーバー・プラットフォーム・クラス | このオプションは、「プラットフォーム」を「カスタム」に構成した場合にのみ使用可能になります。
カスタム |
トランザクション・コントローラ・クラス(JTA) | このオプションは、「プラットフォーム」を「カスタム」に構成した場合にのみ使用可能になります。
「外部トランザクション・コントローラを有効にする(JTA)」を選択した場合は、「参照」をクリックして、カスタム |
Javaを使用する場合は、セッションをサーバー・プラットフォーム・コンストラクタに渡す必要があります。例89-8は、セッション・カスタマイザを使用して、oracle.toplink.platform.server
パッケージに含まれるサーバー・プラットフォームでセッションを構成する例を示します(13.4項「セッション・カスタマイザ・クラスの使用」を参照)。
例89-8 サーバー・プラットフォームでのセッションの構成
import oracle.toplink.tools.sessionconfiguration.SessionCustomizer; ... public class MySessionCustomizer implements SessionCustomizer { public void customize (Session session) { Server server = (Server)session; server.setServerPlatform(new WebLogic_10_Platform(DatabaseSession)server)): } }
セッションで永続性操作を実行すると、セッションでは様々なイベントが生成されます(87.2.5.1項「セッション・イベント・マネージャのイベント」を参照)。TopLinkランタイムではその各種コンポーネント間の調整を行うため、これらのイベントを使用します。1つ以上のセッション・イベント・リスナー(87.2.5.2項「セッション・イベント・リスナー」を参照)でセッションを構成することで、セッションの動作をカスタマイズしたりセッションの操作をデバッグできます。たとえば、セッション・イベント・リスナーは、独立セッションの構成で重要な役割を果します(第92章「Virtual Private Database用の排他独立クライアント・セッションの構成」を参照)。
表89-14では、どのセッションがイベント・リスナーをサポートしているかを示します。
表89-14 セッションでのイベント・リスナーのサポート
セッション | Oracle JDeveloperの使用方法 | TopLink Workbenchを使用したセッション・イベント・リスナーの構成方法 |
Javaを使用したセッション・イベント・リスナーの構成方法 |
---|---|---|---|
サーバーおよびクライアント・セッション(87.3項「サーバーおよびクライアントのセッション」を参照) |
|
|
|
セッション・ブローカおよびクライアント・セッション(87.7項「セッション・ブローカおよびクライアント・セッション」を参照) |
|
|
|
データベース・セッション(87.8項「データベース・セッション」を参照) |
|
|
|
セッション・イベント・リスナー
セッションにイベント・リスナーを指定するには、次の手順を実行します。
ナビゲータでセッションを選択します。そのプロパティがエディタに表示されます。
「オプション」タブをクリックします。「オプション」タブが表示されます。
新しいイベント・リスナーを追加するには、「追加」をクリックして、このセッション用のイベント・リスナー・クラスを選択します。
既存のイベント・リスナーを削除するには、「イベント・リスナー」から選択して「削除」をクリックします。
例89-9は、Javaを使用してセッション・イベント・リスナーをセッションに登録する方法を示します。TopLinkには、SessionEventListener
を簡単に作成できるSessionEventAdapter
が用意されています。SessionEventAdapter
には、SessionEventListener
インタフェースのすべてのメソッドのデフォルトの実装が搭載されています。使用する特定のメソッドをオーバーライドするだけで済みます。通常は、セッション・イベント・リスナーは、セッション・カスタマイザ・クラスに定義します(89.8項「セッション・カスタマイザ・クラスの構成」を参照)。
例89-9 セッション・イベント・アダプタを使用したセッション・イベント・リスナーの作成
... SessionEventAdapter myEventListener = new SessionEventAdapter() { // Listen for PostCommitUnitOfWork events public void postCommitUnitOfWork(SessionEvent event) { // Call the handler routine unitOfWorkCommitted(); } }; mySession.getEventManager().addListener(myEventListener); ...
リスナーにロギングを追加する方法の詳細は、87.2.6項「ロギング」を参照してください。
セッションにログインすると、TopLinkでは登録されたディスクリプタを初期化して検証します。整合性チェッカを構成することにより、この検証プロセスをカスタマイズして次の処理が実行されるようにすることができます。
表89-15では、どのセッションがディスクリプタの整合性チェック構成をサポートしているかを示します。
表89-15 セッションでのディスクリプタの整合性チェックのサポート
セッション | Oracle JDeveloperの使用方法 | TopLink Workbenchの使用方法 | Javaを使用した整合性チェッカの構成方法 |
---|---|---|---|
サーバーおよびクライアント・セッション(87.3項「サーバーおよびクライアントのセッション」を参照) |
|
||
セッション・ブローカおよびクライアント・セッション(87.7項「セッション・ブローカおよびクライアント・セッション」を参照) |
|
||
データベース・セッション(87.8項「データベース・セッション」を参照) |
|
データベースのチェック
IntegrityChecker
メソッドsetShouldCheckDatabase
は、整合性チェッカがディスクリプタのメタデータをデータベースのメタデータと照合するかどうかを指定します。これにより、ディスクリプタに指定されている表やフィールドの欠落または不正によるエラーがあれば報告されます。このチェックがセッションの接続時に大きなオーバーヘッドとなる場合には、このチェックはデフォルトでオフになります。
すべての例外を捕捉
デフォルトでは、整合性チェッカは初期化中に発生した例外をすべて捕捉し、初期化の終了時には、検出されたエラーのすべてを報告する単一の例外をスローします。最初の例外の検出のみが必要な場合は、IntegrityChecker
メソッドsetShouldCatchExceptions(false)
を使用してこの機能を無効にできます。
インスタンス化ポリシー例外を捕捉
デフォルトでは、整合性チェッカは、セッションで初期化された各ディスクリプタに対して、デフォルトまたは構成済のコンストラクタをテストします。この機能を無効にするには、IntegrityChecker
メソッドsetShouldCheckInstantiationPolicy(false)
を使用します。
例89-10に示すように、整合性チェッカの検証プロセスを構成できます。
接続ポリシーを使用すると、TopLinkセッションでどのように読取りおよび書込み接続を取得して使用するかを制御できます。内容は次のとおりです。
表89-16では、どのセッションが接続ポリシーの構成をサポートしているかを示します。
表89-16 セッションでの接続ポリシーのサポート
セッション | Oracle JDeveloperの使用方法 | TopLink Workbenchを使用した接続ポリシーの構成方法 |
Javaを使用した接続ポリシーの構成方法 |
---|---|---|---|
サーバーおよびクライアント・セッション(87.3項「サーバーおよびクライアントのセッション」を参照) |
|
|
|
セッション・ブローカおよびクライアント・セッション(87.7項「セッション・ブローカおよびクライアント・セッション」を参照) |
|||
データベース・セッション(87.8項「データベース・セッション」を参照) |
排他書込み接続
排他接続は、クライアント・セッションのライフ・サイクル中に(分離データの)読取りと書込みを実行するためにTopLinkがクライアント・セッションに割り当てる接続です。
デフォルトでは、排他接続は使用されず、クライアント・セッションではすべての非ペシミスティック読取り問合せに対してサーバー・セッションの読取り接続プールが使用されます。接続は、読取り問合せの実行ごとに読取り接続プールから取得され、問合せの実行後にプールに戻されます。接続が書込み接続プールから取得されるのは、作業ユニットのコミット操作時のみです(または、データ変更問合せやペシミスティック・ロックを使用した読取り問合せが使用される場合には、より早く取得される可能性もあります)。作業ユニットがコミットまたは解放されると、接続は書込み接続プールに戻されます。排他接続は、データベース読取りセキュリティまたはVirtual Private Database(VPD)サポートと組み合せて使用する目的で提供されています。排他接続を使用する場合は、サーバー・セッションの書込み接続プールから排他接続を取得します。クライアント・セッションを取得する場合、排他接続は、独立クラスに対する読取り問合せ(87.5項「独立クライアント・セッション」を参照)、排他読取り問合せ、ペシミスティック読取り問合せ、および作業ユニットのコミット操作に使用されます。排他接続は、クライアント・セッションが解放された場合にのみ解放されます。TopLinkでは、非分離データの読取りについては引き続き読取り接続プールから共有接続を取得します。JTA管理の外部接続プールと排他接続を組み合せて使用する場合は、JTAトランザクション境界にまたがってクライアント・セッションを再利用しないでください。物理JTAデータベース接続は、JTAトランザクション・ライフ・サイクルを基準として接続プールから取得および解放されるためです。JTAトランザクションごとに、新規クライアント・セッション(アクティブな作業ユニット)を使用する必要があります。詳細は、101.6項「排他読取り接続の構成」を参照してください。
また、排他接続の構成は、クライアント・セッションごと(90.4.2項「排他接続を使用するクライアント・セッションの取得方法」を参照)や名前付き問合せに対して(119.7.1.10項「名前付き問合せの詳細オプションの構成」を参照)行うこともできます。
注意: クライアント・セッションに排他接続が含まれる場合は、その使用を完了した後、セッションを解放する必要があります(90.8項「セッションからのログアウト」を参照)。セッションのガベージ・コレクション時、ファイナライザに依存して接続を解放することのないようにしてください。JTAトランザクション内で作業ユニットを使用する場合、クライアント・セッションを解放する必要はありません。JTAトランザクションの完了後に、作業ユニットによって解放されるためです。 |
遅延接続の取得
クライアント・セッションで最初の作業ユニット・コミット操作、排他読取り問合せまたはペシミスティック読取り問合せを実行する際に、TopLinkではデフォルトで、書込み接続が遅延して取得されます。各作業ユニットがコミットまたは解放されると、書込み接続も解放されます。
別の方法として、クライアント・セッションの取得時に書込み接続を取得し、クライアント・セッションの解放時にその接続を解放するようTopLinkを構成できます。
あるいは、クライアント・セッションごとに遅延接続の取得を構成することもできます(90.4.5項「遅延接続割当てを使用しないクライアント・セッションの取得方法」を参照)。
セッションに接続ポリシーを指定するには、次の手順を実行します。
ナビゲータでセッションを選択します。そのプロパティがエディタに表示されます。
「接続ポリシー」タブをクリックします。「接続ポリシー」タブが表示されます。
排他接続を特定の独立セッションに割り当てるかどうかを構成するには、ConnectionPolicy
メソッドsetShouldUseExclusiveConnection
を使用します。
独立セッションのサポートに使用するプロパティのマップを定義するには、ConnectionPolicy
の次のメソッドを使用します。
setProperty(Object key, Object value)
: プロパティvalue
をkey
の名前でマップに追加します。マップにkey
がすでに存在する場合は、既存の値を上書きします。
Object getProperty(Object key)
: key
の値をObject
として返します。
boolean hasProperties
: マップに1つ以上のプロパティが存在する場合は、true
を返します。そうでない場合はfalseを返します。
TopLinkランタイムではこのマップをSessionEvent
イベントのPostAcquireExclusiveConnection
およびPreReleaseExclusiveConnection
に渡すため、実装では、基盤となるデータベース・プラットフォームへの適切なPL/SQLコールを行うことができます(92.2項「PostAcquireExclusiveConnectionイベント・ハンドラの使用」および92.3項「PreReleaseExclusiveConnectionイベント・ハンドラの使用」を参照)。
名前付き接続プールを使用するようにセッションを構成するには、引数としてString
接続プール名をとるConnectionPool
コンストラクタを使用します。
Session clientSession = server.acquireClientSession( new ConnectionPolicy("myConnectionPool") );
名前付き問合せとは、後から取得および実行できるように名前を付けて作成し、セッション内に格納する、TopLinkの問合せの一種です。名前付き問合せは、一度作成すると、基礎となる関連オブジェクトすべてとともに後で効率的に再利用できるため、頻繁に実行される操作に適しており、アプリケーションのパフォーマンスを向上させることができます。
プロジェクトにおいてグローバルな名前付き問合せは、セッション・レベルで構成します。または、名前付き問合せはディスクリプタ・レベルで構成することもできます(119.7項「ディスクリプタ・レベルでの名前付き問合せの構成」を参照)。
名前付き問合せでSQL、EJB QLまたはTopLinkの式問合せを指定して、データ・ソースにアクセスします。
表89-17では、どのセッションが名前付き問合せ構成をサポートしているかを示します。
表89-17 セッションでの名前付き問合せのサポート
セッション | Oracle JDeveloperの使用方法 | TopLink Workbenchの使用方法 | Javaを使用したセッション・レベルでの名前付き問合せの構成方法 |
---|---|---|---|
サーバーおよびクライアント・セッション(87.3項「サーバーおよびクライアントのセッション」を参照) |
|
||
セッション・ブローカおよびクライアント・セッション(87.7項「セッション・ブローカおよびクライアント・セッション」を参照) |
|
||
データベース・セッション(87.8項「データベース・セッション」を参照) |
|
作成した名前付き問合せは、後からTopLinkセッションで名前を指定して実行できます(109.3項「名前付き問合せの使用」を参照)。
名前付き問合せの詳細は、108.8項「名前付き問合せ」を参照してください。
名前付き問合せをセッションに格納するには、Session
メソッドaddQuery(String name, DatabaseQuery query)
を使用します。