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

戻る
戻る
 
次へ
次へ
 

98 データベース・ログインの構成

リレーショナル・データベース・プロジェクトでは、TopLinkにより、ディスクリプタごとにデータベースから表情報が取得されます。各TopLink Workbenchプロジェクトには、関連するデータベースが含まれます。各データベースには、複数のログインを作成できます。

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

表98-1は、データベース・ログインの構成可能オプションを示します。

98.1 データベース・ログイン構成の概要

表98-1は、データベース・ログインの構成可能オプションを示します。

表98-1 データベース・ログインの構成可能オプション

構成オプション Oracle JDeveloper
TopLink Workbench
Java

リレーショナル・データベース(98.2項「セッション・レベルでのリレーショナル・データベース・プラットフォームの構成」を参照)

サポートされている
サポートされている
サポートされている

データベース・ログインの接続オプション(98.3項「データベース・ログインの接続オプションの構成」を参照)

サポートされている
サポートされている
サポートされている

順序付け(98.4項「セッション・レベルでの順序付けの構成」を参照)

サポートされている
サポートされている
サポートされている

JDBCオプション(98.6項「JDBCオプションの構成」を参照)

サポートされている
サポートされている
サポートされている

ユーザー名およびパスワード(97.2項「ユーザー名およびパスワードの構成」を参照)

サポートされている
サポートされている
サポートされている

表修飾子(98.5項「表修飾子の構成」を参照)

サポートされている
サポートされている
サポートされている

詳細オプション(98.7項「詳細オプションの構成」を参照)

サポートされている
サポートされている
サポートされている

パスワード暗号化(97.3項「パスワード暗号化の構成」を参照)

サポートされていない
サポートされていない
サポートされている

外部接続プーリング(97.4項「外部接続プーリングの構成」を参照)

サポートされている
サポートされている
サポートされている

プロパティ(97.5項「プロパティの構成」を参照)

サポートされている
サポートされている
サポートされている

Oracleデータベースのプロキシ認証(98.8項「Oracleデータベースのプロキシ認証の構成」を参照)

サポートされていない
サポートされていない
サポートされている

98.2 セッション・レベルでのリレーショナル・データベース・プラットフォームの構成

各データベース・セッションには、データベース・プラットフォーム(Oracleデータベースなど)を指定する必要があります。このプラットフォーム構成により、プロジェクト・レベルでプラットフォームがオーバーライドされます(構成されている場合)。

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

98.2.1 TopLink Workbenchを使用したセッション・レベルでのリレーショナル・データベース・プラットフォームの構成方法

リレーショナル・サーバー(またはデータベース)のセッション・ログインにデータベース・プラットフォームのオプションを指定するには、次の手順を実行します。

  1. ナビゲータでリレーショナル・サーバー(またはデータベース)セッションを選択します。そのプロパティがエディタに表示されます。

  2. 「ログイン」タブをクリックします。「ログイン」タブが表示されます。

  3. 「接続」サブタブをクリックします。「接続」サブタブが表示されます。

  4. 図98-1 「ログイン」タブ、「接続」サブタブ、「データベース・プラットフォーム」オプション

    図98-1の説明が続きます
    「図98-1 「ログイン」タブ、「接続」サブタブ、「データベース・プラットフォーム」オプション」の説明

オプションのメニューからデータベース・プラットフォームを選択します。このメニューには、TopLinkクラスパスのDatabasePlatformのすべてのインスタンスが含まれます。

98.3 データベース・ログインの接続オプションの構成

POJO TopLinkアプリケーションについては接続情報をセッション・レベルで構成します。この情報は、sessions.xmlファイルに格納されます。TopLinkランタイムでは、POJO TopLinkアプリケーションのセッションを使用して永続性操作を実行する場合は常にこの情報が使用されます。

この接続構成により、プロジェクト・レベルで接続情報がオーバーライドされます(構成されている場合)。プロジェクト・レベルの構成の詳細は、20.5項「開発ログインおよびデプロイ・ログインの構成」を参照してください。

この接続構成は、接続プール・レベルの接続情報によってオーバーライドされます。詳細は、101.5項「接続プールの接続オプションの構成」を参照してください。

98.3.1 TopLink Workbenchを使用したデータベース・ログインの接続オプションの構成方法

リレーショナル・サーバー(またはデータベース)のセッション・ログインに接続オプションを指定するには、次の手順を実行します。

  1. ナビゲータでリレーショナル・サーバー(またはデータベース)セッションを選択します。そのプロパティがエディタに表示されます。

  2. 「ログイン」タブをクリックします。「ログイン」タブが表示されます。

  3. 「接続」サブタブをクリックします。「接続」サブタブが表示されます。

    図98-2 「ログイン」タブ、「接続」サブタブ、「データベース・ドライバ」

    図98-2の説明が続きます
    「図98-2 「ログイン」タブ、「接続」サブタブ、「データベース・ドライバ」」の説明

    図98-3 「ログイン」タブ、「接続」サブタブ

    図98-3の説明が続きます
    「図98-3 「ログイン」タブ、「接続」サブタブ」の説明

