この章では、TopLinkデータ・ソース・ログインを構成する方法について説明します。
この章の内容は次のとおりです。
表97-1は、構成可能なTopLinkデータ・ソース・ログインのタイプと、そのタイプで対応している構成可能オプションが記載されたタイプ別の章への相互参照を示します。
表97-2は、複数のTopLinkデータ・ソース・ログインのタイプによって共有される構成可能オプションを示します。
sessions.xmlファイルを使用してログイン情報を構成する場合、project.xmlのログイン情報がオーバーライドされ、かわりにsessions.xml構成の情報が使用されます。
詳細は、次を参照してください。
表97-2は、複数のTopLinkデータ・ソース・ログインのタイプによって共有される構成可能オプションを示します。ここで説明する構成可能オプション以外にも、表97-1に示すように、特定のデータ・ソース・ログインのタイプ(96.1.2項「データ・ソース・ログインのタイプ」を参照)について説明しているオプションも構成する必要があります。
表97-2 共通データ・ソース・ログインのオプション
| 構成オプション | Oracle JDeveloper |
TopLink Workbench |
Java |
|---|---|---|---|
|
ユーザー名およびパスワード(97.2項「ユーザー名およびパスワードの構成」を参照) |
![]() |
![]() |
![]() |
|
パスワード暗号化(97.3項「パスワード暗号化の構成」を参照) |
![]() |
![]() |
![]() |
|
外部接続プーリング(97.4項「外部接続プーリングの構成」を参照) |
![]() |
![]() |
![]() |
|
プロパティ(97.5項「プロパティの構成」を参照) |
![]() |
![]() |
![]() |
|
デフォルトのNULL値(97.6項「ログイン・レベルでのデフォルトのNULL値の構成」を参照) |
![]() |
![]() |
![]() |
必要な場合、ログインのユーザー名およびパスワードを指定できます。
デプロイ・ログインにはパスワードを保存しないことをお薦めします。
TopLinkツールまたはJavaを使用してパスワードを指定する場合、プレーン・テキスト(暗号化されていない)値を入力します。TopLinkでは、JCE暗号化によってパスワードが暗号化されます。
デフォルトでは、JCE暗号化を使用した暗号形式でsessions.xmlファイルに対してパスワードの書込みおよび読取りが行われます。
デフォルトでは、プロジェクト・レベルのデータ・ソース・ログインを適切に構成していない場合、TopLinkではproject.xmlファイルに対してパスワードの書込みおよび読取りが行われません。TopLinkでproject.xmlファイルに対してパスワードの書込みおよび読取りを行うように構成する場合、デフォルトでは、JCE暗号化使用した暗号形式で行われます。
詳細は、次を参照してください。
デフォルトでは、JCE暗号化を使用した暗号形式でsessions.xmlファイルに対してパスワードの書込みおよび読取りが行われます。
デフォルトでは、プロジェクト・レベルのデータ・ソース・ログインを適切に構成していない場合、TopLinkではproject.xmlファイルに対してパスワードの書込みおよび読取りが行われません。TopLinkでproject.xmlファイルに対してパスワードの書込みおよび読取りを行うように構成する場合、デフォルトでは、JCE暗号化使用した暗号形式で行われます。
独自の暗号化クラスを実装し、セッションDatasourceLoginで使用されるように構成できます。
現在、Oracle JDeveloperまたはTopLink Workbenchのいずれにおいても、使用される暗号化クラスの指定はサポートされていません。使用される暗号化クラスを変更するには、Javaでログインを変更する必要があります。
詳細は、次を参照してください。
パスワード暗号化クラスを構成するには、次の手順に従います。
暗号化クラスを作成します。
暗号化クラスは、oracle.toplink.internal.security.Securableインタフェースを実装する必要があります(例97-1を参照)。
暗号化クラスを使用してセッションを構成するには、DatasourceLoginメソッドであるsetEncryptionClassNameを呼び出すpreLoginイベント用にセッション・イベント・リスナー・クラスを作成します。
SessionEventAdapterを使用してセッション・イベント・リスナーを簡略化します(例97-2を参照)。
例97-2 セッション・イベント・リスナーにおけるカスタム暗号化クラスの指定
import oracle.toplink.tools.sessionconfiguration.SessionEventAdapter;
import oracle.toplink.sessions.SessionEvent;
import oracle.toplink.sessions.Session;
import oracle.toplink.sessions.DatasourceLogin;
public class MySessionEventListener extends SessionEventAdapter {
public void preLogin(SessionEvent event) {
Session session = event.getSession();
DatasourceLogin login = session.getDatasourceLogin();
login.setEncryptionClassName(MyEncryptor.class.getName());
}
}
セッション・イベント・リスナー・クラスをセッションと関連付けます。
詳細は、89.10項「セッション・イベント・リスナーの構成」を参照してください。
非Java EEアプリケーションの場合は通常、TopLinkが提供する内部接続プールを使用します(96.1.6.1項「内部接続プール」を参照)。この場合、Oracle JDeveloperまたはTopLink Workbenchを使用して、接続プールのオプションを構成し、シーケンス接続プールおよびアプリケーション固有の(名前付き)接続プールを作成できます。
Java EEアプリケーションの場合は通常、JDBCドライバまたはJava EEコンテナが提供する外部接続プールを使用します(96.1.6.2項「外部接続プール」を参照)。必要な場合、非トランザクション・ログインを使用するように読取り接続プールを構成することや、独自の個別(可能であれば非トランザクション)ログインを使用するようにシーケンス接続プールを構成することが可能です。
JTA外部トランザクション・コントローラはアプリケーション・サーバーから提供される外部トランザクション・サービスに依存するため、外部トランザクション・コントローラを使用する場合は、外部接続プールを使用するようにTopLinkを構成する必要があります(115.13項「作業ユニットと外部トランザクション・サービスの統合」を参照)。
外部接続プールを使用すると、TopLinkアプリケーションで次のことが可能になります。
Java EE対応システムへの統合
JTAトランザクションとの統合(JTAトランザクションはJTA対応のデータ・ソースを必要とします)
複数のアプリケーションが同じデータ・ソースを使用する、共有接続プールの活用
構成と管理が直接サーバーで行われるデータ・ソースの使用
接続プールの詳細は、96.1.6項「接続プール」を参照してください。
セッション・ログインで外部接続プールを使用するかどうかを指定するには、次の手順を実行します。
アプリケーション・サーバーでデータ・ソースを構成します。
外部トランザクション・コントローラとともに外部接続プールを使用する場合(89.9項「サーバー・プラットフォームの構成」を参照)、JTA対応のデータ・ソースを構成するようにしてください。
詳細は、Java EEコンテナのドキュメントを参照してください。
ナビゲータでサーバーまたはデータベース・セッションを選択します。そのプロパティがエディタに表示されます。
「ログイン」タブをクリックします。「ログイン」タブが表示されます。
「接続」サブタブをクリックします。「接続」サブタブが表示されます。
図97-2 「ログイン」タブ、「接続」サブタブ、「外部接続プーリング」フィールド、「データベース・ドライバ」

