セッションの最も重要な機能の1つは、データ・ソースへのアクセスを提供することです。この章では、データ・ソースへのアクセスに固有のセッション・コンポーネントについて説明します。
この章の内容は次のとおりです。
この項では、次のようなTopLinkのデータ・アクセスに特有の概念について説明します。
TopLinkトランザクション・データ・ソースは、接続プールがトランザクション・サービス(アプリケーション・サーバーによって制御されるトランザクションやJTAトランザクションなど)によって管理される場合、外部管理されます。JTA管理のデータ・ソースまたは接続プールは、一般的にJava EEアプリケーションで使用され、通常はEJBアプリケーションで必要になります。外部管理の接続プールは、次のように使用します。
TopLinkの作業ユニットを外部トランザクション・サービスと統合するためにExternalTransactionController
を使用するようにセッションを構成します(115.13項「作業ユニットと外部トランザクション・サービスの統合」を参照)。
external-transaction-control
オプションを使用して接続のログインを指定し、接続が外部コントローラによって管理されていることをTopLinkに通知します(97.4項「外部接続プーリングの構成」を参照)。
トランザクションのオーバーヘッドを回避するために、JTA以外の接続プールを使用するようにTopLinkの読取り接続プールまたはシーケンス接続プールを構成する必要がある場合があります(96.1.6.3項「デフォルト(書込み)および読取り接続プール」を参照)。
トランザクション・データ・ソースの詳細は、次を参照してください。
TopLinkトランザクションの詳細は、第113章「TopLinkトランザクションの概要」を参照してください。
セッションに関連付けられたログイン(存在する場合)により、TopLinkランタイムがプロジェクトのデータ・ソースに接続する方法が決まります。
ログインには、認証、接続プールの使用、および外部トランザクション・コントローラの使用などのデータ・ソース・アクセスの詳細が含まれます。Login
は、データ・ソース・プラットフォームを所有します。
データ・ソース・プラットフォームには、バインディング、ネイティブSQLの使用、バッチ書込みの使用、順序付けなどの特定のデータ・ソースに固有のオプションが含まれます。プラットフォームの詳細は、96.1.3項「データ・ソース・プラットフォームのタイプ」を参照してください。
データ・ソースに永続化しないプロジェクトの場合、ログインは必要ありません。データ・ソースに永続化するプロジェクトの場合、ログインは常に必要です。
TopLink Workbenchでは、プロジェクト・タイプに応じて、プロジェクトで使用されるログインのタイプが決まります。
ログインは様々なロールで使用できます。ログインのロールにより、ログインを作成する場所と方法が決まります。選択するログインのロールは、作成対象のプロジェクトのタイプやログインの使用目的によって次のように異なります。
データ・ソースに永続化するプロジェクト・タイプごとに、独立したセッション・ログイン・タイプがあります。次にそのタイプを示します。
XMLログインは存在しません。TopLink XMLプロジェクトはXMLデータ・トランスフォーメーションに対する非永続的なインメモリー・オブジェクト用として使用されるため、ログインするデータ・ソースは存在しません。永続プロジェクトと非永続プロジェクトの詳細は、15.2.3項「永続および非永続プロジェクト」を参照してください。
詳細は、次を参照してください。
リレーショナル・データベースにアクセスするプロジェクトを作成する場合、DatabaseLogin
を使用してプロジェクトを構成する必要があります。DatabasePlatform
を選択することにより、特定のタイプのデータベースについてプロジェクトをさらにカスタマイズできます(96.1.3.1項「データベース・プラットフォーム」を参照)。
詳細は、98.1項「データベース・ログイン構成の概要」を参照してください。
JCAアダプタを使用して非リレーショナル・データ・ソースにアクセスするプロジェクトを作成する場合、EISLogin
を使用してプロジェクトを構成する必要があります。EISPlatform
を選択することにより、特定のJCAアダプタについてプロジェクトをさらにカスタマイズし、TopLinkがEISとデータを交換するために使用するレコード・タイプを指定できます(96.1.3.2項「EISプラットフォーム」を参照)。
詳細は、99.1項「EISログイン構成の概要」を参照してください。
TopLinkは、データ・ソース・プラットフォームのクラスを使用して基礎となるデータ・ソースの詳細を抽出します。TopLinkには、次のデータ・ソース・プラットフォームがあります。
データ・ソース・プラットフォームは、プロジェクトのLogin
によって所有されます。ログインの詳細は、96.1.2項「データ・ソース・ログインのタイプ」を参照してください。
プラットフォームの多くのオプションを構成するには、修正メソッド(119.35項「修正メソッドの構成」を参照)、またはpreLogin
イベント・リスナー(87.2.5項「セッション・イベント・マネージャによるセッション・イベントの管理」を参照)を使用する必要があります。
TopLinkでは、Structured Query Language(SQL)を使用してデータベースと対話します。各データベース・プラットフォームでは、基本SQL言語の独自のバリエーションが使用されるため、TopLinkでは、データベースとの通信に使用するSQLを調整し、アプリケーションが円滑に実行されるようにする必要があります。
選択するデータベース・プラットフォームのタイプにより、TopLinkランタイムがデータベースにアクセスする特定の方法が決まります。これには、使用するJava Database Connectivity(JDBC)ドライバのタイプも含まれます。JDBCは、Javaアプリケーションにデータベースへのアクセスを提供するAPIです。TopLinkリレーショナル・プロジェクトは、JDBC接続に依存してデータベースに対するオブジェクトの読取りおよび書込みを行います。TopLinkアプリケーションでは、アプリケーション・アーキテクチャに基づき、個別JDBC接続またはJDBC接続プール(96.1.6項「接続プール」を参照)のいずれかを使用します。
TopLinkには、ターゲット・データベースに応じてプロジェクトをカスタマイズするために様々なデータベース固有のプラットフォームが用意されています。
Oracleデータベース・プラットフォームはoracle.toplink.platform.database.oracle
パッケージにあり、これには次が含まれます。
Oracle8Platform
Oracle9Platform
Oracle10Platform
Oracle11Platform
非Oracleデータベース・プラットフォームはoracle.toplink.platform.database
パッケージにあり、これには次が含まれます。
AccessPlatform
(Microsoft Accessデータベース用)
AttunityPlatform
(Attunity Connect JDBCドライバ用)
CloudscapePlatform
DB2MainframePlatform
DB2Platform
DBasePlatform
DerbyPlatform
HSQLPlatform
InformixPlatform
JavaDBPlatform
MySQL4Platform
PointBasePlatform
PostgreSQLPlatform
SQLAnyWherePlatform
SQLServerPlatform
SybasePlatform
TimesTen7Platform(TimesTen 7データベース用)
すべてのセッションについて、データベース・プラットフォームをプロジェクト・レベル(20.2項「プロジェクト・レベルでのリレーショナル・データベース・プラットフォームの構成」を参照)で指定します。または、このプロジェクト・レベル構成をセッション・レベル(98.2項「セッション・レベルでのリレーショナル・データベース・プラットフォームの構成」を参照)でオーバーライドします。
データベース・プラットフォームをTopLink Workbenchで設定すると、TopLink Workbenchにより、データベース・プラットフォームの構成が自動的に管理されます。
TopLinkは、JCAアダプタを使用してEISデータ・ソースと間接的に対話します。TopLinkは、oracle.toplink.eis.EISPlatform
クラスを使用してEISデータ・ソースの詳細を抽出します。
選択するEISプラットフォームのタイプにより、TopLinkランタイムがEISにアクセスする特定の方法が決まります。これには、使用するJCAアダプタのタイプも含まれます。TopLink EISプロジェクトは、EIS接続に依存してEISに対するオブジェクトの読取りおよび書込みを行います。TopLinkアプリケーションは、EISプラットフォームによって指定されたEISコネクション・ファクトリから返される個々のEIS接続を使用します。
TopLinkには、ターゲットEISに応じてプロジェクトをカスタマイズするために様々なEISPlaform
クラスが用意されています。
本番用のEISプラットフォームはoracle.toplink.eis.adapters
パッケージにあり、これには次が含まれます。
oracle.toplink.eis.adapters.aq.AQPlatform
(Oracle Advanced Queuingメッセージを使用したEISへのアクセス用)
oracle.toplink.eis.adapters.attunity.AttunityPlatform
(Attunity JCAアダプタを使用したEISへのアクセス用)
oracle.toplink.eis.adapters.jms.JMSPlatform
(JMSメッセージを使用したEISへのアクセス用)
oracle.toplink.eis.adapters.mqseries.MQPlatform
(IBM MQSeriesメッセージを使用したEISへのアクセス用)
テスト用のEISプラットフォームもoracle.toplink.eis.adapters
にあり、これには次が含まれます。
oracle.toplink.eis.adapters.blackbox.BlackBoxPlatform
(索引付きレコードのみを使用したSun BlackBox参照アダプタによるEISプロジェクトのテスト用)
oracle.toplink.eis.adapters.xmlfile.XMLFilePlatform
(XMLレコードを使用してローカル・ファイルシステムでEISを1つ以上のXMLファイルとしてエミュレートしたEISプロジェクトのテスト用)
EISプラットフォームは、セッション・レベルで指定します(99.2項「セッション・レベルでのEISデータ・ソース・プラットフォームの構成」を参照)。
プラットフォームをTopLink Workbenchで設定すると、TopLink Workbenchにより、EISプラットフォームの構成が自動的に管理されます。
認証は、データ・ソースがユーザーのアイデンティティを検証し、そのユーザーに特定のアクションを実行するために十分な権限があるかどうかを確認するための手段です。
通常、2層アプリケーションの場合は、単純なJDBC認証で十分です(96.1.4.1項「単純なJDBC認証」を参照)。
3層アプリケーションの場合は、単純なJDBC認証を使用できますが、Oracle Call Interface(OCI)JDBCドライバを使用する場合はプロキシ認証を使用できます(96.1.4.2項「Oracleデータベースのプロキシ認証」を参照)。
認証は、データ・セキュリティ、ユーザーのアカウンタビリティおよび監査において中心的な役割を果します(96.1.4.3項「監査」を参照)。
ユーザー名およびパスワードを使用してTopLinkデータベース・ログインを構成すると(97.2項「ユーザー名およびパスワードの構成」を参照)、アプリケーションで使用されるよう構成するJDBCドライバにこれらの資格証明が提供されます(98.3項「データベース・ログインの接続オプションの構成」を参照)。
デフォルトでは、JCE暗号化を使用した暗号形式でsessions.xml
ファイルに対してパスワードの書込みおよび読取りが行われます。必要な場合、別の暗号化クラスを構成できます(97.3項「パスワード暗号化の構成」を参照)。
TopLinkは、Oracle JDBCドライバ・リリース10.1.0.2.0以上および外部接続プールとともにOC4Jネイティブまたは管理データ・ソースを使用したJSEアプリケーションおよびJEEアプリケーションのOracleデータベースでのプロキシ認証のみをサポートしています(96.1.6.2項「外部接続プール」を参照)。
注意: TopLinkでは、JTAによるOracleデータベースのプロキシ認証はサポートしていません。 |
Oracleデータベースのプロキシ認証には、次のようなセキュリティ上の利点があります。
中間層が代理として接続可能なユーザーや、中間層がユーザーから引き受けるロールの制御による、制限付きの信頼モデル
Oracle Call Interface(OCI)およびシックJDBCを介したユーザー・セッションのサポートや、クライアント再認証のオーバーヘッドの解消による、スケーラビリティ
データベースを介した実際のユーザーのアイデンティティの保持や、実際のユーザーのかわりに実行されるアクションの監査の有効化による、アカウンタビリティ
ユーザーがデータベースに把握される環境や、ユーザーがデータベースに認識されない単なるアプリケーション・ユーザーにすぎない環境のサポートによる、柔軟性
注意: Oracleデータベースは、3層でのプロキシ認証のみをサポートしています。複数の中間層間におけるプロキシ認証はサポートしていません。 |
Oracleデータベースでの認証の詳細は、『Oracle Databaseセキュリティ・ガイド』の多層環境でのユーザー・アイデンティティの保持に関する項を参照してください。
次を実行するために、プロキシ認証を使用するようにTopLinkデータベース・ログインを構成します(98.8項「Oracleデータベースのプロキシ認証の構成」を参照)。
3層アーキテクチャでの複雑な認証に対応する(クライアント対中間層および中間層対データベースの認証、中間層を介したデータベースへのクライアントの再認証など)。
汎用プール・ユーザーではなくデータベース操作用の特定のユーザーを使用して、データベースの(トリガーおよびストアド・プロシージャに関するものを含む)監査情報を向上させる。
ストアド・プロシージャを使用してセッション・コンテキストでユーザー情報を直接設定するのではなく、プロキシ・ユーザーを使用してVPD/OLS構成を簡略化する(87.5.1項「独立クライアント・セッションとOracle Virtual Private Database(VPD)」を参照)。
選択する認証のタイプとは関係なく、すべてのデータベース操作に関連するユーザーの名前がログに記録されます。例96-1は、CONFIG
レベルのTopLinkログを示し、ServerSession
がサンプル・ユーザーscottのメイン接続を介して接続し、ClientSession
がプロキシ接続jeffを使用しています。
例96-1 Oracleデータベースのプロキシ認証のTopLinkログ
[TopLink Config]--ServerSession(13)--Connection(14)--Thread(Thread[main,5,main]) --connecting(DatabaseLogin( platform=>Oracle9Platform user name=> "scott" connector=>OracleJDBC10_1_0_2ProxyConnector datasource name=>DS)) [TopLink Config]--ServerSession(13)--Connection(34)--Thread(Thread[main,5,main]) --Connected: jdbc:oracle:thin:@localhost:1521:orcl User: SCOTT [TopLink Config]--ClientSession(53)--Connection(54)--Thread(Thread[main,5,main]) --connecting(DatabaseLogin(platform=>Oracle9Platform user name=> "scott" connector=>OracleJDBC10_1_0_2ProxyConnector datasource name=>DS)) [TopLink Config]--ClientSession(53)--Connection(56)--Thread(Thread[main,5,main]) --Connected: jdbc:oracle:thin:@localhost:1521:orcl User: jeff
TopLinkのログ・レベルおよびログ・オプションの構成の詳細は、89.4項「ロギングの構成」を参照してください。
データベース・サーバーによっては、別のユーザー監査オプションが用意されている場合があります。詳細は、データベース・サーバーのドキュメントを参照してください。
また、監査を目的としてデータベース・スキーマとともにTopLinkの作業ユニットの使用を検討できる場合があります(115.12項「作業ユニットを使用したユーザーおよび日付監査の実装」を参照)。
接続は、アプリケーションで使用されるよう構成したドライバを介して、データ・ソースへのアクセスを提供するオブジェクトです(98.3項「データベース・ログインの接続オプションの構成」を参照)。リレーショナル・プロジェクトは、JDBCを使用してデータ・ソースに接続します。EISおよびXMLプロジェクトはJCAを使用します。TopLinkはインタフェースoracle.toplink.internal.databaseaccess.Accessor
を使用して、データ・ソース接続をラップします。このインタフェースには特定のイベントからアクセスできます(16.2.8項「ディスクリプタ・イベント・マネージャ」を参照)。
通常、サーバー・セッションを使用する場合、TopLinkは、読取りと書込みの両方に対して異なる接続を使用します。このため、読取りには非トランザクション接続を使用し、必要ない場合は接続を維持しないようにできます。詳細は、115.15.1.4項「書込み接続による読取り」および「排他書込み接続」を参照してください。
デフォルトでは、TopLinkサーバー・セッションは、必要な場合にのみ接続を取得します。つまり、作業ユニットのコミット操作時にのみ取得します。また、クライアント・セッションの取得時にTopLinkが書込み接続を取得するように構成することもできます(「遅延接続の取得」を参照)。
接続は、内部または外部接続プールから割り当てることができます(96.1.6項「接続プール」を参照)。
接続プールは、1つ以上のクライアントのかわりにデータ・ソース接続の共有コレクション(プール)を作成および保持するサービスです。接続プールは、リクエストに基づいてプロセスに接続を提供し、プロセスが接続の使用を終了すると、接続をプールに返します。接続は、プールに返されると、他のプロセスで使用できます。データ・ソースへの接続の確立には時間がかかるため、接続プールのこのような接続を再使用してパフォーマンスを向上できます。
TopLinkは、接続プールを使用して、サーバーおよびクライアント・セッションで使用される接続を管理および共有します。この機能により、必要な接続数が減り、アプリケーションで多くのクライアントをサポートできるようになります。
TopLinkで提供される内部接続プール、またはJDBCドライバまたはJava EEコンテナで提供される外部接続プールを使用するようにセッションを構成できます。
TopLinkアプリケーションの接続プールは、読取り、書込み、順序付け、およびその他のアプリケーション固有の機能などの様々な目的に使用できます。
この項の内容は次のとおりです。
非Java EEアプリケーションの場合は通常、内部接続プールを使用します。デフォルトでは、TopLinkセッションは内部接続プールを使用します。
内部接続プールを使用することにより、TopLink Workbenchを使用して、デフォルト(書込み)および読取り接続プールを構成できます(96.1.6.3項「デフォルト(書込み)および読取り接続プール」を参照)。また、オブジェクト・アイデンティティ(96.1.6.4項「シーケンス接続プール」を参照)またはその他の目的(96.1.6.5項「アプリケーション固有の接続プール」を参照)用として追加の接続プールも作成できます。
内部接続プールを使用して、表示のみを目的としてデータを読み取るアプリケーションや、ごくまれにデータを変更するアプリケーション用の読取り接続の作成を最適化できます(101.4項「非トランザクション読取りログインの構成」を参照)。
使用する接続プール・タイプの選択の詳細は、97.4項「外部接続プーリングの構成」を参照してください。
内部接続プールの作成および構成の詳細は、次を参照してください。
Java EEアプリケーションの場合は通常、外部接続プールを使用します。
外部トランザクション・コントローラ(JTA)を使用する場合、外部接続プールを使用してJTAと統合する必要があります(115.13項「作業ユニットと外部トランザクション・サービスの統合」を参照)。
外部接続プールを使用することにより、TopLink WorkbenchまたはJavaを通じてデフォルト(書込み)および読取り接続プールを構成できます(96.1.6.3項「デフォルト(書込み)および読取り接続プール」を参照)。また、オブジェクト・アイデンティティ(96.1.6.4項「シーケンス接続プール」を参照)またはその他の目的(96.1.6.5項「アプリケーション固有の接続プール」を参照)用として追加の接続プールも作成できます。
使用する接続プール・タイプの選択の詳細は、97.4項「外部接続プーリングの構成」を参照してください。
サーバー・セッションでは、読取り接続プールと書込み接続プールが提供されます。これらは異なるプールとするか、または(外部接続プーリングを使用する場合は)同じ接続プールとすることが可能です。
すべての読取り問合せは読取り接続プールからの接続を使用し、データ・ソースに変更を書き込むすべての問合せは書込み接続プールからの接続を使用します。デフォルトの読取りおよび書込み接続プールの属性を構成できます。
新規接続が確立されるたびに、セッションのDatasourceLogin
に指定した接続構成が使用されます。また、外部トランザクション・コントローラを使用する場合、必要に応じて読取り接続プールごとに個別の接続構成を定義することにより、余計なオーバーヘッドが発生しないようにできます(101.4項「非トランザクション読取りログインの構成」を参照)。
読取りおよび書込み接続プールの構成の詳細は、101.1項「内部接続プールの構成の概要」を参照してください。
オブジェクト・アイデンティティ(102.2.1項「キャッシュ・タイプおよびオブジェクト・アイデンティティ」を参照)を保持する上で重要なのは、順序付け、つまり、インスタンスを区別するために一意の値の割当てを管理することです。詳細は、15.2.6項「プロジェクトおよび順序付け」を参照してください。
順序付けには、データ・ソースによって管理される特別な順序リソースの読取りと書込みが含まれます。
デフォルトでは、TopLinkの個々のトランザクションに順序操作が含まれます。これにより、書込みトランザクションの処理が複雑にならないようにします。書込みトランザクションの処理が複雑になると、順序リソースのデッドロックが発生する可能性があります。ただし、外部トランザクション・コントローラ(JTAデータ・ソースや接続プールなど)を使用している場合、TopLinkでは順序付け用として別のトランザクションを使用できません。順序付けのために非JTAトランザクション・プールを構成するには、シーケンス接続プールを使用します。これが必要なのは表の順序付けの場合のみであり、ネイティブ順序付けの場合は必要ありません。
サーバー・セッションごとに1つの接続プールを作成できます。これはシーケンス接続プールと呼ばれ、TopLinkで順序付け専用として使用されます。TopLinkでは、シーケンス接続プールを使用して、リクエストの発生元トランザクションの外部にある新規オブジェクト識別子のリクエストに対応します。これにより、順序リソースの更新を即座にコミットできるようになるため、デッドロックの発生を回避できます。
注意: シーケンス接続プールの使用時に元のトランザクションが失敗しても、順序操作はロールバックされません。 |
次のような場合は、シーケンス接続プールを使用する必要があります。
表の順序付け(非ネイティブ順序付け)を使用する場合。詳細は、18.2.2.1項「表の順序付け」および18.2.2.2項「単一列表の順序付け」を参照してください。
外部トランザクション・コントローラ(JTA)を使用する場合。
次のような場合は、シーケンス接続プールを使用しないようにする必要があります。
順序付けを使用しない、またはデータ・ソースのネイティブ順序付け(18.2.2.5項「Oracleデータベース・プラットフォームによるネイティブ順序付け」および18.2.2.6項「Oracle以外のデータベース・プラットフォームによるネイティブ順序付け」を参照)を使用する場合。
デッドロックを回避するために順序表を構成した場合。
非JTAデータ・ソースを使用する場合。
詳細は、次を参照してください。
この項の内容は次のとおりです。
例96-2は、抽象クラスoracle.toplink.sessions.DatasourceLogin
から導出されるログイン・タイプを示します。
例96-3は、プラットフォーム・タイプのクラス階層を示します。
例96-3 プラットフォームの継承階層
oracle.toplink.platform.database AccessPlatform AttunityPlatform CloudscapePlatform DatabasePlatform DB2MainframePlatform DB2Platform DBasePlatform Derbylatform HSQLPlatform InformixPlatform JavaDBPlatform PointBasePlatform PostgreeSQLPlatform SQLAnyWherePlatform SQLServerPlatform SybasePlatform TimesTen7Platform oracle.toplink.platform.database.oracle Oracle8Platform Oracle9Platform Oracle10Platform Oracle11Platform OraclePlatform