次の情報を参照し、タブの「ドライバ」フィールドにデータを入力します。

フィールド 説明
データベース・ドライバ 適切なデータベース・ドライバを指定します。
  • ドライバ・マネージャ: データベースに接続するためのドライバ・クラスおよびURLを構成する場合、このオプションを指定します。この場合、「ドライバ・クラス」および「ドライバURL」フィールドを構成する必要があります。

  • J2EEデータ・ソース: ターゲット・アプリケーション・サーバーにすでに構成されているJava EEデータ・ソースを使用する場合、このオプションを指定します。この場合、「データ・ソース名」フィールドを構成する必要があります。

注意: 「J2EEデータ・ソース」を選択する場合、外部接続プールを使用する必要があります。この「データベース・ドライバ」オプションの場合、内部接続プールは使用できません(詳細は、97.4項「外部接続プーリングの構成」を参照してください)。

ドライバ・クラス脚注1 「データベース・ドライバ」「ドライバ・マネージャ」に設定されている場合はこのフィールドを構成します。オプションのメニューから選択します。このメニューには、TopLinkクラスパスのすべてのJDBCドライバが含まれます。
ドライバURL脚注1 「データベース・ドライバ」「ドライバ・マネージャ」に設定されている場合はこのフィールドを構成します。選択した「ドライバ・クラス」に関連するオプションのメニューから選択し、データ・ソースに合せてURLを編集します。
データ・ソース名脚注2 「データベース・ドライバ」「J2EEデータ・ソース」に設定されている場合はこのフィールドを構成します。ターゲット・アプリケーション・サーバーで事前に構成されているJava EEデータ・ソースを示す有効なJNDI名を指定します(例: jdbc/EmployeeDB)。

慣例により、このような名前はすべて(提供されるすべてのリソース・ファクトリのルートである標準のjava:comp/envネーミング・コンテキストを基準として)JDBCサブコンテキストに変換する必要があります。

ルックアップ・タイプ脚注2 「データベース・ドライバ」「J2EEデータ・ソース」に設定されている場合はこのフィールドを構成します。JNDI名を決定するためのルックアップ方法を指定します。
  • コンポジット名

  • 複合名

  • 文字列


脚注1 「データベース・ドライバ」「ドライバ・マネージャ」に設定されている場合のみ適用されます。

脚注2 「データベース・ドライバ」「J2EEデータ・ソース」に設定されている場合のみ適用されます。

98.4 セッション・レベルでの順序付けの構成

TopLinkの順序付けをセッションまたはプロジェクト・レベルで構成することにより、順序値(使用する順序のタイプ)を取得する方法をTopLinkに指示します。

CMPプロジェクトの場合、セッションは直接構成しません。この場合、順序をプロジェクト・レベルで構成する必要があります(20.3項「プロジェクト・レベルでの順序付けの構成」を参照)。POJOプロジェクトの場合、セッションは直接構成できます。この場合、必要に応じて、セッション・レベルの順序構成を使用して、セッション別のプロジェクト・レベルの順序構成をオーバーライドできます。

Oracle JDeveloperを使用してセッション・レベルで順序付けを構成できます。

TopLink Workbench(98.4.1項「TopLink Workbenchを使用したセッション・レベルでの順序付けの構成方法」を参照)を使用する場合、表の順序付け(18.2.2.1項「表の順序付け」を参照)およびネイティブ順序付け(18.2.2.5項「Oracleデータベース・プラットフォームによるネイティブ順序付け」および18.2.2.6項「Oracle以外のデータベース・プラットフォームによるネイティブ順序付け」を参照)を構成することや、すべての順序に適用される事前割当てサイズを構成することが可能です(18.2.3項「順序付けと事前割当てサイズ」を参照)。

Javaを使用する場合(98.4.2項「Javaを使用したセッション・レベルでの順序付けの構成方法」を参照)、TopLinkがサポートしている任意の順序タイプを構成できます(18.2.2項「順序付けタイプ」を参照)。順序を任意の数および組合せで作成できます。順序オブジェクトを明示的に作成することや、プラットフォームが作成するデフォルトの順序を使用することが可能です。同じ順序を複数のディスクリプタに関連付け、ディスクリプタの順序ごとに個別の事前割当てサイズを構成できます。

セッション(またはプロジェクト)・レベルで順序タイプを構成した後、順序付けを有効にするには、順序フィールドおよび順序名を使用してディスクリプタを構成する必要があります(23.3項「ディスクリプタ・レベルでの順序付けの構成」を参照)。

順序付けの詳細は、18.2項「リレーショナル・プロジェクトにおける順序付け」を参照してください。

98.4.1 TopLink Workbenchを使用したセッション・レベルでの順序付けの構成方法

リレーショナル・サーバー(またはデータベース)・セッションに順序付け情報を指定するには、次の手順を実行します。

  1. 「ナビゲータ」でセッション・オブジェクトを選択します。

  2. 「エディタ」「ログイン」タブを選択します。

  3. 「順序付け」サブタブをクリックします。「順序付け」サブタブが表示されます。

    図98-4 「ログイン」タブ、「順序付け」サブタブ

    図98-4の説明が続きます
    「図98-4 「ログイン」タブ、「順序付け」サブタブ」の説明

