ヘッダーをスキップ
Oracle Fusion Middleware Oracle TopLink開発者ガイド
11gリリース1(11.1.1)
B56246-01
  目次
目次
索引
索引

戻る
戻る
 
次へ
次へ
 

96 データ・アクセスの概要

セッションの最も重要な機能の1つは、データ・ソースへのアクセスを提供することです。この章では、データ・ソースへのアクセスに固有のセッション・コンポーネントについて説明します。

この章の内容は次のとおりです。

96.1データ・アクセスの概念

この項では、次のようなTopLinkのデータ・アクセスに特有の概念について説明します。

96.1.1 外部管理トランザクション・データ・ソース

TopLinkトランザクション・データ・ソースは、接続プールがトランザクション・サービス(アプリケーション・サーバーによって制御されるトランザクションやJTAトランザクションなど)によって管理される場合、外部管理されます。JTA管理のデータ・ソースまたは接続プールは、一般的にJava EEアプリケーションで使用され、通常はEJBアプリケーションで必要になります。外部管理の接続プールは、次のように使用します。

トランザクション・データ・ソースの詳細は、次を参照してください。

TopLinkトランザクションの詳細は、第113章「TopLinkトランザクションの概要」を参照してください。

96.1.2 データ・ソース・ログインのタイプ

セッションに関連付けられたログイン(存在する場合)により、TopLinkランタイムがプロジェクトのデータ・ソースに接続する方法が決まります。

ログインには、認証、接続プールの使用、および外部トランザクション・コントローラの使用などのデータ・ソース・アクセスの詳細が含まれます。Loginは、データ・ソース・プラットフォームを所有します。

データ・ソース・プラットフォームには、バインディング、ネイティブSQLの使用、バッチ書込みの使用、順序付けなどの特定のデータ・ソースに固有のオプションが含まれます。プラットフォームの詳細は、96.1.3項「データ・ソース・プラットフォームのタイプ」を参照してください。

データ・ソースに永続化しないプロジェクトの場合、ログインは必要ありません。データ・ソースに永続化するプロジェクトの場合、ログインは常に必要です。

TopLink Workbenchでは、プロジェクト・タイプに応じて、プロジェクトで使用されるログインのタイプが決まります。

ログインは様々なロールで使用できます。ログインのロールにより、ログインを作成する場所と方法が決まります。選択するログインのロールは、作成対象のプロジェクトのタイプやログインの使用目的によって次のように異なります。

データ・ソースに永続化するプロジェクト・タイプごとに、独立したセッション・ログイン・タイプがあります。次にそのタイプを示します。

XMLログインは存在しません。TopLink XMLプロジェクトはXMLデータ・トランスフォーメーションに対する非永続的なインメモリー・オブジェクト用として使用されるため、ログインするデータ・ソースは存在しません。永続プロジェクトと非永続プロジェクトの詳細は、15.2.3項「永続および非永続プロジェクト」を参照してください。

詳細は、次を参照してください。

96.1.2.1 DatabaseLogin

リレーショナル・データベースにアクセスするプロジェクトを作成する場合、DatabaseLoginを使用してプロジェクトを構成する必要があります。DatabasePlatformを選択することにより、特定のタイプのデータベースについてプロジェクトをさらにカスタマイズできます(96.1.3.1項「データベース・プラットフォーム」を参照)。

詳細は、98.1項「データベース・ログイン構成の概要」を参照してください。

96.1.2.2 EISLogin

JCAアダプタを使用して非リレーショナル・データ・ソースにアクセスするプロジェクトを作成する場合、EISLoginを使用してプロジェクトを構成する必要があります。EISPlatformを選択することにより、特定のJCAアダプタについてプロジェクトをさらにカスタマイズし、TopLinkがEISとデータを交換するために使用するレコード・タイプを指定できます(96.1.3.2項「EISプラットフォーム」を参照)。

詳細は、99.1項「EISログイン構成の概要」を参照してください。

96.1.3データ・ソース・プラットフォームのタイプ

TopLinkは、データ・ソース・プラットフォームのクラスを使用して基礎となるデータ・ソースの詳細を抽出します。TopLinkには、次のデータ・ソース・プラットフォームがあります。

データ・ソース・プラットフォームは、プロジェクトのLoginによって所有されます。ログインの詳細は、96.1.2項「データ・ソース・ログインのタイプ」を参照してください。

