8 データソースおよびURL
この章では、Java Database Connectivity(JDBC)データソースを使用したアプリケーションのデータベースへの接続と、データベースを記述するURLについて説明します。この章の構成は、次のとおりです。
8.1 データソースについて
データソースは、使用するデータベースまたはその他のリソースを指定するための標準汎用オブジェクトです。データソースの概念は、JDBC 2.0 Extension Application Program Interface(API)で導入されました。データソースは、便宜性と移植性のために、Java Naming and Directory Interface(JNDI)の実体にバインドできるため、データベースには論理名でアクセスできます。
データソース機能は、以前のJDBC DriverManager
機能の完全な代替機能を提供します。いずれの機能も同じアプリケーションで使用できますが、使用しているアプリケーションはデータソースに移行することをお薦めします。
この項の内容は次のとおりです。
8.1.1 JNDIのOracleデータソース・サポートの概要
JNDI標準は、リモート・サービスおよびリソースを検出してアクセスする方法をアプリケーションに提供します。これらのサービスは、エンタープライズ・サービスにも可能です。ただし、JDBCアプリケーションの場合は、これらのサービスにデータベース接続およびサービスが含まれます。
JNDIを使用すると、アプリケーションはアプリケーション・コードからベンダー固有の構文を削除し、論理名を使用してこれらのサービスにアクセスできます。JNDIには、目的のサービスの特定のソースと論理名を関連付ける機能があります。
すべてのOracle JDBCデータソースは、JNDIによる参照が可能です。開発者が必ずしもこの機能を使用する必要はありませんが、JNDI論理名を使用してデータベースにアクセスすると、コードの移植性が高まります。
ノート:
JNDI機能の使用には、CLASSPATH
環境変数にjndi.jar
ファイルが含まれている必要があります。このファイルは、Java製品とともにインストール・メディアに含まれています。CLASSPATH
環境変数に、別個に追加する必要があります。
8.1.2 データソースの機能とプロパティ
JNDIを使用するデータソース機能では、ベンダー固有のJDBCドライバ・クラス名を登録する必要はなく、URLとその他のプロパティの論理名を使用できます。このため、データベース接続をオープンするためのコードは、他の環境に移植できます。
DataSourceインタフェースとOracle実装
JDBCデータソースは、標準javax.sql.DataSource
インタフェースを実装するクラスのインスタンスです。
public interface DataSource { Connection getConnection() throws SQLException; Connection getConnection(String username, String password) throws SQLException; ... }
Oracleでは、このインタフェースをoracle.jdbc.pool
パッケージのOracleDataSource
クラスに実装しています。オーバーロードされたgetConnection
メソッドは、データベースへの接続を戻します。
他の値を使用するには、適切なsetterメソッドを使用してプロパティを設定します。代替のユーザー名とパスワードを設定するには、入力としてこれらのパラメータを取るgetConnection
メソッドを使用することもできます。この設定は、プロパティ設定よりも優先されます。
ノート:
OracleDataSource
クラスとすべてのサブクラスは、java.io.Serializable
インタフェースとjavax.naming.Referenceable
インタフェースを実装します。
DataSourceのプロパティ
DataSource
インタフェースを実装するすべてのクラスと同様に、OracleDataSource
クラスは、接続するデータベースの指定に使用できる一連のプロパティを提供します。これらのプロパティはJavaBeansのデザインパターンに従います。
次の表に、OracleDataSource
標準プロパティおよびOracle拡張機能を示します。
ノート:
Oracleは標準roleName
プロパティを実装していません。
表8-1 標準データソース・プロパティ
名前 | 型 | 説明 |
---|---|---|
|
|
サーバー上の特定のデータベースの名前。 |
|
|
基礎となるデータソース・クラスの名前。接続プーリングの場合、これはプーリングされた基礎となる接続データソース・クラスです。分散トランザクションの場合、これは基礎となるXAデータソース・クラスです。 |
|
|
データソースの説明。 |
|
|
サーバーとの通信のためのネットワーク・プロトコル。Oracleでは、JDBC Oracle Call Interface(OCI)ドライバにのみ該当し、デフォルトは |
|
|
接続するユーザーのパスワード。 |
|
|
サーバーがリクエストをリスニングするポートの番号。 |
|
|
データベース・サーバーの名前。 |
|
|
ログイン用の名前。 |
ノート:
セキュリティ上の理由により、getPassword()
メソッドはありません。
表8-2 Oracle拡張データソース・プロパティ
名前 | 型 | 説明 |
---|---|---|
|
|
キャッシュの名前を指定します。キャッシュを作成した後は変更できません。 |
|
|
暗黙的接続キャッシュのプロパティを指定します。 |
|
|
暗黙的接続キャッシュが使用中かどうかを指定します。 |
|
|
接続プロパティを指定します。 |
|
|
Oracle JDBCドライバのタイプを指定します。 |
|
|
高速接続フェイルオーバーが使用中かどうかを指定します。 |
|
|
暗黙的文接続キャッシュが有効かどうかを指定します。 |
|
|
このデータソースがデータベースへの接続の試行中に待機する最大時間(秒)を指定します。 |
|
|
このデータソースのログ・ライターを指定します。 |
|
|
アプリケーションのキャッシュ内に存在する文の最大数を指定します。 |
|
|
このデータソースに対するデータベース・サービス名を指定します。 |
|
|
TNSエントリ名を指定します。TNSエントリ名は、 OCIドライバでネイティブXA機能を使用する場合は、この |
|
|
データベース接続文字列のURLを指定します。以前のバージョンのOracle Databaseから移行する際の便宜を考えて提供されるものです。Oracle |
|
OCIドライバでネイティブXA機能を使用する場合は、 この |
|
|
|
FAN/ONSイベントのリモートでのサブスクライブに使用するONS構成を指定します。 |
ノート:
-
この表では、非推奨となった接続キャッシュを
OracleConnectionCache
に基づいてサポートしていたプロパティは省略されています。 -
ネイティブXAは、Java XAよりパフォーマンスが高いため、可能なかぎりネイティブXAを使用してください。
setConnectionProperties
メソッドを使用して接続のプロパティを設定し、setConnectionCacheProperties
メソッドを使用して接続キャッシュのプロパティを設定します。
サーバー側内部ドライバを使用している場合、つまりdriverType
プロパティがkprb
に設定されている場合、その他のプロパティ設定は無視されます。
JDBC ThinドライバまたはOCIドライバを使用している場合は、次の点に注意してください。
-
URL設定には、次の例のように
user
とpassword
の設定が含まれることがあります。この場合は、この設定が個々のuser
およびpassword
プロパティ設定よりも優先されます。jdbc:oracle:thin:HR/hr@localhost:5221:orcl
-
user
とpassword
は、URL設定を介して直接設定するか、またはgetConnection
コールを介して設定する必要があります。getConnection
コールによるuser
とpassword
の設定は、他のプロパティ設定よりも優先されます。 -
url
プロパティを設定した場合は、tnsEntry
、driverType
、portNumber
、networkProtocol
、serverName
およびdatabaseName
プロパティ設定は無視されます。 -
tnsEntry
プロパティを設定した場合(url
プロパティは設定されていないものとします)、databaseName
、serverName
、portNumber
およびnetworkProtocol
の各設定は無視されます。 -
OCIドライバを使用しているときに(
driverType
プロパティはoci
に設定されているものとします)、networkProtocol
がipc
に設定されている場合、他のプロパティ設定は無視されます。
またgetConnectionCacheName()
は、データソースのキャッシュが有効になった後でデータソースのConnectionCacheName
プロパティが設定された場合にのみキャッシュの名前を戻します。
8.1.3 データソース・インスタンスの作成と接続
この項では、JNDI機能を使用せずにデータベースに接続する場合の、データソースの最も基本的な使用例を示します。ベンダーによってはベンダー固有のハードコードされたプロパティ設定が必要であることに注意してください。
次の例のようにOracleDataSource
インスタンスを作成し、必要に応じて接続プロパティを初期化して、接続インスタンスを取得します。
OracleDataSource ods = new OracleDataSource();
ods.setDriverType("oci");
ods.setServerName("localhost");
ods.setNetworkProtocol("tcp");
ods.setDatabaseName(<database_name>);
ods.setPortNumber(5221);
ods.setUser("HR");
ods.setPassword("hr");
Connection conn = ods.getConnection();
または、必要に応じて次のようにユーザー名とパスワードをオーバーライドします。
Connection conn = ods.getConnection("OE", "oe");
8.1.4 データソース・インスタンスの作成、JNDIへの登録および接続
この項では、データソースを使用してデータベースに接続する場合のJNDI機能を示します。ベンダー固有のハードコードされたプロパティ設定は、データソース・インスタンスをJNDI論理名にバインドするコードの部分でのみ必要になります。これ以降は、接続インスタンスを取得するデータソースを作成するために、論理名を使用して、移植可能なコードを作成できます。
ノート:
データソースの作成と登録は、一般にJDBCアプリケーションではなく、JNDI管理者によって処理されます。
データソース・プロパティの初期化
次の例に示すように、OracleDataSource
インスタンスを作成し、必要に応じてそのプロパティを初期化します。
OracleDataSource ods = new OracleDataSource(); ods.setDriverType("oci"); ods.setServerName("localhost"); ods.setNetworkProtocol("tcp"); ods.setDatabaseName("816"); ods.setPortNumber(5221); ods.setUser("HR"); ods.setPassword("hr");
データソースの登録
前述の例で示したように、OracleDataSource
インスタンスods
の接続プロパティを初期化した後は、次の例に示すように、このデータソース・インスタンスをJNDIに登録できます。
Context ctx = new InitialContext(); ctx.bind("jdbc/sampledb", ods);
JNDI InitialContext()
コンストラクタをコールすると、初期JNDIネーミング・コンテキストを参照するJavaオブジェクトが作成されます。表示されていないシステム・プロパティによって、使用するサービス・プロバイダがJNDIに指示されます。
ctx.bind
コールは、OracleDataSource
インスタンスを論理JNDI名にバインドします。つまり、ctx.bind
をコールした後、いつでも論理名jdbc/sampledb
を使用して、OracleDataSource
インスタンスods
のプロパティによって記述されるデータベースへの接続をオープンできます。論理名jdbc/sampledb
は、このデータベースに論理的にバインドされます。
JNDIネームスペースの階層構造は、ファイルシステムの階層構造と似ています。この例で、JNDI名はルート・ネーミング・コンテキストでサブコンテキストjdbc
を指定し、jdbc
サブコンテキスト内で論理名sampledb
を指定します。
Context
インスタンスとInitialContext
クラスは、標準javax.naming
パッケージ内にあります。
ノート:
JDBC 2.0仕様では、すべてのJDBCデータソースを、JNDIネームスペースのjdbc
ネーミング・サブコンテキスト、またはjdbc
サブコンテキストの子サブコンテキストに登録する必要があります。
接続のオープン
lookupを実行して、JNDI名に論理的にバインドされたデータベースへの接続をオープンするには、論理JNDI名を使用します。これを実行するには、lookupの結果(Java Object
も可)をOracleDataSource
にキャストし、そのgetConnection
メソッドを使用して接続をオープンします。
次はその例です。
OracleDataSource odsconn = (OracleDataSource)ctx.lookup("jdbc/sampledb"); Connection conn = odsconn.getConnection();
8.1.5 サポートされている接続プロパティ
Oracle JDBCドライバがサポートする接続プロパティの詳細なリストは、『Oracle Database JDBC Java APIリファレンス』を参照してください。
8.1.6 SYSログオンのためのロールの使用方法について
SYS
でログオンするためのロールを指定するには、internal_logon
接続プロパティを使用します。SYS
でログオンするには、internal_logon
接続プロパティを、SYSDBA
またはSYSOPER
に設定します。
ノート:
ロールを指定する機能は、sys
ユーザー名の場合のみサポートされています。
Bequeathed接続の場合、internal_logon
プロパティを設定することにより、SYS
として接続を取得できます。リモート接続の場合、追加でパスワード・ファイルの設定手順を実行する必要があります。
8.1.7 データベース・リモート・ログインの構成
JDBC ThinドライバがSYSDBA
としてデータベースに接続できるようにするには、ユーザーを構成する必要があります。Oracle Databaseのセキュリティ・システムで管理者としてリモート接続するためにはパスワード・ファイルが必要です。次の手順を実行します。
例8-1 リモート接続でのSYSログインの使用
//This example works regardless of language settings of the database. /** case of remote connection using sys **/ import java.sql.*; import oracle.jdbc.*; import oracle.jdbc.pool.*; // create an OracleDataSource OracleDataSource ods = new OracleDataSource(); // set connection properties java.util.Properties prop = new java.util.Properties(); prop.put("user", "sys"); prop.put("password", "sys"); prop.put("internal_logon", "sysoper"); ods.setConnectionProperties(prop); // set the url // the url can use oci driver as well as: // url = "jdbc:oracle:oci8:@remotehost"; the remotehost is a remote database String url = "jdbc:oracle:thin:@//localhost:5221/orcl"; ods.setURL(url); // get the connection Connection conn = ods.getConnection(); ...
8.1.8 Bequeath接続とSYSログオンの使用
次の例は、SYS
ログインを指定するための、internal_logon
およびSYSDBA
引数の使用方法を示しています。この例は、データベースの各国語設定に関係なく動作します。
/** Example of bequeath connection **/ import java.sql.*; import oracle.jdbc.*; import oracle.jdbc.pool.*; // create an OracleDataSource instance OracleDataSource ods = new OracleDataSource(); // set neccessary properties java.util.Properties prop = new java.util.Properties(); prop.put("user", "sys"); prop.put("password", "sys"); prop.put("internal_logon", "sysdba"); ods.setConnectionProperties(prop); // the url for bequeath connection String url = "jdbc:oracle:oci8:@"; ods.setURL(url); // retrieve the connection Connection conn = ods.getConnection(); ...
8.1.9 Oracleパフォーマンス拡張機能のプロパティの設定
接続プロパティの一部は、Oracleパフォーマンス拡張機能で使用します。これらのプロパティの設定は、次のようにOracleConnection
オブジェクトで対応するメソッドを使用することと同等です。
-
defaultRowPrefetch
プロパティの設定は、setDefaultRowPrefetch
のコールと同等です。 -
remarksReporting
プロパティの設定は、setRemarksReporting
のコールと同等です。
例
次の例は、java.util.Properties
クラスのput
メソッドの使用方法を示します。この例では、Oracleパフォーマンス拡張要素のパラメータを設定する方法を示します。
//import packages and register the driver import java.sql.*; import java.math.*; import oracle.jdbc.*; import oracle.jdbc.pool.OracleDataSource; //specify the properties object java.util.Properties info = new java.util.Properties(); info.put ("user", "HR"); info.put ("password", "hr"); info.put ("defaultRowPrefetch","20"); info.put ("defaultBatchValue", "5"); //specify the datasource object OracleDataSource ods = new OracleDataSource(); ods.setURL("jdbc:oracle:thin:@//localhost:5221/orcl"); ods.setUser("HR"); ods.setPassword("hr"); ods.setConnectionProperties(info); ...
8.1.10 ネットワーク・データ圧縮のサポート
Oracle Database 12cリリース2 (12.2.0.1)以降、JDBC Thinドライバではネットワーク・データ圧縮がサポートされています。ネットワーク・データ圧縮により、データ接続を介して送信されるセッション・データ・ユニット(SDU)のサイズが削減され、ネットワークを介してSQL問合せおよび結果を送信するのに必要な時間が短縮します。ワイヤレス・エリア・ネットワーク(WAN)の場合に、この利点がより重要になります。ネットワーク・データ圧縮を有効にするには、次のように接続プロパティを設定する必要があります。
ノート:
ネットワーク圧縮は、ストリーム処理されたデータでは機能しません。
...
OracleDataSource ds = new OracleDataSource();
Properties prop = new Properties();
prop.setProperty("user","user1");
prop.setProperty("password",<password>);
// Enabling Network Compression
prop.setProperty("oracle.net.networkCompression","on");
//Optional configuration for setting the client compression threshold.
prop.setProperty("oracle.net.networkCompressionThreshold","1024");
ds.setConnectionProperties(prop);
ds.setURL(url);
Connection conn = ds.getConnection();
...
8.2 データベースURLとデータベース指定子
データベースURLは文字列です。完全なURL構文は、次のとおりです。
jdbc:oracle:driver_type:[username/password]@database_specifier
ノート:
-
大カッコは、
username
/
password
ペアがオプションであることを示します。
-
内部サーバー側ドライバ
kprb
は、暗黙的な接続を使用します。サーバー側ドライバのデータベースURLはdriver_type
で終わります。
URLの最初の部分には、使用するJDBCドライバを指定します。サポートされているdriver_type
値は、thin
、oci
およびkprb
です。
URLの残りの部分には、スラッシュで区切られたユーザー名とパスワード(オプション)、@、およびアプリケーションが接続されるデータベースを一意に識別するデータベース指定子が含まれます。データベース指定子には、JDBC Thinドライバにのみ有効なもの、JDBC OCIドライバにのみ有効なもの、両方に有効なものがあります。
8.2.1 インターネット・プロトコル・バージョン6のサポート
Oracle JDBCドライバの今回のリリースでは、インターネット・プロトコル・バージョン6(IPv6)のアドレスを、JDBC URLとIPv6のアドレスに解決するマシン名でサポートします。IPv6は、Internet Engineering Task Force(IETF)で設計された新しいネットワーク層プロトコルで、Internet Protocolの現行バージョンのInternet Protocol Version 4(IPv4)に代わるものです。IPv6の主な利点として、128ビット・アドレスの使用から導出される大容量のアドレス空間があります。IPv6ではまた、ルーティング、ネットワークの自動構成、セキュリティ、サービスの質などの分野でIPv4が改良されています。
ノート:
-
IPv6クライアントはIPv6サーバーのみ、またはデュアル・プロトコル(IPv6とIPv4の両方のプロトコル)をサポートしているサーバーをサポートできます。また、IPv6サーバーはIPv6クライアントのみ、またはデュアル・プロトコル・クライアントをサポートできます。
-
IPv6は単一インスタンス・データベース・サーバーでのみサポートされています。Oracle RACではサポートされていません。
URLでリテラルIPv6アドレスを使用する場合は、リテラル・アドレスを左の大カッコ([
)と右の大カッコ(]
)で囲む必要があります。たとえば、[2001:0db8:7654:3210:FEDC:BA98:7654:3210]
のようになります。したがって、IPv6アドレスを使用するJDBC URLは、次のようになります。
jdbc:oracle:thin:@(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp) (HOST=[2001:0db8:7654:3210:FEDC:BA98:7654:3210])(PORT=5521)) (CONNECT_DATA=(SERVICE_NAME=sales.example.com))
ノート:
データベースを初期化する際にJavaが有効な場合、IPv6のサポートに必要な新しいシステム・クラスがすべてロードされます。したがって、アプリケーションにIPv6アドレスがない場合は、IPv6機能を使用するために自分のコードを変更する必要はありません。ただし、アプリケーションにIPv6アドレスのみか、IPv6とIPv4アドレスの両方のいずれかがある場合、コマンドラインでjava.net.preferIPv6Addresses
システム・プロパティを設定する必要があります。これにより、Oracle JVMは適切なライブラリをロードできるようになります。これらのライブラリは一度ロードすると、Javaプロセスを再起動しないかぎりリロードできません。
8.2.2 HTTPSプロキシ構成のサポート
Oracle Databaseリリース18cのJDBCドライバは、HTTPSプロキシ構成をサポートしています。HTTPSプロキシを使用すると、HTTP CONNECT
メソッドを使用して、フォワードHTTPプロキシ上にセキュアな接続をトンネリングできます。これにより、クライアント側のファイアウォールにアウトバウンド・ポートをオープンする必要がなくなるため、パブリック・クラウド・データベースにアクセスしやすくなります。このパラメータはPROTOCOL=TCPS
が指定されている接続記述子に対してのみ適用可能です。これは、インターネットのホストに接続する必要があるイントラネット・ユーザーのWebブラウザ設定に似ています。
HTTPSプロキシを構成するために、次のコード・スニペットに示すように、接続文字列のADDRESS
部分に詳細を追加します。
(DESCRIPTION=
(ADDRESS=(HTTPS_PROXY=sales-proxy)(HTTPS_PROXY_PORT=8080)(PROTOCOL=TCPS)(HOST=sales2-svr)(PORT=443))
(CONNECT_DATA=(SERVICE_NAME=sales.us.example.com)))
8.2.3 データベース指定子
表8-3は、データベース指定子と各指定子がサポートするJDBCドライバを示しています。
ノート:
-
Oracle Database 10gでは、Oracle Service IDはサポートされません。
-
Oracle Database 10g以降、ネーミング・メソッドとしてのOracle Namesはサポートされなくなりました。
表8-3 サポートされるデータベース指定子
指定子 | サポートするドライバ | 例 |
---|---|---|
Oracle Net接続記述子 |
Thin、OCI |
Thinの場合。アドレス・リストを使用します。 url="jdbc:oracle:thin:@(DESCRIPTION= (LOAD_BALANCE=on) (ADDRESS_LIST= (ADDRESS=(PROTOCOL=TCP)(HOST=host1) (PORT=5221)) (ADDRESS=(PROTOCOL=TCP)(HOST=host2)(PORT=5221))) (CONNECT_DATA=(SERVICE_NAME=orcl)))" OCIの場合。クラスタを使用します。 "jdbc:oracle:oci:@(DESCRIPTION= (ADDRESS=(PROTOCOL=TCP)(HOST=cluster_alias) (PORT=5221)) (CONNECT_DATA=(SERVICE_NAME=orcl)))" |
Thin形式のサービス名 |
Thin |
詳細は、「Thin形式のサービス名の構文」を参照してください。 "jdbc:oracle:thin:HR/hr@//localhost:5221/orcl" |
LDAP構文 |
Thin |
詳細は、LDAP構文を参照してください。 "jdbc:oracle:thin:@ldap://ldap.example.com:7777/sales,cn=OracleContext,dc=com" |
Bequeath接続 |
OCI |
空。つまり、@の後には何も記述しません。 "jdbc:oracle:oci:HR/hr/@" |
TNSNames別名 |
Thin、OCI |
詳細は、「TNSNames別名の構文」を参照してください。 OracleDataSource ods = new OracleDataSource(); ods.setTNSEntryName("MyTNSAlias"); |
8.2.5 接続の再試行での遅延のサポート
Oracle Database 12cリリース1 (12.1.0.2)以降、秒単位の接続の再試行の遅延を指定する新しい接続属性RETRY_DELAY
があります。次のコード・スニペットは、この属性の使用方法を示しています。
(DESCRIPTION_LIST= (DESCRIPTION= (CONNECT_TIMEOUT=10)(RETRY_COUNT=3)(RETRY_DELAY=3) (ADDRESS_LIST= (ADDRESS=(PROTOCOL=tcp)(HOST=myhost1)(PORT=1521)) (ADDRESS=(PROTOCOL=tcp)(HOST=myhost2)(PORT=1521))) (CONNECT_DATA=(SERVICE_NAME=example1.com))) (DESCRIPTION= (CONNECT_TIMEOUT=60)(RETRY_COUNT=1)(RETRY_DELAY=5) (ADDRESS_LIST= (ADDRESS=(PROTOCOL=tcp)(HOST=myhost3)(PORT=1521)) (ADDRESS=(PROTOCOL=tcp)(HOST=myhost4)(PORT=1521))) (CONNECT_DATA=(SERVICE_NAME=example2.com))))
8.2.6 TNSNames別名の構文
接続元のクライアント・コンピュータ上のtnsnames.ora
ファイルにリストされた、利用可能なTNSNAMES
エントリを検索できます。Windowsの場合、このファイルはORACLE_HOME
\NETWORK\ADMIN
ディレクトリにあります。UNIXシステムの場合は、ORACLE_HOME
ディレクトリ、またはTNS_ADMIN
環境変数に示されているディレクトリに格納されています。
たとえば、ホストmyhost
上のデータベースに、ユーザーHR
、パスワードhr
(MyHostString
のTNSNAMES
エントリを持つ)で接続する場合は、次のように記述します。
OracleDataSource ods = new OracleDataSource(); ods.setTNSEntryName("MyTNSAlias"); ods.setUser("HR"); ods.setPassword("hr"); ods.setDriverType("oci"); Connection conn = ods.getConnection();
JDBC Thinドライバがtnsnames.ora
ファイルの位置を確認できるように、oracle.net.tns_admin
システム・プロパティをtnsnames.ora
ファイルの位置に設定する必要があります。次に例を示します。
System.setProperty("oracle.net.tns_admin", "c:\\Temp"); String url = "jdbc:oracle:thin:@tns_entry";
ノート:
TNSNames
をJDBC Thinドライバとともに使用する場合は、oracle.net.tns_admin
プロパティをtnsnames.ora
ファイルのあるディレクトリに設定する必要があります。
java -Doracle.net.tns_admin=$ORACLE_HOME/network/admin
8.2.7 LDAP構文
Lightweight Directory Access Protocol(LDAP)構文を使用するデータベース指定子の例を次に示します。
"jdbc:oracle:thin:@ldap://ldap.example.com:7777/sales,cn=OracleContext,dc=com"
SSLを使用する場合は、これを次のように変更します。
"jdbc:oracle:thin:@ldaps://ldap.example.com:7777/sales,cn=OracleContext,dc=com"
ノート:
JDBC Thinドライバの場合、データベース指定子のldap:
をldaps:
に置き換えると、LDAPを使用し、SSLを介してOracle Internet Directoryと通信できます。LDAPサーバーは、SSLを使用するように構成されている必要があります。構成されていない場合は、接続に失敗します。
JDBC Thinドライバは、サービス名解決プロセスの際、LDAPサーバーのリストのフェイルオーバーをサポートします。ハードウェア・ロード・バランサは必要ありません。また、クライアント側ロード・バランシングが、LDAPサーバーへの接続のためにサポートされます。フェイルオーバーとロード・バランシングをサポートするために、スペースで区切られたLDAP URL構文のリストが使用されます。
LDAP URLのリストを指定すると、フェイルオーバーとロード・バランシングの両方がデフォルトで有効になります。oracle.net.ldap_loadbalance
接続プロパティを使用するとロード・バランシングを無効にでき、oracle.net.ldap_failover
接続プロパティを使用するとフェイルオーバーを無効にできます。
フェイルオーバーを使用するが、クライアント側ロード・バランシングを無効にする例を次に示します。
Properties prop = new Properties(); String url = "jdbc:oracle:thin:@ldap://ldap1.example.com:3500/cn=salesdept,cn=OracleContext,dc=com/salesdb " + "ldap://ldap2.example.com:3500/cn=salesdept,cn=OracleContext,dc=com/salesdb " + "ldap://ldap3.example.com:3500/cn=salesdept,cn=OracleContext,dc=com/salesdb"; prop.put("oracle.net.ldap_loadbalance", "OFF" ); OracleDataSource ods = new OracleDataSource(); ods.setURL(url); ods.setConnectionProperties(prop);
JDBC ThinドライバはLDAP非匿名バインドをサポートします。データソースに対して、認証情報を含む一連のJNDI環境プロパティを指定できます。LDAPサーバーが匿名バインドを許可しないよう設定されている場合は、LDAPサーバーに接続するために認証情報を提供する必要があります。次の例は、簡単なクリアテキストのパスワード認証を示しています。
String url = "jdbc:oracle:thin:@ldap://ldap.example.com:7777/sales,cn=salesdept,cn=OracleContext,dc=com"; Properties prop = new Properties(); prop.put("java.naming.security.authentication", "simple"); prop.put("java.naming.security.principal","cn=salesdept,cn=OracleContext,dc=com"); prop.put("java.naming.security.credentials", "mysecret"); OracleDataSource ods = new OracleDataSource(); ods.setURL(url); ods.setConnectionProperties(prop);
JDBCがJNDIに3つのプロパティを渡すので、クライアントで選択される認証メカニズムが、これらのプロパティのJNDIでの解釈方法と矛盾することはありません。たとえば、クライアントがjava.naming.security.authentication
プロパティを明示的に指定せずに認証情報を指定する場合、デフォルトの認証メカニズムは簡易認証です。