次の情報を参照し、「順序付け」サブタブの各フィールドにデータを入力して永続性タイプを構成します。

フィールド 説明
事前割当てサイズ デフォルトの事前割当てサイズを選択します(18.2.3項「順序付けと事前割当てサイズ」を参照)。デフォルトは50です。構成する事前割当てサイズはすべての順序に適用されます。
デフォルトの順序表 デフォルトの順序表名SEQUENCE、デフォルトの順序名フィールドSEQ_NAME、およびデフォルトの順序数フィールドSEQ_COUNTを使用して表の順序付けを使用する場合、このオプションを選択します(18.2.2.1項「表の順序付け」を参照)。
ネイティブ順序付け データベース・プラットフォームによって作成される順序付けオブジェクトを使用する場合、このオプションを選択します(18.2.2.5項「Oracleデータベース・プラットフォームによるネイティブ順序付け」または18.2.2.6項「Oracle以外のデータベース・プラットフォームによるネイティブ順序付け」を参照)。このオプションは、サポートされているデータベース・プラットフォームに適用されます(96.1.3.1項「データベース・プラットフォーム」を参照)。
カスタム順序表 指定する順序表名、順序名フィールドおよび順序数フィールド名を使用して表の順序付けを使用する場合、このオプションを選択します(18.2.2.1項「表の順序付け」を参照)。
    名前 順序表の名前を選択します。
    名前フィールド 順序名を格納するために使用する列の名前を選択します。
    カウンタ・フィールド 順序数を格納するために使用する列の名前を選択します。

98.4.2 Javaを使用したセッション・レベルでの順序付けの構成方法

Javaを使用する場合、次の順序構成を実行できます。

98.4.2.1 プラットフォームのデフォルトの順序の使用

プラットフォームを使用してログインを構成した後(98.2項「セッション・レベルでのリレーショナル・データベース・プラットフォームの構成」を参照)、プラットフォームが提供するデフォルトの順序を使用できます。

指定されていない順序にディスクリプタを関連付けると、TopLinkランタイムはDefaultSequenceのインスタンスを作成し、このディスクリプタの順序付けを提供します。詳細は、23.3.3.3項「プラットフォームのデフォルト順序の構成」を参照してください。

例98-1に示すように、デフォルトのプラットフォームの順序には直接アクセスできます。たとえば、デフォルトでは、DatabasePlatformにより、デフォルトの表および列名を使用して表の順序が作成されます(18.2.2.1項「表の順序付け」を参照)。

例98-1 プラットフォームのデフォルトの順序へのアクセス

// assume that dbLogin owns a DatabasePlatform
TableSequence tableSeq2 = ((TableSequence)dbLogin.getDefaultSequence()).clone();
tableSeq2.setName("EMP_SEQ");
tableSeq2.setPreallocationSize(75);
dbLogin.addSequence(tableSeq2);

プラットフォームのデフォルトの順序のクローニングを回避するには、例98-2に示すように、DefaultSequenceクラス(プラットフォームのデフォルトの順序のラッパー)を使用します。EMP_SEQという名前の新規順序がプラットフォームのデフォルトの順序と同じタイプになります。

例98-2 DefaultSequenceクラスの使用

login.addSequence(
    new DefaultSequence("EMP_SEQ", 75)
);

例98-3に示すように、デフォルトのプラットフォームの順序をオーバーライドできます。この例では、dbLoginは、タイプTableSequenceのデフォルトの順序を提供するDatabasePlatformを所有しています。デフォルトの順序をタイプUnaryTableSequenceに設定した後、DefaultSequenceクラスを使用すると、新しいデフォルトの順序タイプにアクセスします。この例では、EMP_SEQという名前の順序がタイプUnaryTableSequenceになり、事前割当てサイズは75になります。

例98-3 プラットフォームのデフォルトの順序のオーバーライド

// assume that dbLogin owns a DatabasePlatform
Sequence unaryTableSequence = new UnaryTableSequence();
unaryTableSequence.setPreallocationSize(40);
dbLogin.setDefaultSequence(unaryTableSequence);
dbLogin.addSequence(
    new DefaultSequence("EMP_SEQ", 75) // UnaryTableSequence
);

98.4.2.2 複数の順序の構成

プラットフォームのデフォルトの順序を使用する以外にも(98.4.2.1項「プラットフォームのデフォルトの順序の使用」を参照)、例98-4に示すように、順序インスタンスを明示的に作成し、それぞれが独自の事前割当てサイズを持つ順序タイプの組合せを使用してLoginを構成できます。この例では、EMP_SEQという名前の順序はEmployeeクラスのインスタンスに対してのみ順序値を提供し、ADD_SEQAddressクラスのインスタンスに対してのみ順序値を提供します。PHONE_SEQという名前の順序は、事前割当てサイズが30のプラットフォームのデフォルトの順序を使用し、Phoneクラスの順序値を提供します。

例98-4 複数の順序の明示的構成