プラットフォームの多くのオプションを構成するには、修正メソッド(119.35項「修正メソッドの構成」を参照)、またはpreLoginイベント・リスナー(87.2.5項「セッション・イベント・マネージャによるセッション・イベントの管理」を参照)を使用する必要があります。

96.1.3.1 データベース・プラットフォーム

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により、データベース・プラットフォームの構成が自動的に管理されます。

96.1.3.2 EISプラットフォーム

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プラットフォームの構成が自動的に管理されます。

96.1.4 認証

認証は、データ・ソースがユーザーのアイデンティティを検証し、そのユーザーに特定のアクションを実行するために十分な権限があるかどうかを確認するための手段です。

通常、2層アプリケーションの場合は、単純なJDBC認証で十分です(96.1.4.1項「単純なJDBC認証」を参照)。

3層アプリケーションの場合は、単純なJDBC認証を使用できますが、Oracle Call Interface(OCI)JDBCドライバを使用する場合はプロキシ認証を使用できます(96.1.4.2項「Oracleデータベースのプロキシ認証」を参照)。

認証は、データ・セキュリティ、ユーザーのアカウンタビリティおよび監査において中心的な役割を果します(96.1.4.3項「監査」を参照)。

96.1.4.1 単純なJDBC認証

ユーザー名およびパスワードを使用してTopLinkデータベース・ログインを構成すると(97.2項「ユーザー名およびパスワードの構成」を参照)、アプリケーションで使用されるよう構成するJDBCドライバにこれらの資格証明が提供されます(98.3項「データベース・ログインの接続オプションの構成」を参照)。

デフォルトでは、JCE暗号化を使用した暗号形式でsessions.xmlファイルに対してパスワードの書込みおよび読取りが行われます。必要な場合、別の暗号化クラスを構成できます(97.3項「パスワード暗号化の構成」を参照)。

96.1.4.2 Oracleデータベースのプロキシ認証

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.4.3 監査

選択する認証のタイプとは関係なく、すべてのデータベース操作に関連するユーザーの名前がログに記録されます。例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項「作業ユニットを使用したユーザーおよび日付監査の実装」を参照)。

96.1.5 接続

接続は、アプリケーションで使用されるよう構成したドライバを介して、データ・ソースへのアクセスを提供するオブジェクトです(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項「接続プール」を参照)。

96.1.6 接続プール

接続プールは、1つ以上のクライアントのかわりにデータ・ソース接続の共有コレクション(プール)を作成および保持するサービスです。接続プールは、リクエストに基づいてプロセスに接続を提供し、プロセスが接続の使用を終了すると、接続をプールに返します。接続は、プールに返されると、他のプロセスで使用できます。データ・ソースへの接続の確立には時間がかかるため、接続プールのこのような接続を再使用してパフォーマンスを向上できます。

TopLinkは、接続プールを使用して、サーバーおよびクライアント・セッションで使用される接続を管理および共有します。この機能により、必要な接続数が減り、アプリケーションで多くのクライアントをサポートできるようになります。

TopLinkで提供される内部接続プール、またはJDBCドライバまたはJava EEコンテナで提供される外部接続プールを使用するようにセッションを構成できます。

TopLinkアプリケーションの接続プールは、読取り、書込み、順序付け、およびその他のアプリケーション固有の機能などの様々な目的に使用できます。

この項の内容は次のとおりです。

96.1.6.1 内部接続プール

非Java EEアプリケーションの場合は通常、内部接続プールを使用します。デフォルトでは、TopLinkセッションは内部接続プールを使用します。

内部接続プールを使用することにより、TopLink Workbenchを使用して、デフォルト(書込み)および読取り接続プールを構成できます(96.1.6.3項「デフォルト(書込み)および読取り接続プール」を参照)。また、オブジェクト・アイデンティティ(96.1.6.4項「シーケンス接続プール」を参照)またはその他の目的(96.1.6.5項「アプリケーション固有の接続プール」を参照)用として追加の接続プールも作成できます。

内部接続プールを使用して、表示のみを目的としてデータを読み取るアプリケーションや、ごくまれにデータを変更するアプリケーション用の読取り接続の作成を最適化できます(101.4項「非トランザクション読取りログインの構成」を参照)。

使用する接続プール・タイプの選択の詳細は、97.4項「外部接続プーリングの構成」を参照してください。

内部接続プールの作成および構成の詳細は、次を参照してください。

96.1.6.2 外部接続プール

Java EEアプリケーションの場合は通常、外部接続プールを使用します。