このログインで外部接続プールを使用するかどうかを指定します。データベース・ドライバの場合、外部接続プーリングはオプションです。Java EEデータ・ソースの場合、外部接続プーリングは必須です。
Javaで外部接続プールを構成するには、次の手順を実行します。
アプリケーション・サーバーでデータ・ソースを構成します。
外部トランザクション・コントローラとともに外部接続プールを使用する場合(89.9項「サーバー・プラットフォームの構成」を参照)、JTA対応のデータ・ソースを構成するようにしてください。
詳細は、Java EEコンテナのドキュメントを参照してください。
データ・ソースを指定し、useExternalConnectionPoolingメソッドを使用して外部接続プーリングを使用するようにDatasourceLoginを構成します。
すべてのDatasourceLoginタイプについて、プロパティと呼ばれる名前付きのカスタム値を指定できます。一部のデータ・ソースには、DatasourceLogin APIではサポートされていない別のドライバ固有プロパティが必要です(たとえば、12.11.1項「JDBCドライバ・プロパティの最適化方法」を参照)。これらのプロパティをDatasourceLoginに追加することにより、TopLinkがこれらをドライバに渡せるようにします。
リレーショナル・セッションの場合、最初に詳細オプションでプロパティの使用を有効にする必要があります(98.7項「詳細オプションの構成」を参照)。
EISセッションの場合、プロパティは常に有効です。
|
注意: パスワードをプロパティとして設定しないでください。常にOracle JDeveloper、TopLink Workbench、またはDatabaseLoginのメソッドsetPasswordを使用してください。パスワードの構成の詳細は、97.2項「ユーザー名およびパスワードの構成」を参照してください。 |
TopLink Workbenchを使用する場合、設定できるのは、Stringオブジェクトとして返される文字値のみです(97.5.1項「TopLink Workbenchを使用したプロパティの構成方法」を参照)。
Javaを使用する場合、任意のObject値を設定できます(97.5.2項「Javaを使用したプロパティの構成方法」を参照)。
DatasourceLoginに関連付けられる任意の名前付き値のペアを指定するには、次の手順を実行します。
ナビゲータでサーバーまたはデータベース・セッションを選択します。そのプロパティがエディタに表示されます。
「ログイン」タブをクリックします。「ログイン」タブが表示されます。
必要に応じて、プロパティのサポートを有効にします。
リレーショナル・セッションの場合、最初に詳細オプションでプロパティの使用を有効にする必要があります(98.7項「詳細オプションの構成」を参照)。
EISセッションの場合、プロパティは常に有効です。
「プロパティ」サブタブをクリックします。「プロパティ」サブタブが表示されます。
新しい「名前/値」プロパティを追加するには、「追加」(または「編集」)をクリックします。プロパティの追加ダイアログ・ボックスが表示されます。
プロパティの追加ダイアログ・ボックスで、次の情報を使用してログイン・プロパティを追加または編集します。
| オプション | 説明 |
|---|---|
| 名前 | TopLinkがDatasourceLoginのメソッドgetPropertyを使用してプロパティ値を取得するための名前。 |
| 値 | TopLinkがDatasourceLoginのメソッドgetPropertyを使用して、対応するプロパティ名を渡して取得する値。
TopLink Workbenchを使用する場合、設定できるのは、 |
既存のプロパティを削除するには、「名前/値」の行を選択し、「削除」をクリックします。
Javaを使用する場合、DatasourceLoginのメソッドsetPropertyを使用して任意のObject値を設定できます。プロパティを削除するには、DatasourceLoginのメソッドremovePropertyを使用します。
デフォルトのNULL値は、TopLinkがnull値をデータ・ソースから読み取るときにnullのかわりに使用するJavaのObjectタイプおよび値です。
デフォルトのNULL値をログイン・レベルで構成すると、セッションで使用されるすべてのマッピングにこの値が適用されます。この場合、TopLinkは、この値を使用して1方向でのみ変換を行います。TopLinkは、データ・ソースからnullを読み取る場合、このnullを指定されたタイプおよび値に変換します。
また、TopLinkを使用して、マッピングごとにデフォルトのNULL値を設定することもできます(121.5項「マッピング・レベルでのデフォルトのNULL値の構成」を参照)。
|
注意: デフォルトのNULL値は、Objectである必要があります。プリミティブ値(intなど)を指定するには、対応するObjectラッパー(Integerなど)を使用する必要があります。 |
Java APIを使用する場合、DatabaseLoginのメソッドsetDefaultNullValue(Class,Object)を使用して、セッションで使用されるすべてのマッピングに対してデフォルトのNULL値を構成できます。
次に例を示します。
// Defaults all null String values read from the database to empty String
session.getLogin().setDefaultNullValue(String.class, "");