login.addSequence(new TableSequence("EMP_SEQ", 25));
login.addSequence(new DefaultSequence("PHONE_SEQ", 30));
login.addSequence(new UnaryTableSequence("ADD_SEQ", 55));
login.addSequence(new NativeSequence("NAT_SEQ", 10));

ログインがDatabasePlatform(デフォルトの順序タイプはTableSequence)を所有している場合、例98-5に示すように、プラットフォームのデフォルトの順序タイプを使用して順序を構成できます。この例では、順序EMP_SEQおよびPHONE_SEQは同じTableSequence表を共有しています。EMP_SEQおよびPHONE_SEQは、この表の行を示します。

例98-5 デフォルトの順序タイプを使用した複数の順序の構成

login.addSequence(new DefaultSequence("EMP_SEQ", 25));
login.addSequence(new DefaultSequence("PHONE_SEQ", 30));
login.addSequence(new UnaryTableSequence("ADD_SEQ", 55));
login.addSequence(new NativeSequence("NAT_SEQ", 10));

98.4.2.3 問合せの順序付けの構成

QuerySequenceを拡張する任意の順序タイプについて、順序値の更新または読取りに、TopLinkが使用する問合せを構成できます。

ほとんどのアプリケーションでは、TopLinkが自動的に使用する問合せで十分です。ただし、順序付け用としてストアド・プロシージャを使用する場合など、アプリケーションに特別な順序付けが必要な場合、TopLinkの順序で使用する更新および読取り問合せを構成できます。

例98-7は、1回のSQLの選択問合せで順序を更新し、新規順序値を返すストアド・プロシージャを指定する方法を示します。この例では、ストアド・プロシージャにはUPDATE_SEQという名前が付いています。これには、1つの入力引数(更新対象の順序名であるSEQ_NAME)および1つの出力引数(更新後の順序値であるSEQ_COUNT)が含まれています。このストアド・プロシージャは、SEQ_NAMEという名前の順序に関連付けられている順序値を増やし、SEQ_COUNTという名前の出力引数で新規順序値を返します。

例98-6 順序の更新と選択の両方を実行するためのストアド・プロシージャの使用

ValueReadQuery seqReadQuery = new ValueReadQuery();
StoredProcedureCall spCall = new StoredProcedureCall();
spCall.setProcedureName("UPDATE_SEQ");
seqReadQuery.addNamedArgument("SEQ_NAME");
seqReadQuery.addNamedOutputArgument("SEQ_COUNT");
seqReadQuery.setCall(spCall);
((QuerySequence)login.getDefaultSequence()).setSelectQuery(seqReadQuery);

例98-7および例98-8は、順序の更新アクションと選択アクション用としてストアド・プロシージャを個別に指定する方法を示します。

例98-7では、ストアド・プロシージャの名前はUPDATE_SEQであり、更新する順序の名前(SEQ_NAME)が1つの引数として含まれます。ストアド・プロシージャは、SEQ_NAMEという名前の順序に関連付けられている順序値を増やします。

例98-7 順序更新のみのためのストアド・プロシージャの使用

DataModifyQuery seqUpdateQuery = new DataModifyQuery();
StoredProcedureCall spCall = new StoredProcedureCall();
spCall.setProcedureName("UPDATE_SEQ");
seqUpdateQuery.addNamedArgument("SEQ_NAME");
seqUpdateQuery.setCall(spCall);
((QuerySequence)login.getDefaultSequence()).setUpdateQuery(seqUpdateQuery);

例98-8では、ストアド・プロシージャの名前はSELECT_SEQであり、選択する順序の名前(SEQ_NAME)を1つの引数としてとります。ストアド・プロシージャは、1つのデータ値(順序名SEQ_NAMEに関連付けられている現在の順序値)を読み取ります。

例98-8 順序選択のみのためのストアド・プロシージャの使用

ValueReadQuery seqReadQuery = new ValueReadQuery();
StoredProcedureCall spCall = new StoredProcedureCall();
spCall.setProcedureName("SELECT_SEQ");
seqReadQuery.addArgument("SEQ_NAME");
seqReadQuery.setCall(spCall);
login.((QuerySequence)getDefaultSequence()).setSelectQuery(seqReadQuery)

また、例98-9に示すように、QuerySequenceを直接作成し、ログインに追加することもできます。

例98-9 QuerySequenceクラスの使用

// Use the two-argument constructor: pass in sequence name and preallocation size.
// Alternatively, you can use zero- or one-argument (sequence name) constructor
login.addSequence(new QuerySequence("SEQ1", 75));

98.5 表修飾子の構成

一部のデータベース(Oracle DatabaseやDB2など)では、すべての表を識別子で修飾する必要があります。これには、表の作成者や表が存在するデータベース名などがあります。表修飾子を指定すると、TopLinkは、参照するすべての表に対してこの修飾子を使用します。表修飾子を指定するのは、表修飾子が必要で、すべての表の修飾子が同じである場合のみです。

98.5.1 TopLink Workbenchを使用した表修飾子の構成方法