外部トランザクション・コントローラ(JTA)を使用する場合、外部接続プールを使用してJTAと統合する必要があります(115.13項「作業ユニットと外部トランザクション・サービスの統合」を参照)。

外部接続プールを使用することにより、TopLink WorkbenchまたはJavaを通じてデフォルト(書込み)および読取り接続プールを構成できます(96.1.6.3項「デフォルト(書込み)および読取り接続プール」を参照)。また、オブジェクト・アイデンティティ(96.1.6.4項「シーケンス接続プール」を参照)またはその他の目的(96.1.6.5項「アプリケーション固有の接続プール」を参照)用として追加の接続プールも作成できます。

使用する接続プール・タイプの選択の詳細は、97.4項「外部接続プーリングの構成」を参照してください。

96.1.6.3 デフォルト(書込み)および読取り接続プール

サーバー・セッションでは、読取り接続プールと書込み接続プールが提供されます。これらは異なるプールとするか、または(外部接続プーリングを使用する場合は)同じ接続プールとすることが可能です。

すべての読取り問合せは読取り接続プールからの接続を使用し、データ・ソースに変更を書き込むすべての問合せは書込み接続プールからの接続を使用します。デフォルトの読取りおよび書込み接続プールの属性を構成できます。

新規接続が確立されるたびに、セッションのDatasourceLoginに指定した接続構成が使用されます。また、外部トランザクション・コントローラを使用する場合、必要に応じて読取り接続プールごとに個別の接続構成を定義することにより、余計なオーバーヘッドが発生しないようにできます(101.4項「非トランザクション読取りログインの構成」を参照)。

読取りおよび書込み接続プールの構成の詳細は、101.1項「内部接続プールの構成の概要」を参照してください。

96.1.6.4 シーケンス接続プール

オブジェクト・アイデンティティ(102.2.1項「キャッシュ・タイプおよびオブジェクト・アイデンティティ」を参照)を保持する上で重要なのは、順序付け、つまり、インスタンスを区別するために一意の値の割当てを管理することです。詳細は、15.2.6項「プロジェクトおよび順序付け」を参照してください。

順序付けには、データ・ソースによって管理される特別な順序リソースの読取りと書込みが含まれます。

デフォルトでは、TopLinkの個々のトランザクションに順序操作が含まれます。これにより、書込みトランザクションの処理が複雑にならないようにします。書込みトランザクションの処理が複雑になると、順序リソースのデッドロックが発生する可能性があります。ただし、外部トランザクション・コントローラ(JTAデータ・ソースや接続プールなど)を使用している場合、TopLinkでは順序付け用として別のトランザクションを使用できません。順序付けのために非JTAトランザクション・プールを構成するには、シーケンス接続プールを使用します。これが必要なのは表の順序付けの場合のみであり、ネイティブ順序付けの場合は必要ありません。

サーバー・セッションごとに1つの接続プールを作成できます。これはシーケンス接続プールと呼ばれ、TopLinkで順序付け専用として使用されます。TopLinkでは、シーケンス接続プールを使用して、リクエストの発生元トランザクションの外部にある新規オブジェクト識別子のリクエストに対応します。これにより、順序リソースの更新を即座にコミットできるようになるため、デッドロックの発生を回避できます。


注意:

シーケンス接続プールの使用時に元のトランザクションが失敗しても、順序操作はロールバックされません。

次のような場合は、シーケンス接続プールを使用する必要があります。

次のような場合は、シーケンス接続プールを使用しないようにする必要があります。

詳細は、次を参照してください。

96.1.6.5 アプリケーション固有の接続プール

セッションでTopLinkの内部接続プールを使用する場合、アプリケーションの任意の目的のために使用できる1つ以上の接続プールを作成できます。これらは名前付き接続プールと呼ばれ、名前を自由に付け、任意の目的のために使用できます。

通常、これらの名前付き接続プールを使用して、様々なセキュリティ・レベルのプールを提供します。たとえば、デフォルト接続プールの場合は特定の表にのみアクセスできますが、管理接続プールの場合はすべての表にアクセスできます。

詳細は、次を参照してください。

96.2 データ・アクセスAPI

この項の内容は次のとおりです。

96.2.1 ログインの継承階層

例96-2は、抽象クラスoracle.toplink.sessions.DatasourceLoginから導出されるログイン・タイプを示します。

例96-2 ログインの継承階層

class oracle.toplink.sessions.DatasourceLogin
    class oracle.toplink.sessions.DatabaseLogin
    class oracle.toplink.eis.EISLogin

96.2.2 プラットフォームの継承階層

例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