Oracle® Fusion Middleware Oracle WebLogic Server JDBCデータ・ソースの管理 12c (12.2.1) E70015-01 |
|
前 |
次 |
この付録では、エンタープライズ・アプリケーションで使用するためのデータ・ソースのパッケージ化およびスコープ設定の方法と、パッケージ化されたJDBCモジュールの詳細について説明します。
注意: この章では、DatasourceDefinition機能がJava EE 6に導入される前にWebLogic Serverで提供されていた固有のメカニズムについて説明します。『Oracle WebLogic Server JDBCアプリケーションの開発』のJava EE DataSourcesリソースの定義に関する項を参照してください。 |
エンタープライズ・アプリケーションをパッケージ化する際、JDBCモジュールをアーカイブにパッケージ化し、適用可能なすべてのディスクリプタ・ファイル内のJDBCモジュールに参照を追加することによって、JDBCリソースをアプリケーションに組み入れることができます。アプリケーションをデプロイすると、JDBCリソースも同時にデプロイされます。JDBCモジュールの構成方法に応じて、アプリケーションによってデプロイされたJDBCデータ・ソースは、所属アプリケーション専用に限定されるか(アプリケーション・スコープのモジュール)、または、すべてのアプリケーションとクライアントで使用可能になります(グローバル・スコープのモジュール)。
この付録の構成は、次のとおりです。
エンタープライズ・アプリケーションを使用してJDBCモジュールを作成、パッケージ化、およびデプロイする場合の主要手順は次のとおりです。
モジュールを作成します。「パッケージ化JDBCモジュールの作成」を参照してください。
適用可能なすべてのディスクリプタ・ファイル内のモジュールに参照を追加します。「Java EEディスクリプタ・ファイルでのJDBCモジュールの参照」を参照してください。
すべてのアプリケーション・モジュールをEARにパッケージ化します。「JDBCモジュールによるエンタープライズ・アプリケーションのパッケージ化」を参照してください。
アプリケーションをデプロイします。「JDBCモジュールによるエンタープライズ・アプリケーションのデプロイ」を参照してください。
XMLディスクリプタ・ファイルの作成をサポートする任意の開発ツールを使用して、JDBCアプリケーション・モジュールを作成できます。次に、weblogic.Deployer
ユーティリティなどのJSR 88ベース・ツールまたは管理コンソールを使用して、JDBCモジュールをデプロイし、管理します。
注意: WebLogic Server管理コンソールを使用してJDBCデータ・ソースを作成し、その後で、アプリケーションで使用するためにモジュールをテンプレートとしてコピーできます。ネームスペースでのネーミング競合を避けるために、モジュールのname要素およびjndi-name要素を変更してからアプリケーションでデプロイする必要があります。 |
それぞれのJDBCモジュールは、データ・ソースを表します。汎用データ・ソースまたはActive GridLink (AGL)データ・ソースを表すモジュールには、汎用またはAGLデータ・ソース用にすべての構成パラメータが含まれています。マルチ・データ・ソースを表すモジュールには、マルチ・データ・ソースで使用する汎用データ・ソース・モジュールのリストも含め、マルチ・データ・ソース用の構成パラメータが含まれています。
アプリケーション・モジュールとして再使用できるデータ・ソース・モジュールをWebLogic Server管理コンソールで作成する手順は次のとおりです。
「JDBCデータ・ソースの作成」で説明するように、データ・ソースを作成します。データ・ソース・モジュールは、ドメイン・ディレクトリのconfig/jdbc
サブディレクトリに作成されます。
data-source-name.xml
ファイルをアプリケーション内のサブディレクトリにコピーし、接尾辞として-jdbcが含まれるようにコピーの名前を変更します(例: new-data-source-name-jdbc.xml
)。
ファイルをエディタで開き、次の要素を変更します。
name
- name
をドメイン内で一意の名前に変更します。
jndi-name
- jndi-name
を、エンタープライズ・アプリケーションでローカル・アプリケーション・コンテキストのデータ・ソースの参照に使用する名前に変更します。
scope
- オプションとして、データ・ソースへのアクセスを所属アプリケーションのみに制限するために、モジュールのjdbc-data-source-params
セクションにscope
要素を追加します。たとえば、<scope>Application</scope>
となります。「パッケージ化されたJDBCモジュールのアプリケーション・スコープ」を参照してください。
エンタープライズ・アプリケーション内のディスクリプタ・ファイルに参照を追加する作業を続行します。「Java EEディスクリプタ・ファイルでのJDBCモジュールの参照」を参照してください。
JDBCモジュールは次の基準を満たす必要があります。
jdbc-data-source.xsd
スキーマに準拠していること。このスキーマは、http://www.oracle.com/webfolder/technetwork/weblogic/jdbc-data-source/index.html
で入手できます。
-jdbc.xml
で終わるファイル名を使用していること。
WebLogicドメイン内で一意のname
要素が含まれていること。
データ・ソース・モジュールには、次のJDBCドライバ・パラメータも含まれている必要があります。
url
driver-name
properties
(ユーザー名やパスワードのように、データベース接続の作成にJDBCドライバが必要とするすべてのプロパティを含む)。
マルチ・データ・ソース・モジュールには、data-source-list
も含まれている必要があります。これは、マルチ・データ・ソースがアプリケーションからのデータベース接続リクエストを満たすために使用する、カンマで区切られたデータ・ソース・モジュールのリストです。
注意: data-source-listにリストされたデータ・ソースはすべて、XAおよびトランザクション・プロトコルの設定が同じである必要があります。 |
その他のすべての構成パラメータはオプションであるか、値が指定されない場合に使用されるデフォルト値が設定されています。ただし、実用的なJDBCモジュールを作成するには、アプリケーションと環境で必要とされる追加の構成オプションを指定する必要が生じる場合もあります。
JDBCアプリケーション・モジュールには次の制限があることに注意してください。
LoggingLastResourceのglobal-transactions-protocolは、JDBCアプリケーション・モジュールでは使用できません。
アプリケーション・スコープのJDBCリソースが使われる本番環境でアプリケーションをデプロイする際、リソースがglobal-transactions-protocolに対してEmulateTwoPhaseCommitを使用している場合は、アプリケーションの複数バージョンを同時にデプロイできません。
JDBCデータ・ソース・モジュール内の主要セクションは、次のとおりです。
jdbc-driver-params
- データベース接続の作成に使用されるJDBCドライバのエントリが含まれています。これにはurl
、driver-name
、および個別ドライバのproperty
エントリが含まれます。その他の有効エントリについては、jdbc-data-source.xsd
スキーマを参照してください。各要素の説明は、Oracle WebLogic Server MBeanリファレンスのJDBCDriverParamsBeanに関する項を参照してください。
jdbc-connection-pool-params
- 接続プールの構成のエントリが含まれています。接続テスト・オプション、文キャッシュ・オプションなどがあります。この要素は、weblogic-javaee.xsd
スキーマからconnection-pool-params
を継承します。これには、initial-capacity
、min-capacity
、max-capacity
、およびプールされたリソースに共通のその他のオプションも含まれます。詳細は、次を参照してください。
Oracle WebLogic Server MBeanリファレンスのJDBCConnectionPoolParamsBeanに関する項
jdbc-data-source.xsd
スキーマ
jdbc-data-source-params
- データ・ソースの動作オプションおよびトランザクション処理オプションに関するエントリ(jndi-name
、row-prefetch-size
、global-transactions-protocol
など)が含まれます。その他の有効エントリについては、jdbc-data-source.xsd
スキーマを参照してください。各要素の説明は、Oracle WebLogic Server MBeanリファレンスのJDBCDataSourceParamsBeanに関する項を参照してください。
jdbc-xa-params
- XAデータベース接続処理オプションに関するエントリ(keep-xa-conn-till-tx-complete
、xa-transaction-timeout
など)が含まれます。各要素の説明は、Oracle WebLogic Server MBeanリファレンスのJDBCXAParamsBeanに関する項を参照してください。
例B-1に、代表的な構成オプションを使用するデータ・ソースのJDBCモジュールの例を示します。
例B-1 汎用データ・ソース・モジュールのサンプル
<jdbc-data-source xsi:schemaLocation="http://www.bea.com/ns/weblogic/90/domain.xsd" xmlns="http://xmlns.oracle.com/weblogic/jdbc-data-source" xmlns:sec="http://www.bea.com/ns/weblogic/90/security" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:wls="http://www.bea.com/ns/weblogic/90/security/wls"> <name>examples-demoXA-2</name> <jdbc-driver-params> <url>jdbc:derby://localhost:1527/examples;create=true</url> <driver-name>org.apache.derby.jdbc.ClientXADataSource</driver-name> <properties> <property> <name>user</name> <value>examples</value> </property> <property> <name>DatabaseName</name> <value>examples</value> </property> </properties> <password-encrypted>{AES}MEK6bPum8M69KRP4FANx3TG/O0iSWRYu2rZGUwnVo6U=</password-encrypted> </jdbc-driver-params> <jdbc-connection-pool-params> <max-capacity>100</max-capacity> <connection-reserve-timeout-seconds>25</connection-reserve-timeout-seconds> <test-table-name>SQL SELECT 1 FROM SYS.SYSTABLES</test-table-name> </jdbc-connection-pool-params> <jdbc-data-source-params> <global-transactions-protocol>TwoPhaseCommit</global-transactions-protocol> </jdbc-data-source-params> </jdbc-data-source>
AGLデータ・ソース・モジュールは、汎用データ・ソース・システム・モジュールに類似しています。AGLデータ・ソースには、ONS
およびFAN
を含むjdbc-oracle-params
セクションが含まれます。
JDBCマルチ・データ・ソース・モジュールは、汎用データ・ソース・モジュールよりもはるかに単純です。必要な主要セクションはjdbc-data-source-params
の1つのみです。マルチ・データ・ソースのjdbc-data-source-params
要素は、データ・ソースの動作オプションではなくマルチ・データ・ソースの動作オプションに関するオプションが含まれている点で異なります。jdbc-data-source-params
内の次のパラメータのみが、マルチ・データ・ソースに対して有効です。
jndi-name
(必須)
data-source-list
(必須)
scope
algorithm-type
connection-pool-failover-callback-handler
failover-request-if-busy
各要素の説明は、Oracle WebLogic Server MBeanリファレンスのJDBCDataSourceParamsBeanに関する項を参照してください。
例B-2に、代表的な構成オプションを使用するデータ・ソースのJDBCモジュールの例を示します。
例B-2 JDBCマルチ・データ・ソース・モジュールのサンプル
<jdbc-data-source xmlns="http://xmlns.oracle.com/weblogic/jdbc-data-source"> <name>examples-demoXA-multi-data-source</name> <jdbc-data-source-params> <jndi-name>examples-demoXA -multi-data-source</jndi-name> <algorithm-type>Load-Balancing</algorithm-type> <data-source-list>examples-demoXA,examples-demoXA-2</data-source-list> </jdbc-data-source-params> </jdbc-data-source>
JDBCモジュール内でデータベース・パスワードを暗号化して、データ・ソースを保持することをお薦めします。データベース・パスワードを暗号化するには、WebLogic Serverのencrypt
ユーティリティを使用してパスワードを処理します。このユーティリティによって暗号化されたパスワードが返され、それをpassword-encrypted
要素としてJDBCモジュールに含めます。WebLogic Serverのencryptユーティリティの使用法の詳細は、『WebLogic Server WLSTコマンド・リファレンス』のencryptに関する項を参照してください。
JDBCモジュールをドメイン間で移動することは、アプリケーションを開発環境から本番環境に移動する場合などのように、一般的に使われる方法です。ただし、WebLogic Serverのencryptユーティリティにより生成された暗号化キーは、新しいドメインに転送できません。暗号化されたデータベース・パスワードを持つJDBCモジュールを移動する際、次のいずれかを実行する必要があります。
特に新規ドメイン用に暗号化されたパスワードが含まれるデプロイメント・プラン内の古い暗号化パスワードをオーバーライドします。Oracle WebLogic Server管理コンソール・オンライン・ヘルプのデプロイメント・プランの更新に関する項を参照してください。
新規ドメイン用に、パスワードを再暗号化します。「JDBCモジュールでのデータベース・パスワードの暗号化」を参照してください。
Oracleウォレットを使用している場合は、ウォレットを参照して、ウォレット・ファイルを新規ドメインにコピーするだけです。第14章「Oracleウォレットの作成および管理」を参照してください。
デフォルトでは、アプリケーションでJDBCモジュールをパッケージ化する際、JDBCリソースはグローバル・スコープに設定されます。つまり、リソースはグローバルJNDIネームスペースにバインドされて、すべてのアプリケーションとクライアントで使用可能になります。リソースを包含アプリケーション専用に予約するには、JDBCモジュール内のjdbc-data-source-params
要素に<scope>Application</scope>
パラメータを含める必要があります。これにより、リソースがローカル・アプリケーション・ネームスペースにバインドされます。次に例を示します。
<jdbc-data-source-params>
<jndi-name>examples-demoXA-2</jndi-name>
<scope>Application</scope>
</jdbc-data-source-params>
アプリケーション・スコープのJDBCモジュールに対するマルチ・データ・ソース内の汎用データ・ソースもすべて、アプリケーション・スコープに設定される必要があります。
エンタープライズ・アプリケーションでJDBCモジュールをパッケージ化する際、適用可能なすべてのディスクリプタ・ファイル内で、特に次のファイル内でモジュールを参照する必要があります。
weblogic-application.xml
ejb-jar.xml
weblogic-ejb-jar.xml
web.xml
weblogic.xml
図B-1に、EJBアプリケーションに対する各種ディスクリプタ・ファイルのエントリ間の関係と、それらのエントリがアプリケーションでパッケージ化されたJDBCモジュールを参照する方法を示します。
エンタープライズ・アプリケーションにJDBCモジュールを含める際、各JDBCモジュールを、アプリケーションでパッケージ化されたweblogic-application.xml
ディスクリプタ・ファイル内のタイプJDBC
のmodule
要素としてリストする必要があります。次に例を示します。
<module> <name>data-source-1</name> <type>JDBC</type> <path>datasources/data-source-1-jdbc.xml</path> </module>
エンタープライズ・アプリケーション内のその他のアプリケーション・モジュールがアプリケーションでパッケージ化されたJDBCモジュールを使用するには、アプリケーション・モジュールでパッケージ化されたディスクリプタ・ファイルに次のエントリを追加する必要があります。
アプリケーション・モジュールでパッケージ化された標準のJava EEディスクリプタ・ファイル(EJBに対するejb-jar.xml
など)では、resource-ref-name
参照を追加して、データ・ソースのJNDI名をアプリケーションで使用されるように指定する必要があります。次に例を示します。
<resource-ref> <res-ref-name>my-data-source</res-ref-name> <res-type>javax.sql.DataSource</res-type> <res-auth>Container</res-auth> </resource-ref>
この例では、my-data-source
は、アプリケーション・モジュールで使用されるデータ・ソース名です。アプリケーションでは、次のコードを持つデータ・ソースが検索されます。
javax.sql.DataSource ds = (javax.sql.DataSource) ctx.lookup("java:comp/env/my-data-source");
WebLogic固有のディスクリプタ・ファイル(EJBに対するweblogic-ejb-jar.xmlなど)で、各resource-ref-name
参照をデータ・ソースのjndi-name
要素にマップする必要があります。次に例を示します。
<resource-description> <res-ref-name>my-data-source</res-ref-name> <jndi-name>qa-database-1</jndi-name> </resource-description>
この例では、標準的なディスクリプタのリソース名(<res-ref-name>my-data-source</res-ref-name>
)が、JDBCモジュール内のデータ・ソースのJNDI名(<jndi-name>qa-database-1</jndi-name>
)にマップされています。
図B-1では、アプリケーション・モジュールで使用されているデータ・ソース名が、JDBCモジュール内のJDBCデータ・ソースのJNDI名にマッピングされています。
注意: アプリケーション・スコープのデータ・ソースの場合、これらのエントリをディスクリプタ・ファイルに追加しないと、アプリケーションでデータ・ソースを検索してデータベース接続を取得することができません。 |
他のエンタープライズ・アプリケーションの場合と同様に、アプリケーションをJDBCモジュールでパッケージ化します。『Oracle WebLogic Serverアプリケーションの開発』のwlpackageを使用したアプリケーションのパッケージ化に関する項を参照してください。
他のエンタープライズ・アプリケーションの場合と同様に、JDBCモジュールを使用してアプリケーションをデプロイします。『Oracle WebLogic Serverアプリケーションの開発』のwldeployを使用したアプリケーションのデプロイに関する項を参照してください。
注意: アプリケーション・スコープのJDBCリソースが使われる本番環境でアプリケーションをデプロイする際、リソースがglobal-transactions-protocolに対してEmulateTwoPhaseCommitを使用している場合は、アプリケーションの複数バージョンを同時にデプロイできません。 |
エンタープライズ・アプリケーションでパッケージ化されたJDBCモジュールから接続を取得するには、ローカル環境(java:comp/env
)で、またはJNDIツリーでJDBCモジュール内に定義されたデータ・ソースを検索し、データ・ソースまたはマルチ・データ・ソースからの接続をリクエストします。次に例を示します。
javax.sql.DataSource ds = (javax.sql.DataSource) ctx.lookup("java:comp/env/my-data-source"); java.sql.Connection conn = ds.getConnection();
接続の使用が終了したら、接続を閉じて、データ・ソース内の接続プールに接続が戻ったことを確認します。
conn.close();