表修飾子を指定するには、次の手順を実行します。

  1. ナビゲータでリレーショナル・サーバー(またはデータベース)セッションを選択します。そのプロパティがエディタに表示されます。

  2. 「ログイン」タブをクリックします。「ログイン」タブが表示されます。

  3. 「オプション」サブタブをクリックします。「オプション」サブタブが表示されます。

    図98-5 「ログイン」タブ、「オプション」サブタブ、「表修飾子」フィールド

    図98-5の説明が続きます
    「図98-5 「ログイン」タブ、「オプション」サブタブ、「表修飾子」フィールド」の説明

「表修飾子」フィールドで、このデータベースのすべての表に対する参照を修飾するための識別子を入力します。

98.5.2 Javaを使用した表修飾子の構成方法

すべての表にデフォルトの修飾子を設定するには、DatabaseLoginのメソッドsetTableQualifierを使用します。

98.6JDBCオプションの構成

ほとんどのJDBCドライバは、ユーザーのニーズに合せてドライバ操作をカスタマイズするための様々なオプションのランタイム構成をサポートしています。TopLinkは、多くの最も重要なオプションのみでなく、この項で説明するように、より詳細なオプション(98.7項「詳細オプションの構成」を参照)を(API、Oracle JDeveloper、およびTopLink Workbenchで)直接サポートしています。

また、プロパティを指定することにより、追加オプションを構成することもできます(97.5項「プロパティの構成」を参照)。


注意:

すべてのドライバがすべてのJDBCオプションをサポートするとはかぎりません。選択するオプションの組合せにより、ドライバの動作が異なる場合があります。JDBCオプションを選択する前に、使用するJDBCドライバのドキュメントを参照してください。

98.6.1 TopLink Workbenchを使用したJDBCオプションの構成方法

リレーショナル・サーバー(またはデータベース)のセッション・ログインにJDBCオプションを指定するには、次の手順を実行します。

  1. ナビゲータでリレーショナル・サーバー(またはデータベース)セッションを選択します。そのプロパティがエディタに表示されます。

  2. 「ログイン」タブをクリックします。「ログイン」タブが表示されます。

  3. 「オプション」サブタブをクリックします。「オプション」サブタブが表示されます。

    図98-6 「ログイン」タブ、「オプション」サブタブ、「JDBCオプション」

    図98-6の説明が続きます
    「図98-6 「ログイン」タブ、「オプション」サブタブ、「JDBCオプション」」の説明

次の表を参照し、「オプション」サブタブ上のフィールドにデータを入力してJDBCオプションを選択し、このセッションログインで使用します。

オプション 説明
問合せのすべてのパラメータをバインド脚注1 デフォルトでは、TopLinkは問合せのパラメータをすべてバインドします。

TopLinkでパラメータをバインドしないようにするには、このオプションの選択を解除します。

すべての文をキャッシュ脚注1 このオプションを選択すると、プリコンパイルされた各文がキャッシュされるため、再実行時にSQL文のプリコンパイル時間を短縮し、パフォーマンスを向上させることができます。
バイト配列バインディング脚注1 バイナリ・ラージ・オブジェクト(BLOB)データを問い合せる場合、このオプションを選択します。
バインド用ストリーム脚注1 java.io.InputStreamおよびjava.io.OutputStreamを使用したBLOBデータの処理時により効率的なJDBCドライバを使用する場合、このオプションを選択します。
ネイティブSQL デフォルトでは、TopLinkは、JDBC SQL文法を使用してSQLを生成します。データベース・ドライバが完全なJDBC SQL文法をサポートしていない場合など、TopLinkがデータベース固有のSQL文法を使用するようにする場合、このオプションを選択します。
バッチ書込み脚注2 INSERTUPDATEおよびDELETE文のグループを個別にではなく1つのトランザクションでデータベースに送信する操作をサポートしているJDBCドライバを使用する場合、このオプションを選択します。

JDBCドライバのバッチ書込み機能を使用する場合、「JDBC」を選択します。

TopLinkが提供するバッチ書込み機能を使用する場合、「TopLink」を選択します。JDBCドライバがバッチ書込みをサポートしていない場合、このオプションを選択します。

注意: Oracle 9 Databaseプラットフォームを使用しており、TopLinkバッチ書込みをオプティミスティック・ロックと組み合せて使用する場合は、パラメータ・バインドを有効にする必要があります。

文字列バインディング脚注1 大規模なjava.lang.Stringオブジェクトを問い合せる場合、このオプションを選択します。

Stringの最大長を構成できます(デフォルト: 32000文字)。


脚注1 詳細は、12.11.5項「パラメータ使用のSQL(パラメータ・バインド)とプリコンパイルされたSQL文のキャッシュを使用した最適化方法」を参照してください。

脚注2 MySQL4データベース・プラットフォーム(96.1.3項「データ・ソース・プラットフォームのタイプ」を参照)を使用する場合は、JDBCバッチ書込みを使用してください(TopLinkバッチ書込みは使用しないでください)。詳細は、12.11.3項「バッチ書込みを使用した最適化方法」を参照してください。

98.6.2 Javaを使用したJDBCオプションの構成方法

すべての問合せに対してプリコンパイルされた文のキャッシュを有効にするには、例98-10に示すように、Loginレベルで構成します。詳細は、12.11.5項「パラメータ使用のSQL(パラメータ・バインド)とプリコンパイルされたSQL文のキャッシュを使用した最適化方法」を参照してください。

