Oracle® Fusion Middleware Oracle WebLogic Server JDBCデータ・ソースの構成と管理 11g リリース1 (10.3.4) B60997-02 |
|
前 |
次 |
次の項では、WebLogic JDBCリソースと、それらの構成方法、およびWebLogicドメインへの適用方法について説明します。
WebLogic Serverでは、JDBCデータ・ソースとマルチ・データ・ソースを構成してから、WebLogicドメイン内のサーバーまたはクラスタにJDBCリソースをターゲット指定またはデプロイすることで、データベース接続を構成できます。
構成対象の各データ・ソースにはデータベース接続のプールが含まれます。データベース接続は、データ・ソース・インスタンスの作成時(デプロイ時またはターゲット指定時)に作成されるか、サーバー起動時に作成されます。アプリケーションは、オブジェクトをどのように構成およびデプロイするかに応じて、JNDIツリー上のデータ・ソースまたはローカル・アプリケーション・コンテキスト(java:comp/env
)内のデータ・ソースをルックアップし、その後データベース接続をリクエストします。接続が完了すると、アプリケーションはconnection.close()
を呼び出し、これにより接続がデータ・ソースの接続プールに戻されます。WebLogic Serverにおけるデータ・ソースの詳細は、第3章「Configuring JDBCデータ・ソースの構成」を参照してください。
マルチ・データ・ソースはデータ・ソースの選択されたリストを抽象化したものであり、マルチ・データ・ソースに関連付けられているデータ・ソース間でロード・バランシングやフェイルオーバー処理を提供します。マルチ・データ・ソースは、データ・ソースがJNDIツリーにバインドされるのと同じように、JNDIツリーまたはローカル・アプリケーション・コンテキストにバインドされます。アプリケーションは、データ・ソースの場合と同じようにJNDIツリー上のマルチ・データ・ソースまたはローカル・アプリケーション・コンテキスト(java:comp/env
)内のマルチ・データ・ソースをルックアップし、その後データベース接続を要求します。マルチ・データ・ソースは、そのマルチ・データ・ソースの構成内で選択されるアルゴリズムに応じて、要求を満たすためにロード・バランシングとフェイルオーバーのうちどちらのデータ・ソースを使用するかを決定します。マルチ・データ・ソースの詳細は、第5章「JDBCマルチ・データ・ソースの構成」を参照してください。
WebLogic JDBCデータ・ソースの構成および管理を理解する上で重要なのは、JDBCリソースの作成者、またはJDBCリソースの作成方法によって、リソースがどのようにデプロイおよび変更されるかが決まるということです。WebLogic管理者とプログラマのどちらでもJDBCリソースを作成できます。
WebLogic管理者は通常、管理コンソールまたはWebLogic Scripting Tool (WLST)を使用して、JDBCモジュールの作成およびデプロイ(ターゲット指定)を行います。これらのJDBCモジュールは、システム・モジュールと見なされます。詳細は、「JDBCシステム・モジュール」を参照してください。
プログラマは、XML記述子ファイルの作成をサポートする開発ツールでモジュールを作成し、次にJDBCモジュールをアプリケーションと一緒にパッケージ化して、そのアプリケーションをWebLogic管理者へデプロイ用に渡します。これらのJDBCモジュールは、アプリケーション・モジュールと見なされます。詳細は、「JDBCアプリケーション・モジュール」を参照してください。
表2-1は、JDBCモジュールの種類と、それらをどのようにして構成および変更できるかを示します。
WebLogic JDBCデータ・ソースの構成は、jdbc-data-source.xsd
スキーマ(http://xmlns.oracle.com/weblogic/jdbc-data-source/1.0/jdbc-data-source.xsd
で入手可能)に準拠するXMLドキュメントに格納されます。
JDBCリソースは、システム・モジュールとして、またはアプリケーション・モジュールとして作成および管理されます。JDBCアプリケーション・モジュールは、Java EEモジュールのWebLogic固有の拡張機能であり、Java EEアプリケーションに含めて構成するか、スタンドアロンのモジュールとして構成できます。
JDBCシステム・モジュールとJDBCアプリケーション・モジュールのどちらを使用しているかに関係なく、各JDBCデータ・ソースまたはマルチ・データ・ソースは、XMLファイル(モジュール)によって表現されます。
管理コンソールまたはWebLogic Scripting Tool (WLST)を使って、JDBCリソース(データ・ソースまたはマルチ・データ・ソース)を作成すると、WebLogic Serverはドメイン・ディレクトリの下位ディレクトリconfig/jdbc
にJDBCモジュールを作成し、ドメインのconfig.xml
ファイルに、モジュールへの参照を追加します。JDBCモジュールは、jdbc-data-source.xsd
スキーマ(http://xmlns.oracle.com/weblogic/jdbc-data-source/1.0/jdbc-data-source.xsd
で入手可能)に準拠します。
このようにして構成されるJDBCリソースは、システム・モジュールと見なされます。システム・モジュールは、管理者の所有になります。管理者はいつでも、リソースの削除や修正を行ったり、同様なリソースを追加したりできます。システム・モジュールは、ドメインに構成されたサーバーおよびクラスタへのターゲット指定にグローバルに使用できるので、同じターゲットにデプロイされているすべてのアプリケーションと、クライアント・アプリケーションで使用可能です。システム・モジュールは、JMXでもJDBCSystemResourceMBeans
としてアクセスできます。
データ・ソース・システム・モジュールは、JDBCSystemResource
要素として、ドメインのconfig.xml
ファイルに含まれており、これには、JDBCモジュール・ファイルの名前と、モジュールのデプロイ先であるターゲット・サーバーおよびクラスタのリストが含まれます。図2-1は、config.xml
ファイル内のデータ・ソース・リストと、そのマップ先となるモジュールの例を示します。
この図では、config.xml
ファイルにexamples-demo
データ・ソースがjdbc-system-resource
要素としてリストされています。これはdomain
\config\jdbc
フォルダ内のexamples-demo-jdbc.xml
モジュールにマップされます。
同様に、マルチ・データ・ソース・システム・モジュールは、jdbc-system-resource
要素として、ドメインのconfig.xml
ファイルに含まれています。マルチ・データ・ソース・モジュールには、マルチ・データ・ソースによって使用されるデータ・ソース・モジュールにマップされるdata-source-list
パラメータが含まれます。また、個々のデータ・ソース・モジュールも、config.xml
に含まれています。図2-2は、config.xml
ファイル内の要素と、config/jdbc
ディレクトリ内のシステム・モジュールの関係を示します。
図2-2 config.xmlからマルチ・データ・ソースおよびデータ・ソース・システム・モジュールへの参照
この図では、config.xml
ファイル内に、3つのJDBCモジュールがリストされています。1つのマルチ・データ・ソースと、そのマルチ・データ・ソースによって使用される2つのデータ・ソースです。この2つのデータ・ソースも、マルチ・データ・ソース・モジュール内にリストされています。アプリケーションは、これらのモジュールのどのものもJNDIツリー上でルックアップして、データベース接続をリクエストできます。マルチ・データ・ソースをルックアップした場合、そのマルチ・データ・ソースは、data-source-list
パラメータ内のデータ・ソース、データ・ソースのリスト順、およびalgorithm-type
パラメータで指定されているアルゴリズムに応じて、データベース接続の供給に使用する別のデータ・ソースをどれにするかを決定します。マルチ・データ・ソースの詳細は、第5章「JDBCマルチ・データ・ソースの構成」を参照してください。
JDBCリソースは、標準のJava EEモジュールと同様に、アプリケーション・モジュールとしても管理できます。JDBCアプリケーション・モジュールとは単に、jdbc-data-source.xsd
スキーマ(http://xmlns.oracle.com/weblogic/jdbc-data-source/1.0/jdbc-data-source.xsd
で入手可能)に準拠するXMLファイルで、データ・ソースまたはマルチ・データ・ソースのことを言います。
JDBCモジュールは、パッケージ化されたモジュールとして、エンタープライズ・アプリケーションの一部として含めることができます。パッケージ化されたモジュールは、EARまたは展開されたEARディレクトリにバンドルされ、weblogic-application.xml
やejb-jar.xml
などすべての適切なデプロイメント記述子内で参照されます。JDBCモジュールはエンタープライズ・アプリケーションと一緒にデプロイされ、同梱されたアプリケーションのみ、またはすべてのアプリケーションで利用できるように構成できます。パッケージ化したモジュールを使用することにより、アプリケーションは必要なリソースに常にアクセスでき、アプリケーションを新しい環境に移動する処理が簡素化されます。パッケージ化されたJDBCモジュールを利用すると、EARファイルを開いたり、データ・ソースの手動による膨大な再構成を行ったりすることなく、アプリケーションと必要なJDBC構成を、ある環境から別の環境に(たとえば、テスト環境から本番環境に)移行できます。
システム・リソース・モジュールと対照的に、アプリケーションとパッケージ化されたJDBCモジュールの所有者は、モジュールをデプロイする管理者ではなく、モジュールを作成およびパッケージ化した開発者となります。つまり、パッケージ化されたモジュールに対しては、管理者の制御が及ぶ範囲が、より制限されています。リソース・モジュールをデプロイする際、管理者はモジュールで指定されていたリソース・プロパティを変更できますが、モジュールの追加や削除は行えません(他のJava EEモジュールのように、リソース・モジュールのデプロイ構成の変更はモジュールのデプロイメント・プランに格納され、元のモジュール自体は変更されません)。
定義により、パッケージ化されたJDBCモジュールは、エンタープライズ・アプリケーションに含まれているため、エンタープライズ・アプリケーションのデプロイ時にデプロイされます。パッケージ化したJDBCモジュールを使用したアプリケーションのデプロイについては、『Oracle WebLogic Serverへのアプリケーションのデプロイ』を参照してください。
JDBCアプリケーション・モジュールは、weblogic.Deployer
ユーティリティまたは管理コンソールを使用してスタンドアロンのリソースとしてもデプロイでき、通常そのリソースはデプロイメント・プロセスにおいてターゲット指定されたサーバーまたはクラスタで使用できます。このようにしてデプロイされたJDBCリソースは、スタンドアロン・モジュールと呼ばれ、管理コンソールまたはJSR-88対応のツールを使用して再構成できますが、JMXやWLSTを介しては使用できません。
スタンドアロンJDBCモジュールを使用すると、JDBCリソースの共有と移植が容易になります。データ・ソース構成を作成し、他の開発者に配布できます。スタンドアロンJDBCモジュールを使用して、開発ドメインとステージング・ドメインの間など、ドメイン間でデータ・ソース構成の移動もできます。
注意: JDBCモジュールをスタンドアロン・モジュールとしてデプロイする際、マルチ・データ・ソースのデプロイメント順序は、そのメンバー・データ・ソースのデプロイ順序より大きい数値であることが必要です。 |
JDBCアプリケーション・モジュールの詳細は、付録A「JDBCアプリケーション・モジュールのデプロイメントの構成」を参照してください。
スタンドアロンJDBCモジュールのデプロイの詳細は、『Oracle WebLogic Serverへのアプリケーションのデプロイ』のJDBC、JMS、およびWLDFアプリケーション・モジュールのデプロイに関する項を参照してください。
WebLogic JDBCモジュール・ファイルはすべて、examples-demo-jdbc.xml
のように、末尾に接尾辞-jdbc.xmlを付ける必要があります。WebLogic Serverは、モジュールのデプロイ時にファイル名をチェックします。ファイル名の末尾が-jdbc.xml
でなかった場合、デプロイメントは失敗し、サーバーは起動しません。
本番再デプロイメント(バージョニング)を使用して、パッケージ化されたJDBCモジュールを含むアプリケーションの、あるバージョンをデプロイする場合、WebLogic Serverは次の形式で、JDBCモジュールにおいて定義されたデータ・ソースを識別します。
application_id#version_id@module_name@data_source_name
この名前はデータ・ソース・ランタイムMBeanに使用されるとともに、WebLogic Serverトランザクション・マネージャにデータ・ソース・インスタンスを登録するのに使用されます。
廃止バージョンのアプリケーションにおいてトランザクションがタイムアウトし、その後そのバージョンのアプリケーションがアンデプロイされると、廃止されたバージョンのアプリケーションにおけるデータ・ソース上の保留中または未完了のトランザクションを手動で解決することが必要になる場合があります。データ・ソースが(この場合には、廃止バージョンのアプリケーションとともに)アンデプロイされると、WebLogic Serverトランザクション・マネージャは、保留中または未完了のトランザクションをリカバリできなくなります。
本番再デプロイメントの詳細は、次を参照してください。
『Oracle WebLogic Serverアプリケーションの開発』の本番再デプロイメント用アプリケーションの開発に関する項
『Oracle WebLogic Serverへのアプリケーションのデプロイ』の本番再デプロイメントを使用したアプリケーションの更新に関する項
WebLogic ServerでJDBCリソースのモジュール式デプロイメント・モデルをサポートするため、WebLogic JDBCオブジェクト用のスキーマweblogic-jdbc.xsd
が用意されています。JDBCリソース・モジュール(記述子)を作成する際は、モジュールをこのスキーマに準拠させる必要があります。IDEなどのツールは、このスキーマに基づいてJDBCリソース・モジュールを検証できます。
このスキーマはhttp://xmlns.oracle.com/weblogic/jdbc-data-source/1.0/jdbc-data-source.xsd
にあります。
管理コンソールまたはWebLogic Scripting Tool (WLST)を使用して、JDBCリソースを作成すると、WebLogic Serverに各リソースのMBean(マネージドBean)が作成されます。その後、JMXまたはWebLogic Scripting Tool (WLST)を使用してMBeanにアクセスできます。詳細は、『Oracle WebLogic Server JMXによるカスタム管理ユーティリティの開発』および『Oracle WebLogic Scripting Tool』を参照してください。
図2-3は、WebLogicドメイン内のJDBCオブジェクトに対するMBeanの階層を示します。
JDBCSystemResourceMBean
は、データ・ソース・モジュールから作成されたJavaBeanのコンテナです。ただし、JDBCデータ・ソースに対するJMXのアクセスは、すべてJDBCSystemResourceMBean
経由で行われます。データ・ソース・モジュールから作成された個々のJavaBeanに直接アクセスすることはできません。
WebLogic Server JDBCはJava EE管理モデルを定義するJSR-77をサポートしています。Java EE管理モデルは、Java EE Webアプリケーション・サーバーおよびそのリソースの実行時状態をモニターするのに使用されます。Java EE管理モデルにアクセスして、WebLogic JDBCシステム全体、メモリーにロードされたJDBCドライバ、JDBCデータ・ソースなどのリソースをモニターできます。
仕様に準拠するため、WebLogic JDBCサブシステムには次の実行時MBeanタイプが追加されています。
JDBCServiceRuntimeMBean
- JDBCサブシステムを表し、現在システムで使用可能なJDBCDriverRuntimeMBeans
およびJDBCDataSourceRuntimeMBeans
のリストにアクセスするためのメソッドを提供します。
JDBCDriverRuntimeMBean
- サーバーがメモリーにロードしたJDBCドライバを表します。
JDBCDataSourceRuntimeMBeans
- サーバーまたはクラスタにデプロイされたJDBCデータ・ソースを表します。
注意: WebLogic JDBCランタイムMBeanは、JSR-77で指定されている任意の統計プロバイダを実装していません。 |
WebLogic ServerでのJava EE管理モデルの使用については、『Oracle WebLogic Server Java EE管理APIによるモニタリングと管理』を参照してください。
WLSTを使用してJDBCリソースを作成するには、以下のタスクを実行する必要があります。
編集セッションを開始します。
JDBCシステム・リソース(プール、データ・ソース、マルチ・データ・ソース、JDBCドライバなど)を含むJDBCシステム・モジュールを作成します。
JDBCシステム・モジュールをターゲット指定します。
例2-1 JDBCリソースを作成するWLSTスクリプト
#---------------------------------------------------------------------- # Create JDBC Resources #---------------------------------------------------------------------- import sys from java.lang import System print "@@@ Starting the script ..." global props url = sys.argv[1] usr = sys.argv[2] password = sys.argv[3] connect(usr,password, url) edit() startEdit() servermb=getMBean("Servers/examplesServer") if servermb is None: print '@@@ No server MBean found' else: def addJDBC(prefix): print("") print("*** Creating JDBC resources with property prefix " + prefix) # Create the Connection Pool. The system resource will have # generated name of <PoolName>+"-jdbc" myResourceName = props.getProperty(prefix+"PoolName") print("Here is the Resource Name: " + myResourceName) jdbcSystemResource = wl.create(myResourceName,"JDBCSystemResource") myFile = jdbcSystemResource.getDescriptorFileName() print ("HERE IS THE JDBC FILE NAME: " + myFile) jdbcResource = jdbcSystemResource.getJDBCResource() jdbcResource.setName(props.getProperty(prefix+"PoolName")) # Create the DataSource Params dpBean = jdbcResource.getJDBCDataSourceParams() myName=props.getProperty(prefix+"JNDIName") dpBean.setJNDINames([myName]) # Create the Driver Params drBean = jdbcResource.getJDBCDriverParams() drBean.setPassword(props.getProperty(prefix+"Password")) drBean.setUrl(props.getProperty(prefix+"URLName")) drBean.setDriverName(props.getProperty(prefix+"DriverName")) propBean = drBean.getProperties() driverProps = Properties() driverProps.setProperty("user",props.getProperty(prefix+"UserName")) e = driverProps.propertyNames() while e.hasMoreElements() : propName = e.nextElement() myBean = propBean.createProperty(propName) myBean.setValue(driverProps.getProperty(propName)) # Create the ConnectionPool Params ppBean = jdbcResource.getJDBCConnectionPoolParams() ppBean.setInitialCapacity(int(props.getProperty(prefix+"InitialCapacity"))) ppBean.setMaxCapacity(int(props.getProperty(prefix+"MaxCapacity"))) ppBean.setCapacityIncrement(int(props.getProperty(prefix+"CapacityIncrement"))) if not props.getProperty(prefix+"ShrinkPeriodMinutes") == None: ppBean.setShrinkFrequencySeconds(int(props.getProperty(prefix+"ShrinkPeriodMinutes"))) if not props.getProperty(prefix+"TestTableName") == None: ppBean.setTestTableName(props.getProperty(prefix+"TestTableName")) if not props.getProperty(prefix+"LoginDelaySeconds") == None: ppBean.setLoginDelaySeconds(int(props.getProperty(prefix+"LoginDelaySeconds"))) # Adding KeepXaConnTillTxComplete to help with in-doubt transactions. xaParams = jdbcResource.getJDBCXAParams() xaParams.setKeepXaConnTillTxComplete(1) # Add Target jdbcSystemResource.addTarget(wl.getMBean("/Servers/examplesServer")) . . .
MBeanから利用できる適切なメソッドを使用すると、JDBCオブジェクトおよび属性を変更したりモニターしたりできます。
JDBCオブジェクトおよび属性を変更する場合は、set、target、untarget、およびdeleteメソッドを使用します。
JDBCランタイム・オブジェクトをモニターするにはgetメソッドを使用します。
詳細は、Oracle WebLogic Scripting Tool のMbeanのナビゲート(WLSTオンライン)に関する項を参照してください。
ここでは、WLSTを使用してJDBCリソースを構成する場合のベスト・プラクティスを示します。
MBeanオブジェクトを操作する前に、Null MBeanオブジェクト(プール、データ・ソース、ドライバなど)をトラップします。
JDBCリソースをクラスタにターゲット指定またはデプロイすることで、クラスタでホストされるアプリケーションの可用性を向上させることができます。クラスタ環境でのJDBCオブジェクトについては、『Oracle WebLogic Serverクラスタの使い方』のJDBC接続に関する項を参照してください。
マルチ・データ・ソースは、クラスタでの使用がサポートされています。ただし、マルチ・データ・ソースが使用できるのは、同じJVM内のデータ・ソースのみです。マルチ・データ・ソースは、他のクラスタ・メンバーからのデータ・ソースを使用できません。