例98-10 ログイン・レベルでのプリコンパイルされたSQL文のキャッシュ

databaseLogin.cacheAllStatements();
databaseLogin.setStatementCacheSize(100);

TopLinkでは、パラメータ・バインドはデフォルトで有効になっています。バインドを無効にするには、例98-11に示すように、Loginレベルで構成します。詳細は、12.11.5項「パラメータ使用のSQL(パラメータ・バインド)とプリコンパイルされたSQL文のキャッシュを使用した最適化方法」を参照してください。

例98-11 ログイン・レベルでのパラメータ・バインドの無効化

databaseLogin.dontBindAllParameters();

JDBCバッチ書込みを有効にするには、例98-12に示すように、LoginのメソッドuseBatchWritingを使用します。

例98-12 JDBCバッチ書込みの使用

project.getLogin().useBatchWriting();
project.getLogin().setMaxBatchWritingSize(100);

98.7 詳細オプションの構成

ほとんどのJDBCドライバは、ユーザーのニーズに合せてドライバ操作をカスタマイズするための様々なオプションのランタイム構成をサポートしています。TopLinkでは、多くの最も重要なオプション(98.6項「JDBCオプションの構成」を参照)のみでなく、この項で説明するように、より詳細なオプションも(API、Oracle JDeveloper、およびTopLink Workbenchで)直接サポートしています。

また、プロパティを指定することにより、追加オプションを構成することもできます(97.5項「プロパティの構成」を参照)。


注意:

すべてのドライバがすべてのJDBCオプションをサポートするとはかぎりません。選択するオプションの組合せにより、ドライバの動作が異なる場合があります。JDBCオプションを選択する前に、使用するJDBCドライバのドキュメントを参照してください。

98.7.1 TopLink Workbenchを使用した詳細オプションの構成方法

リレーショナル・サーバー(またはデータベース)のセッション・ログインに詳細オプションを指定するには、次の手順を実行します。

  1. ナビゲータでリレーショナル・サーバー(またはデータベース)セッションを選択します。そのプロパティがエディタに表示されます。

  2. 「ログイン」タブをクリックします。「ログイン」タブが表示されます。

  3. 「オプション」サブタブをクリックします。「オプション」サブタブが表示されます。

    図98-7 「ログイン」タブ、「オプション」サブタブ、「詳細オプション」

    図98-7の説明が続きます
    「図98-7 「ログイン」タブ、「オプション」サブタブ、「詳細オプション」」の説明

次の表を参照し、「オプション」サブタブ上のフィールドにデータを入力して詳細オプションを選択し、このセッションログインで使用します。

オプション 説明
フィールド名を大文字に変換 デフォルトでは、TopLinkは、データベースから返されたフィールド名に応じて大文字または小文字を使用します。フィールド名が大文字であることをアプリケーションが予期しているが、データベースが大文字を返さない場合(異なるデータベースにアクセスしている場合など)は、このオプションを有効にします。
データ変換の最適化 デフォルトでは、TopLinkは、アプリケーションが必要とする形式でJDBCからデータにアクセスして、データ・アクセスを最適化します。データ変換が行われなくなった古いJDBCドライバを使用しているために、この最適化と競合する場合は、この最適化を無効にします。
文字列のトリミング デフォルトでは、TopLinkは、CHARフィールド値から後続の空白を削除します。CHARフィールド値の読取りおよび書込みを(後続の空白も含めて)リテラルに行うには、このオプションを無効にします。
プロパティ このDatabaseLoginのプロパティの使用を有効にするには、このオプションを選択します(97.5項「プロパティの構成」を参照)。

98.7.2 Javaを使用した詳細オプションの構成方法

詳細オプションを構成するには、DatabaseLoginの次のメソッドを使用します。

  • setShouldForceFieldNamesToUpperCase: デフォルトでは、TopLinkは、データベースから返されたフィールド名に応じて大文字または小文字を使用します。フィールド名が大文字であることをアプリケーションが予期しているが、データベースが大文字を返さない場合(異なるデータベースにアクセスしている場合など)は、このメソッドを使用します。

  • setShouldOptimizeDataConversion: デフォルトでは、TopLinkは、アプリケーションが必要とする形式でJDBCからデータにアクセスして、データ・アクセスを最適化します。データ変換が正確に行われなくなった古いJDBCドライバを使用しているために、この最適化と競合する場合は、この値をfalseに設定します。

  • setShouldTrimStrings: デフォルトでは、TopLinkは、CHARフィールド値から後続の空白を削除します。CHARフィールド値の読取りおよび書込みを(後続の空白も含めて)リテラルに行うには、この値をfalseに設定します。

  • setProperties: このDatabaseLoginのプロパティの使用を有効にするには、この値をtrueに設定します(97.5項「プロパティの構成」を参照)。

98.8 Oracleデータベースのプロキシ認証の構成

データベース・ログインは、Oracle JDBCドライバ・リリース10.1.0.2.0以上および外部接続プールとともにOC4JネイティブまたはJTA以外(tx-level=localを使用して設定)の管理データ・ソースを使用したJSEアプリケーションおよびJEEアプリケーションのOracleデータベース・プラットフォームでのみ、Oracleデータベースのプロキシ認証を使用するように構成できます。

Oracle JDeveloperまたはTopLink Workbenchではこの機能をサポートしていません。TopLinkでOracleデータベースのプロキシ認証を使用するように構成するには、Javaを使用する必要があります(98.8.1項「Javaを使用したOracleデータベースのプロキシ認証の構成方法」を参照)。

詳細は、96.1.4.2項「Oracleデータベースのプロキシ認証」を参照してください。

次の場合には、Oracleデータベースのプロキシ認証に対するTopLinkのサポートを使用できます。

排他独立クライアント・セッションを使用してセキュアなデータの認証済の読取りおよび書込みを提供する場合

この構成の場合、クライアント・セッションは、排他プロキシ接続を使用する独立したクライアント・セッションです(87.5項「独立クライアント・セッション」を参照)。プロキシ認証のユーザー資格証明を指定するConnectionPolicyを使用してクライアント・セッションを取得する必要があります。セキュアなデータの読取りおよび書込みは、プロキシ認証接続を通じて実行されます。セキュアでないデータの読取りは、非プロキシ認証接続を通じて実行されます。

Oracle Virtual Private Database(VPD)(87.5.1項「独立クライアント・セッションとOracle Virtual Private Database(VPD)」を参照)を使用する場合、この構成を使用して、データベース全体でVPDサポートを設定します。つまり、独立したクライアント・セッションがSQLを実行するのではなく(92.2項「PostAcquireExclusiveConnectionイベント・ハンドラの使用」および92.3項「PreReleaseExclusiveConnectionイベント・ハンドラの使用」を参照)、プロキシsession_userを使用したログイン・トリガー以降にデータベースが必要な設定を実行します。

データベースの監査目的でクライアント・セッションに認証済の書込みを提供する場合

この構成の場合、分離データまたは排他接続は要求されません。プロキシ認証のユーザー資格証明を指定するConnectionPolicyを使用してクライアント・セッションを取得する必要があります。

書込みは、プロキシ認証接続を通じて実行されます。読取りは、非プロキシ認証接続を通じて実行されます。これにより、データベース監査プロセスは、書込み操作を実行したユーザーにアクセスできます。

データベース・セッションに認証済の読取りおよび書込みを提供する場合

この構成の場合、DatabaseSessionオブジェクトとプロキシ認証ログインを組み合せて使用します。すべての読取りおよび書込みは、プロキシ認証接続を通じて実行されます。


注意:

3層環境でサーバーおよびクライアント・セッションを排他的に使用することをお薦めします。

データベース・セッションは、3層環境で使用しないでください。データベース・セッションは、単一のユーザーにのみ使用され、同時にアクセスされないように構成します。


98.8.1 Javaを使用したOracleデータベースのプロキシ認証の構成方法

Oracleデータベースのプロキシ認証を構成するには、Javaコードでセッションをカスタマイズします(sessions.xmlファイルの使用時にSessionCustomizerを通じてカスタマイズするなど)。構成したTopLinkのDatasourceLogin JNDIConnectorは、JDBCドライバに適した(oracle.toplink.platform.database.oracleの)TopLinkプロキシ・コネクタ・インスタンスでラップし、プロキシ認証プロパティを構成できます。

Oracle JDBCシン・ドライバとOCIドライバのどちらを使用しているかに関係なく、oracle.jdbc.OracleConnectionに定義されているプロパティ定数と、OracleJDBC10_1_0_2ProxyConnectorを使用します。

設定するプロパティは、表adを参照してください。


注意:

プロパティの定数名および値は、PROXYTYPE_定数(PROXYTYPE_USER_NAMEなど)を除いて、2つのクラス間で一貫しています。OracleOCIConnectionPoolの場合、これらのタイプはStringであり、OracleConnectionの場合、これらのタイプはintです。Oracle JDBCシン・ドライバとOracleJDBC10_1_0_2ProxyConnectorを使用する場合は、常にこれらのプロパティをStringとして設定する必要があります。次に例を示します。
login.setProperty(
    "proxytype", Integer.toString(OracleConnection.PROXYTYPE_USER_NAME));

TopLinkでOracleデータベースのプロキシ認証を使用するように構成するには、次の手順を実行します。

  1. 使用するプロキシ・タイプを決定し、適切なユーザーおよびロールを作成します。

    1. ユーザー名の認証:

      ユーザー名のみに基づいてプロキシ・ユーザーsarahを認証する場合、次を使用してOracleデータベースでユーザー・アカウントを作成します。

      alter user sarah grant connect through dbadminuser
          with roles clerk, reports;
      

      この場合、表98-2に示すように、プロキシのプロパティを設定する必要があります。

      表98-2 ユーザー名を認証するためのプロキシのプロパティ

      プロパティ名 プロパティ値

      "proxytype"

      PROXYTYPE_USER_NAME

      PROXY_USER_NAME

      "sarah"

      PROXY_ROLES

      String[] {"role1", "role2", ...}


    2. ユーザー名およびパスワードの認証:

      ユーザー名およびパスワードに基づいてプロキシ・ユーザーsarahを認証する場合、次を使用してOracleデータベースでユーザー・アカウントを作成します。

      alter user sarah grant connect through dbadminuser
          authenticated using password
          with roles clerk, reports;
      

      この場合、表98-3に示すように、プロキシのプロパティを設定する必要があります。

      表98-3 ユーザー名およびパスワードを認証するためのプロキシのプロパティ

      プロパティ名 プロパティ値

      "proxytype"

      PROXYTYPE_USER_NAME

      PROXY_USER_NAME

      "sarah"

      PROXY_PASSWORD

      "passwordforsarah"

      PROXY_ROLES

      String[] {"role1", "role2", ...}


    3. 識別名の認証:

      グローバルに一意の識別名に基づいてプロキシ・ユーザーsarahを認証する場合、次を使用してOracleデータベースでユーザー・アカウントを作成します。

      create user sarah identified globally as
          'CN=sarah,OU=americas,O=oracle,L=city,ST=ca,C=us';
      alter user sarah grant connect through dbadminuser
          authenticated using distinguished name
          with roles clerk, reports;
      

      この場合、表98-4に示すように、プロキシのプロパティを設定する必要があります。

      表98-4 識別名を認証するためのプロキシのプロパティ

      プロパティ名 プロパティ値

      "proxytype"

      PROXYTYPE_DISTINGUISHED_NAME

      PROXY_DISTINGUISHED_NAME

      "CN=sarah,OU=americas,O=oracle,L=city,ST=ca,C=us"

      PROXY_ROLES

      String[] {"role1", "role2", ...}


    4. 証明書の認証:

      暗号化された識別名に基づいてプロキシ・ユーザーsarahを認証する場合、次を使用してOracleデータベースでユーザー・アカウントを作成します。

      alter user sarah grant connect through dbadminuser
          authenticated using certificate
          with roles clerk, reports;
      

      この場合、表98-2に示すように、プロキシのプロパティを設定する必要があります。

      表98-5 証明書を認証するためのプロキシのプロパティ

      プロパティ名 プロパティ値

      "proxytype"

      PROXYTYPE_CERTIFICATE

      PROXY_CERTIFICATE

      byte[] {EncryptedCertificate}

      PROXY_ROLES

      String[] {"role1", "role2", ...}


  2. Javaコードを使用してセッション・ログインを構成します。これは、sessions.xmlファイルの使用時にSessionCustomizerを通じて実行します。

    次の例では、指定済のJNDIConnectorを適切なTopLinkプロキシ認証コネクタでラップする方法を示します。サーバー・セッションのデフォルトの接続ポリシーを同じプロキシ認証ログインに設定できます。

    Oracle VPD(87.5.1項「独立クライアント・セッションとOracle Virtual Private Database(VPD)」)を使用する場合、排他接続を使用するための接続ポリシーと、セキュアなデータを分離するためのディスクリプタを設定する必要があります(119.13項「ディスクリプタ・レベルでのキャッシュ分離機能の構成」)。

    Login login = server.getDatasourceLogin();
    // Make sure that external connection pooling is used
    login.setUsesExternalConnectionPooling(true);
    // Wrap JNDIConnector with OracleJDBC10_1_0_2ProxyConnector
    login.setConnector(
        new OracleJDBC10_1_0_2ProxyConnector(
            ((JNDIConnector)login.getConnector()).getName()));
    ConnectionPolicy policy = server.getDefaultConnectionPolicy();
    policy.setPoolName(null);
    policy.setLogin(login);
    // If using Oracle VPD support, set the connection policy to exclusive
    
    policy.setShouldUseExclusiveConnection(true);
    

    アプリケーション・サーバーによって提供されたデータ・ソースの使用時に問題が発生する場合があります。その場合、次のコードは使用しません。

    login.setConnector(new OracleJDBC10_1_0_2ProxyConnector
                              (((JNDIConnectorlogin.getConnector()).getName()));
    

    かわりに、次のようにデータ・ソースを作成します。

    oracle.jdbc.pool.OracleDataSource ds = new oracle.jdbc.pool.OracleDataSource();
    ds.setUser("MyMainUser");
    ds.setPassword("MyPassword");
    ds.setUrl("jdbc:oracle:thin:@MyServer:1521:MyDb");
    login.setConnector( new OracleJDBC10_1_0_2ProxyConnector(ds));
    
  3. このユーザーの資格証明でConnectionPolicyを指定して、プロキシ認証のクライアント・セッションを取得します。

    ConnectionPolicy policy =
        (ConnectionPolicy)server.getDefaultConnectionPolicy().clone();
    Login login = (Login)policy.getLogin().clone;
    // Set proxy properties into connection policy's login
    login.setProperty("proxytype" , OracleOCIConnectionPool.PROXYTYPE_USER_NAME);
    login.setProperty(OracleOCIConnectionPool.PROXY_USER_NAME ,"sarah");
    policy.setLogin(login);
    Session session = server.acquireClientSession(policy);