ORACLE JAPAN Server Release 6.1

 

  |  

  WebLogic Server ホーム   |     管理者ガイド   |   前へ   |   次へ   |   目次   |   索引   |   PDF 版

JDBC 接続の管理

 

以下の節では、ローカル トランザクションと分散トランザクションの両方における、JDBC コンポーネント(データ ソース、接続プール、およびマルチプール)を介したデータベース接続のコンフィグレーションと管理のガイドラインを紹介します。

 


JDBC 管理の概要

Administration Console には、JDBC(Java Database Connectivity)などの WebLogic Server 機能のコンフィグレーションと管理を可能にするツールへのインタフェースが用意されています。接続の作成、管理、およびモニタを含むほとんどの JDBC 管理機能において、システム管理者は Administrative Console またはコマンドライン インタフェースを使用します。アプリケーション開発者は JDBC API を使用することもできます。

以下に、接続を設定および管理するためによく行われるタスクを示します。

Administration Console について

JDBC 接続の設定と管理は、おもに Administration Console で行います。Administration Console を使用して、サーバを起動する前に接続を静的に設定します。詳細については、 Administration Consoleを参照してください。

接続を設定するだけでなく、Administration Console では確立された接続を管理およびモニタすることもできます。

コマンドライン インタフェースについて

コマンドライン インタフェースでは、接続プールを動的に作成および管理できます。コマンドライン インタフェースの使い方については、 WebLogic Server コマンドライン インタフェース リファレンスを参照してください。

JDBC API について

プログラミングによる接続の設定と管理については、『WebLogic JDBC プログラミング ガイド』を参照してください。

関連情報

ローカルおよび分散トランザクションで使用される JDBC ドライバは多くの WebLogic Server コンポーネントと連係して機能し、情報はさまざまなドキュメントに掲載されています。たとえば、JDBC ドライバについての情報は、JDBC、JTA、および WebLogic jDrivers のマニュアルで参照できます。

JDBC、JTA、および管理の追加リソースのリストを以下に示します。

管理

JDBC と WebLogic jDrivers

以下のドキュメントは、おもにアプリケーション開発者向けに書かれています。システム管理者は、このドキュメントの内容を理解するための補助資料として、必要に応じて以下の初歩的な情報を参照してください。

トランザクション(JTA)

以下のドキュメントは、おもにアプリケーション開発者向けに書かれています。システム管理者は、この章の内容を理解するための補助資料として、必要に応じて以下の情報を参照してください。

 


JDBC コンポーネント(接続プール、データ ソース、およびマルチプール)

以降の節では、JDBC 接続コンポーネント(接続プール、マルチプール、およびデータ ソース)の概要を説明します。

図16-1 WebLogic Server における JDBC コンポーネント


 

接続プール

接続プールとは、接続プールが登録されるとき(通常は WebLogic Server の起動時)に作成される JDBC 接続のグループに名前を付けたものです。アプリケーションはプールから接続を「借り」、使用後は接続をクローズしてプールに返します。詳細については、『WebLogic JDBC プログラミング ガイド』の「接続プール」を参照してください。

Administration Console で行う設定はすべて静的なものです。つまり、すべての設定は WebLogic Server の起動前に行います。動的な接続プールは、コマンドライン( WebLogic Server コマンドライン インタフェース リファレンスを参照)または API(『WebLogic JDBC プログラミング ガイド』の「動的接続プールの作成」を参照)を使用することで(サーバの起動後に)作成できます。

マルチプール

マルチプールは、以下の機能で役立ちます。

特定の接続プール内のすべての接続は同じです。つまり、それらは 1 つのデータベースにアタッチされています。ただし、マルチプール内の接続プールにはそれぞれ異なる DBMS を関連付けることができます。詳細については、『WebLogic JDBC プログラミング ガイド』の「マルチプール」を参照してください。

データ ソース

データ ソース オブジェクトを使用することで、JDBC アプリケーションは接続プールから DBMS 接続を取得できるようになります。各データ ソース オブジェクトは、JNDI ツリーにバインドされ、接続プールまたはマルチプールを指します。アプリケーション側では、データ ソースをルックアップして接続を取得します。JTA に対応するデータ ソース オブジェクト (Administration Console における [トランザクション データ ソース]) を定義することも、JTA に対応しないデータ ソース オブジェクト (Administration Console における [データ ソース]) を定義することもできます。分散トランザクションには、トランザクション データ ソースを使用します。データ ソースとトランザクション データ ソースの使用に関する詳細については、 接続プール、マルチプール、およびデータソースの JDBC コンフィグレーション ガイドライン を参照してください。

注意: トランザクション データ ソースで指すことができるのは接続プールだけで、マルチプールを指すことはできません。マルチプールは分散トランザクションではサポートされていないからです。

 


接続プール、マルチプール、およびデータソースの JDBC コンフィグレーション ガイドライン

この節では、ローカル トランザクションおよび分散トランザクションに対応する JDBC コンフィグレーションのガイドラインについて説明します。

JDBC コンフィグレーションの概要

JDBC 接続を設定するには、Administration Console(動的接続プールの場合はコマンドライン)で属性を定義して、接続プール、データ ソース オブジェクト(常に設定することが望ましいが、省略可能な場合もある)、およびマルチプール(省略可能)をコンフィグレーションします。トランザクションのタイプは以下の 3 つです。

次の表にローカルおよび分散トランザクションでのこれらのオブジェクトの使い方を示します。

表16-1 JDBC コンフィグレーション ガイドラインの概要

説明/オブジェクト

ローカル トランザクション

分散トランザクション

XA 対応ドライバ

分散トランザクション

XA 非対応ドライバ

JDBC ドライバ

  • WebLogic jDriver for Oracle、WebLogic jDriver for Microsoft SQL Server、および WebLogic jDriver for Informix

  • 準拠するサードパーティ ドライバ

  • WebLogic jDriver for Oracle/ XA

  • 準拠するサードパーティ ドライバ

  • WebLogic jDriver for Oracle、WebLogic jDriver for Microsoft SQL Server、および WebLogic jDriver for Informix

  • 準拠するサードパーティ ドライバ

データ ソース

データ ソース オブジェクト推奨(データ ソースがない場合は JDBC API を使用)。

トランザクション データ ソースが必須。

トランザクション データ ソース必須。

複数のリソースの場合は enable two-phase commit=true を設定する。 分散トランザクション用の XA 非対応 JDBC ドライバのコンフィグレーションを参照。

接続プール

Administration Console でコンフィグレーションするときにはデータ ソース オブジェクトが必須。

トランザクション データ ソースが必須。

トランザクション データ ソースが必須。

マルチプール

接続プールとデータ ソースが必須。

トランザクション データ ソースが必須。

トランザクション データ ソースが必須。

注意: 分散トランザクションの場合には、WebLogic jDriver for Oracle/XA (WebLogic jDriver for Oracle の XA 準拠バージョン) などの XA 準拠ドライバを使用します。

トランザクション データ ソースを使用すべき場合

アプリケーションや環境が以下の条件のいずれかを満たす場合には、データソースではなくトランザクション データ ソースを使用すべきです。

EJB アーキテクチャでは、 データベース処理を実行する複数の EJB が単一トランザクションの一部として呼び出されることがよくあります。XA を使用しない場合、これがうまく機能するには、トランザクションに参加するすべてのコンポーネントがまったく同じデータベース接続を使用する必要があります。WebLogic Server では、JTS ドライバと TxDataSource ([2 フェーズ コミットを有効化] を選択する場合) を使用してこの処理を裏で実行するので、EJB 間で JDBC 接続を明示的に受け渡す必要はありません。XA (XA ドライバが必要) の場合には、WebLogic Server のトランザクション データ ソースを使用して 2 フェーズ コミットで分散トランザクションを行えるため、複数の EJB がトランザクションの各部分で別個のデータベース接続を使用できるようになります。いずれの場合も (XA を使用する場合も使用しない場合も)、トランザクション データ ソースを使用しなければなりません。

データ ソースの詳細については、『WebLogic JDBC プログラミング ガイド』を参照してください。

注意: 同じ接続プールを指す 2 つのトランザクション データ ソースを作成してはいけません。同じ接続プールを指す 2 つの異なるトランザクション データ ソースを 1 つのトランザクションで使用する場合、2 番目の接続にアクセスしようとすると、XA_PROTO エラーが発生します。

ローカル トランザクションをサポートするドライバ

分散トランザクションをサポートするドライバ

ローカル トランザクション用の JDBC ドライバのコンフィグレーション

ローカル トランザクションに対応する JDBC ドライバをコンフィグレーションするには、次の手順に従って JDBC 接続プールを設定します。

Administration Console で、接続プロパティの各プロパティについて、それぞれの行で名前=値の組を指定します。 コンフィグレーション ファイル(config.xml) では、接続プロパティがセミコロンで区切られた文字列の形式で一覧されています。 例:

Properties="user=SCOTT;server=DEMO"

WebLogic 2 層 JDBC ドライバの詳細については、使用するドライバについての BEA のマニュアル(『WebLogic jDriver for Oracle のインストールと使い方』、『WebLogic jDriver for Microsoft SQL Server のインストールと使い方』、または『WebLogic jDriver for Informix のインストールと使い方』)を参照してください。サードパーティ ドライバを使用する場合は、『WebLogic JTA プログラマーズ ガイド』の「分散トランザクションでの WebLogic jDriver for Oracle/XA の使い方」およびベンダ提供のマニュアルを参照してください。以下の表では、WebLogic jDrivers を使用した JDBC 接続プールおよびデータ ソースのサンプル コンフィグレーションを示します。

次の表では、WebLogic jDriver for Oracle を使用した接続プールのサンプル コンフィグレーションを示します。

注意: 新しいプロパティ「Password」があります。この値は、名前と値のペアで定義されたプロパティ内のパスワードをオーバーライドします。この属性は、物理データベース接続の作成時に 2 層 JDBC ドライバに渡されます。値は、暗号化されて config.xml に格納され、そのファイルにクリアテキスト パスワードが格納されるのを防止するために使用できます。

表16-2 WebLogic jDriver for Oracle : 接続プールのコンフィグレーション

属性名

属性値

Name

myConnectionPool

Targets

myserver

DriverClassname

weblogic.jdbc.oci.Driver

Initial Capacity

0

MaxCapacity

5

CapacityIncrement

1

Properties

user=scott
server=localdb

Password

Tiger(この値は Properties で名前と値の組み合わせとして定義されているすべてのパスワードをオーバーライドする)


 

次の表では、WebLogic jDriver for Oracle を使用したデータ ソースのサンプル コンフィグレーションを示します。

表16-3 WebLogic jDriver for Oracle : データ ソースのコンフィグレーション

属性名

属性値

Name

myDataSource

Targets

myserver

JNDIName

myconnection

PoolName

myConnectionPool


 

次の表では、WebLogic jDriver for Microsoft SQL Server を使用した接続プールのサンプル コンフィグレーションを示します。

表16-4 WebLogic jDriver for Microsoft SQL Server : 接続プールのコンフィグレーション

属性名

属性値

Name

myConnectionPool

Targets

myserver

DriverClassname

weblogic.jdbc.mssqlserver4.Driver

Initial Capacity

0

MaxCapacity

5

CapacityIncrement

1

Properties

user=sa
password=secret
db=pubs
server=myHost:1433
appname=MyApplication
hostname=myhostName


 

次の表では、WebLogic jDriver for Microsoft SQL Server を使用したデータ ソースのサンプル コンフィグレーションを示します。

表16-5 WebLogic jDriver for Microsoft SQL Server : データ ソースのコンフィグレーション

属性名

属性値

Name

myDataSource

Targets

myserver

JNDIName

myconnection

PoolName

myConnectionPool


 

次の表では、WebLogic jDriver for Informix を使用した接続プールのサンプル コンフィグレーションを示します。

表16-6 WebLogic jDriver for Informix : 接続プールのコンフィグレーション

属性名

属性値

Name

myConnectionPool

Targets

myserver

DriverClassname

weblogic.jdbc.informix4.Driver

Initial Capacity

0

MaxCapacity

5

CapacityIncrement

1

Properties

user=informix
password=secret
server=myDBHost
port=1493
db=myDB


 

次の表では、WebLogic jDriver for Informix を使用したデータ ソースのサンプル コンフィグレーションを示します。

表16-7 WebLogic jDriver for Informix : データ ソースのコンフィグレーション

属性名

属性値

Name

myDataSource

Targets

myserver

JNDIName

myconnection

PoolName

myConnectionPool


 

分散トランザクション用の XA 対応 JDBC ドライバのコンフィグレーション

XA 対応 JDBC ドライバを分散トランザクションに参加させるには、以下のように JDBC 接続プールをコンフィグレーションします。

以下の属性は、XA モードで WebLogic jDriver for Oracle を使用する場合の JDBC 接続プールのコンフィグレーションの例です。

表16-8 WebLogic jDriver for Oracle/XA : 接続プールのコンフィグレーション

属性名

属性値

Name

fundsXferAppPool

Targets

myserver

DriverClassname

weblogic.jdbc.oci.xa.XADataSource

Initial Capacity

0

MaxCapacity

5

CapacityIncrement

1

Properties

user=scott
password=tiger
server=localdb


 

以下の属性は、XA モードで WebLogic jDriver for Oracle を使用する場合のトランザクション データ ソースのコンフィグレーションの例です。

表16-9 WebLogic jDriver for Oracle/XA : トランザクション データ ソース

属性名

属性値

Name

fundsXferData Source

Targets

myserver

JNDIName

myapp.fundsXfer

PoolName

fundsXferAppPool


 

また、JDBC 接続プールをコンフィグレーションして、XA モードでサード パーティ ベンダ製ドライバを使用することもできます。この場合、データ ソース プロパティは、JavaBeans 設計パターンを使用し、XADataSource インスタンスに反映して設定します。つまり、abc というプロパティの場合、XADataSource インスタンスは、getAbc という名前の取得メソッドと、setAbc という名前の設定メソッドをサポートする必要があります。

以下の属性は、Oracle Thin Driver を使用する場合の JDBC 接続プールのコンフィグレーションの例です。

表16-10 Oracle Thin ドライバ : 接続プールのコンフィグレーション

属性名

属性値

Name

jtaXAPool

URL

jdbc:oracle:thin:@baybridge:1521:bay817

Targets

myserver,server1

DriverClassname

oracle.jdbc.xa.client.OracleXADataSource

Initial Capacity

1

MaxCapacity

20

CapacityIncrement

2

Properties

user=scott
password=tiger


 

以下の属性は、Oracle Thin Driver を使用する場合のトランザクション データ ソースのコンフィグレーションの例です。

表16-11 Oracle Thin ドライバ : トランザクション データ ソースのコンフィグレーション

属性名

属性値

Name

jtaXADS

Targets

myserver,server1

JNDIName

jtaXADS

PoolName

jtaXAPool


 

Cloudscape ドライバで使用する JDBC 接続プールは、以下のようにコンフィグレーションします。

表16-12 Cloudscape : 接続プールのコンフィグレーション

属性名

属性値

Name

jtaXAPool

Targets

myserver,server1

DriverClassname

COM.cloudscape.core.XADataSource

Initial Capacity

1

MaxCapacity

10

CapacityIncrement

2

Properties

databaseName=CloudscapeDB

SupportsLocalTransaction

true


 

Cloudscape ドライバで使用するトランザクション データ ソースは、以下のようにコンフィグレーションします。

表16-13 Cloudscape : トランザクション データ ソースのコンフィグレーション

属性名

属性値

Name

jtaZADS

Targets

myserver,myserver1

JNDIName

JTAXADS

PoolName

jtaXAPool


 

WebLogic jDriver for Oracle/XA のデータ ソース プロパティ

表 16-14 に、WebLogic jDriver for Oracle でサポートされているデータ ソース プロパティを示します。「JDBC 2.0」カラムは、特定のデータ ソース プロパティが JDBC 2.0 の標準データ ソース プロパティ(Y)か、または JDBC に対する WebLogic Server の拡張(N)かを示します。

「省略可能」カラムは、特定のデータ ソース プロパティが省略可能かどうかを示します。「Y*」マークが付いたプロパティは、 表 16-14 に示された、Oracle の xa_open 文字列(openString プロパティの値)の対応するフィールドにマップされます。それらのプロパティが指定されない場合、デフォルト値は openString プロパティから取得されます。それらのプロパティが指定される場合、その値は openString プロパティで指定された値と一致する必要があります。プロパティが一致しない場合、XA 接続を確立しようとすると SQLException が送出されます。

「N*」マークが付いた必須プロパティも、Oracle の xa_open 文字列の対応するフィールドにマップされます。これらのプロパティは、Oracle の xa_open 文字列を指定するときに指定します。プロパティが指定されない場合や、指定されていても一致しない場合は、XA 接続を確立しようとすると SQLException が送出されます。

「**」マークが付いたプロパティ名はサポートされていますが、WebLogic Server では使用されません。

表16-14 WebLogic jDriver for Oracle/XA のデータ ソース プロパティ

プロパティ名

タイプ

説明

JDBC 2.0

省略
可能

デフォルト値

databaseName**

String

サーバ上の特定のデータベース名。

Y

Y

なし

dataSourceName

String

データ ソース名。基になる XADataSource に名前を付ける場合に使用される。

Y

Y

接続プール名

description

String

このデータ ソースの説明。

Y

Y

なし

networkProtocol**

String

サーバと通信する場合に使用されるネットワーク プロトコル。

Y

Y

なし

password

String

データベースのパスワード。

Y

N*

なし

portNumber**

int

サーバがリクエストをリスンしているポート番号。

Y

Y

なし

roleName**

String

初期 SQL ロール名。

Y

Y

なし

serverName

String

データベース サーバ名。

Y

Y*

なし

user

String

ユーザのアカウント名。

Y

N*

なし

openString

String

Oracle の XA オープン文字列。

N

Y

なし

oracleXATrace

String

XA トレース出力が有効かどうかを示す。有効(true)の場合、xa_poolnamedate.trc 形式の名前を持つファイルがサーバの起動ディレクトリに配置される。

N

Y

true


 

表 16-15 に、Oracle の xa_open 文字列フィールドとデータ ソース プロパティの間のマッピングを示します。

表16-15 xa_open 文字列名と JDBC データ ソース プロパティとのマッピング

Oracle xa_open 文字列フィールド名

JDBC 2.0 データ ソース プロパティ

省略可能

acc

user、password

N

sqlnet

ServerName



 

また、ユーザは Oracle の xa_open 文字列で「Threads=true」と指定する必要があります。Oracle の xa_open 文字列フィールドの詳細については、Oracle のドキュメントを参照してください。

その他の XA 接続プール プロパティ

分散トランザクションにおいて接続プールからの接続を使用している場合は、接続プールに対して追加プロパティを設定し、WebLogic Server 内のトランザクションの状況に合わせて、接続プールが接続を正しく処理できるようにすることが必要になる場合があります。そのようなプロパティは、 JDBCConnectionPool タグで、コンフィグレーション ファイル (config.xml) に指定します。デフォルトでは、追加プロパティはすべて、falseに設定されています。プロパティを true にセットすると、有効になります。

普通は、WebLogic Server が内部的にこれらのプロパティを適切な値に自動的に設定するので、ユーザが手動で設定する必要はありません。

KeepXAConnTillTxComplete

DBMS によっては、トランザクションの開始と終了を同じ物理データベース接続で行う必要があります。また場合によっては、WebLogic Server 内のトランザクションの開始と終了を、異なる物理データベース接続で行うこともできます。トランザクションが完了するまでのトランザクションの全期間を通して、接続プールが 1 つの物理接続を確保し、アプリケーションに対して「同じ」接続を割り当てるようにするには、KeepXAConnTillTxComplete="true"と設定します。次はその例です。

<JDBCConnectionPool KeepXAConnTillTxComplete="true" DriverName="com.sybase.jdbc2.jdbc.SybXADataSource" CapacityIncrement="5" InitialCapacity="10" MaxCapacity="25" Name="demoXAPool" Password="{3DES}vIF8diu4H0QmdfOipd4dWA==" Properties="User=dbuser;DatabaseName=dbname;ServerName=server_name_or_IP_address;PortNumber=serverPortNumber;NetworkProtocol=Tds;resourceManagerName=Lrm_name_in_xa_config;resourceManagerType=2" />

注意: DB2 および Sybase で分散トランザクションをサポートする場合、このプロパティは、「必須」です。

分散トランザクション用の XA 非対応 JDBC ドライバのコンフィグレーション

JDBC 接続プールをコンフィグレーションして、XA 非対応の JDBC ドライバを別のリソースと共に分散トランザクションに参加させる場合は、JDBC Tx Data Source に [2 フェーズ コミットを有効化] 属性を指定します(このパラメータは、XAResource インタフェースををサポートしているリソースには無視されます)。非 XA 接続プールは、一度に 1 つしか分散トランザクションに参加できません。

XA 非対応ドライバ/単一リソース

XA 非対応ドライバを 1 つだけ使用し、それがトランザクションで唯一のリソースである場合は、Administration Console において [2 フェーズ コミットを有効化] オプションを選択されていないままにします(デフォルトの enableTwoPhaseCommit = false を受け入れる)。この場合、Weblogic Server ではその設定が無視され、トランザクション マネージャが 1 フェーズの最適化を実行します。

XA 非対応ドライバ/複数リソース

他の XA リソースとともに XA 非対応 JDBC ドライバを 1 つ使用する場合は、Console で [2 フェーズ コミットを有効化] を選択します(enableTwoPhaseCommit = true)。

enableTwoPhaseCommittrue に設定されている場合、XA 非対応の JDBC リソースは常に XAResource.prepare() メソッド呼び出し中に XA_OK を返します。リソースは、以降の XAResource.commit() 呼び出しまたは XAResource.rollback() 呼び出しに応答して、そのローカル トランザクションをコミットまたはロールバックしようとします。リソースのコミットまたはロールバックが失敗すると、ヒューリスティック エラーが発生します。ヒューリスティック エラーの結果、アプリケーション データは矛盾した状態のまま残される場合があります。

[2 フェーズ コミットを有効化] が選択されていない(enableTwoPhaseCommitfalse に設定されている)場合、XA 非対応の JDBC リソースによって XAResource.prepare() が失敗します。この場合、commit()SystemException を送出するので、トランザクションには参加コンポーネントが 1 つしか存在しないことになります。トランザクションの参加コンポーネントが 1 つしか存在しない場合、1 つのフェーズ最適化は XAResource.prepare() を無視し、トランザクションはほとんどのインスタンスで正常にコミットします。

こうした XA 非対応 JDBC ドライバのサポートは、しばしば「JTS ドライバ」と呼ばれることがあります。WebLogic Server では、WebLogic JTS ドライバを内部的に使用して、この機能をサポートしているからです。 WebLogic JTS ドライバの詳細については、『WebLogic JDBC プログラミング ガイド』の「WebLogic JTS ドライバの使い方」を参照してください。

XA 非対応ドライバをグローバル トランザクションで使用する際の制限事項と危険性

WebLogic Server では、グローバル トランザクションに XA 非対応 JDBC リソースを参加させることもできますが、そうしたリソースを使用するアプリケーションを設計する際には、いくつかの制限事項を考慮する必要があります。XA 非対応ドライバは XA/2PC 規約に従っておらず、1 フェーズ コミットとロールバックの操作しかサポートしていないため、WebLogic Server (内部的には JTS ドライバ) では、トランザクション マネージャで管理されるトランザクションにこうしたリソースが参加できるようにするために妥協が必要になります。

ヒューリスティックな終了とデータの不整合

XA 非対応リソースに対して [2 フェーズ コミットを有効化] が選択されると (enableTwoPhaseCommit = true)、XA 非対応リソースのトランザクションの準備フェーズは常に成功します。そのため、XA 非対応リソースは、2 フェーズ コミット (2PC) プロトコルに本当に参加するわけではなく、障害が発生しやくなります。準備フェーズのあとで XA 非対応リソースに障害が発生した場合、XA 非対応リソースはトランザクションをロールバックする可能性が高いのに対して、トランザクションに参加する XA 対応のコンポーネントはトランザクションをコミットするので、結果的に、ヒューリスティックな終了とデータの不整合が発生します。

データ整合性を損なう危険性があるので、[2 フェーズ コミットを有効化] のオプションを使用するのは、ヒューリスティックな状況に耐え得るアプリケーションの場合に限るべきです。

保留中のトランザクションを回復できない

XA非対応のドライバではローカル データベース トランザクションだけを操作するため、外部トランザクション マネージャに関しては、データベースにおけるトランザクションの保留状態という概念がありません。XA 非対応のリソースに対して XAResource.recover() が呼び出されると、コミットやロールバックの必要があるトランザクションが存在していても、常に Xid (トランザクション ID) の空集合が返されます。そのため、グローバル トランザクションで XA 非対応のリソースを使用するアプリケーションでは、システム障害から回復してデータの整合性を維持することはできません。

マルチサーバ コンフィグレーションでの XA 非対応リソースによるパフォーマンス低下のおそれ

WebLogic Server では、特定の JDBC 接続に関連付けられたデータベース ローカル トランザクションに基づいて、グローバル トランザクションに対する XA 非対応リソースの参加をサポートしているので、複数の WebLogic Server インスタンス上でグローバル トランザクション コンテキストのアプリケーションから同じ JDBC データ ソースがアクセスされると、JTS ドライバは常に、JDBC 操作を、そのトランザクション内のアプリケーションで最初に確立された接続にリダイレクトします。たとえば、一方のサーバ上でアプリケーションがトランザクションを開始し、XA 非対応の JDBC リソースにアクセスしたあと 、もう一方のサーバに対するリモート メソッド呼び出し (RMI) を行い、同じ基礎 JDBC ドライバを使用するデータ ソースにアクセスした場合、 JTS ドライバは、別のサーバ上のトランザクションに関連付けられている接続がそのリソースに対して確立されていることを認識し、最初のサーバ上にある実際の接続への RMI リダイレクトをセットアップします。接続に関するすべての操作は、最初のサーバ上で確立された 1 つの接続に対して行われます。こうした動作の結果、これらのリモート接続のセットアップと 1 つの物理接続に対する RMI 呼び出しによるオーバーヘッドのために、パフォーマンスが低下するおそれがあります。

XA 非対応の参加コンポーネントは 1 つのみ

XA 非対応のリソース (enableTwoPhaseCommit = true に設定) は、WebLogic Server のトランザクション マネージャに登録される際には、XAResource インタフェースを実装するクラスの名前で登録されます。enableTwoPhaseCommit = true に設定されたすべての XA 非対応リソースでは、XAResource インタフェースを実装する JTS ドライバを使用するので、グローバル トランザクションに参加する XA 非対応リソース (enableTwoPhaseCommit = true に設定) はすべて、同じ名前で登録されます。グローバル トランザクションで複数の XA 非対応リソースを使用した場合、名前の衝突や、場合によってはヒューリスティック障害が発生します。

XA 非対応の接続プールとトランザクション データ ソースのコンフィグレーション例

次の表では、XA 非対応 JDBC ドライバを使用するサンプル JDBC 接続プールのコンフィグレーション属性を示します。

表16-16 WebLogic jDriver for Oracle : 接続プールのコンフィグレーション

属性名

属性値

Name

fundsXferAppPool

Targets

myserver

URL

jdbc:weblogic:oracle

DriverClassname

weblogic.jdbc.oci.Driver

Initial Capacity

0

MaxCapacity

5

CapacityIncrement

1

Properties

user=scott
password=tiger
server=localdb


 

次の表では、XA 非対応 JDBC ドライバを使用するサンプル トランザクション データ ソースのコンフィグレーション属性を示します。

表16-17 WebLogic jDriver for Oracle: トランザクション データ ソースのコンフィグレーション

属性名

属性値

Name

fundsXferDataSource

Targets

myserver,server1

JNDIName

myapp.fundsXfer

PoolName

fundsXferAppPool

EnableTwoPhaseCommit

true


 

 


Administration Console による JDBC 接続プール、マルチプール、およびデータソースのコンフィグレーションと管理

以降の節では、JDBC コンポーネント(接続プール、データ ソース、およびマルチプール)をコンフィグレーションしてデータベース接続を設定する方法について説明します。接続がいったん確立されたら、Administration Console またはコマンドライン インタフェースを使用して接続を管理およびモニタできます。コンフィグレーション タスクの説明および Administration Console オンライン ヘルプのリンクについては、 表 16-19を参照してください。

JDBC コンフィグレーション

ここでは、コンフィグレーションとは以下のプロセスのことです。

JDBC オブジェクトの作成

Administration Console を使用し、属性とデータベース プロパティを指定して JDBC コンポーネント(接続プール、データ ソース、およびマルチプール)を作成します。 Administration Console を使用した JDBC 接続のコンフィグレーションを参照してください。

まず接続プールまたはマルチプールを作成してから、データ ソースを作成します。データ ソース オブジェクトを作成する場合、データ ソースの属性の 1 つとして接続プールまたはマルチプールを作成します。これにより、データ ソースが特定の接続プールまたはマルチプール(「プール」)と永続的に関連付けられます。

JDBC オブジェクトの割り当て

データ ソースと接続プール(またはマルチプール)のコンフィグレーションと関連付けを行ったら、各オブジェクトを同じサーバまたはサーバまたはクラスタに割り当てます。一般的なシナリオをいくつか以下に示します。

実行するタスクの説明については、 Administration Console を使用した JDBC 接続のコンフィグレーションを参照してください。

コンフィグレーション プロセスの関連付けと割り当ての詳細については、次の表を参照してください。

表16-18 関連付けと割り当てのシナリオ

シナリオ番号

関連付け

割り当て

対象の説明

1

データ ソース A と接続プール Aを関連付ける。

  1. データ ソース A を管理対象サーバ 1 に割り当てる。

  2. 接続プール A を管理対象サーバ 1 に割り当てる。

データ ソースと接続プールは同じ対象に割り当てられる。

2

データ ソース B と接続プール Bを関連付ける。

  1. データ ソース B をクラスタ X に割り当てる。

  2. 接続プール B をクラスタ X に割り当てる。

データ ソースと接続は関連するサーバ/クラスタの対象に割り当てられる。

3

データ ソース C と接続プール Cを関連付ける。

  • データ ソース A と接続プール A を管理対象サーバ 1 に割り当てる。

および

  • データ ソース A をクラスタ X に割り当て、接続プール A をクラスタ X に割り当てる。

データ ソースと接続プールは 1 つのまとまりとして 2 つの異なる対象に割り当てられる。

(プールには複数のデータ ソースを割り当てることができますが、実際の効果はありません。)これらのデータ ソースとプールの組み合わせを複数のサーバまたはクラスタに割り当てることができますが、それらは組み合わせとして割り当てなければなりません。たとえば、関連付けられている接続プールがサーバ B にのみ割り当てられている場合は、データ ソースを管理対象サーバ A に割り当てることはできません。

コマンドライン インタフェースを使用すると、動的な接続プールを(サーバの起動後に)コンフィグレーションできます。 コマンドライン インタフェースを使用した JDBC コンフィグレーション タスクを参照してください。動的な接続プールは、API を使用してプログラミングによってコンフィグレーションすることもできます(『WebLogic JDBC プログラミング ガイド』の「動的接続プールの作成」を参照)。

Administration Console を使用した JDBC 接続のコンフィグレーション

Administration Console では、JDBC 接続をコンフィグレーション、管理、およびモニタできます。タスクに使用するタブを表示するには、次の操作を行います。

  1. Administration Console を起動します。

  2. 左ペインで [サービス] ノードを選択し、[JDBC] ノードを展開します。

  3. コンフィグレーションまたは管理するコンポーネント(接続プール、マルチプール、データ ソース、またはトランザクション データ ソース)のタブを選択します。

  4. オンライン ヘルプの指示に従います。オンライン ヘルプへのリンクについては、 表 16-19 を参照してください。

次の表では、接続タスクを一般的な実行順序で示します。この順序は変更してもかまいません。ただし、オブジェクトは関連付けおよび割り当ての前にコンフィグレーションする必要があります。

表16-19 JDBC のコンフィグレーション タスク

タスク番号

JDBC コンポーネント/タスク

説明

1

接続プールのコンフィグレーション

[コンフィグレーション] タブで、名前、URL、データベース プロパティなどの接続プールの属性を設定する。

2

接続プールのクローンの作成(省略可能)

このタスクでは接続プールをコピーする。[コンフィグレーション] タブで、プールの名前をユニークな名前に変更し、それ以外の属性をそのまま使用するか変更する。この機能は、別々の名前で複数の同じプール コンフィグレーションが必要な場合に便利。たとえば、各データベース管理者に、特定のプールを使用してデータベースへの個々の変更をトラッキングさせることができる。

3

マルチプールのコンフィグレーション(省略可能)

[コンフィグレーション] タブで、名前およびアルゴリズム(高可用性またはロードバランシング)の属性を設定する。[プール] タブで、接続プールをこのマルチプールに割り当てる。

4

データ ソースのコンフィグレーション(およびプールとの関連付け)

[コンフィグレーション] タブを使用して、名前、JNDI 名、およびプール名(これでデータ ソースが特定の接続プールまたはマルチプールと関連付けられる)といったデータ ソースの属性を設定する。

5

トランザクション データ ソースのコンフィグレーション(および接続プールとの関連付け)

[コンフィグレーション] タブを使用して、名前、JNDI 名、および接続プール名(これでデータ ソースが特定のプールと関連付けられる)といったトランザクション データ ソースの属性を設定する。

6

接続プールのサーバ/クラスタへの割り当て

[対象] タブを使用して、接続プールを 1 つまたは複数のサーバまたはクラスタに割り当てる。 表 16-18「関連付けと割り当てのシナリオ」を参照。

7

マルチプールのサーバまたはクラスタへの割り当て

[対象] タブを使用して、コンフィグレーションされたマルチプールをサーバまたはクラスタに割り当てる。


 

接続プールのコンフィグレーションにおけるデータベース パスワード

接続プールを作成する際には、そのデータベースに接続するためのパスワードを少なくとも 1 つ作成するのが普通です。オープン文字列を使用して XA を有効にする場合、2 種類のパスワードを使用するとよいでしょう。WebLogic Server の [JDBC接続プール|コンフィグレーション|一般] タブには、以下のフィールドがあります。

[JDBC接続プール|コンフィグレーション|一般] タブの [プロパティ] フィールドに上記のパスワードを指定してもかまいません。しかし、WebLogic Server は、 Administration Console およびコンフィグレーション ファイル(通常は config.xml)でこれらのパスワードをクリア テキストで表示します。これらのパスワードをクリア テキストで表示したり保管するのを回避するには、パスワードはそれぞれのフィールドで指定します。

[パスワード] および [文字列のオープン パスワード]の値は、 同一である必要はありません。また、これらのフィールドを使用する場合、[プロパティ] フィールドでそれらに相当する値は省略しなければなりません。たとえば、[パスワード] フィールドに値を指定する場合には、[プロパティ] フィールドにはpassword=password 指定しないでください。

注意: [パスワード] および [文字列のオープン パスワード] フィールドに入力した値は、[プロパティ] フィールドのそれに相当する値を上書きします。たとえば、[パスワード] フィールドに tiger と入力し、[プロパティ] フィールドに password=smith と入力すると、WebLogic Server ではこのデータベースへの接続を作成するためのパスワードとして tiger を使用します。

コマンドライン インタフェースを使用した JDBC コンフィグレーション タスク

次の表では、動的な接続プールを作成する方法を示します。

表16-20 接続の設定-動的

目的とする作業

使用するツール

動的接続プールの作成

  • コマンドライン CREATE_POOL、または

  • API − 『WebLogic JDBC プログラミング ガイド』の「WebLogic JDBC 機能のコンフィグレーション」を参照

 

詳細については、 WebLogic Server コマンドライン インタフェース リファレンス、および『WebLogic JDBC プログラミング ガイド』の「動的接続プールの作成」を参照してください。

接続の管理とモニタ

接続の管理では、確立された JDBC コンポーネントを有効化、無効化、および削除します。

Administration Console を使用した JDBC の管理

JDBC 接続を管理およびモニタするには、次の表を参照してください。

表16-21 JDBC 管理タスク

目的とする作業

Administration Console での操作

接続プールの割り当て先サーバまたはクラスタの変更

接続プールのサーバ/クラスタへの割り当て」の手順に従って、[対象] タブで対象を選択解除([選択済み] から [使用可能] に移動)し、新しい対象に割り当てる。

マルチプールの割り当て先クラスタの変更

マルチプールのサーバまたはクラスタへの割り当て」の手順に従って、[対象] タブで対象を選択解除([選択済み] から [使用可能] に移動)し、新しい対象に割り当てる。

JDBC 接続プールの削除

オンライン ヘルプの「JDBC 接続プールの削除」を参照。

マルチプールの削除

  1. 左ペインの [マルチプール] ノードを選択する。右ペインに [マルチプール] テーブルが表示され、ドメインで定義された全マルチプールが示される。

  2. 削除するマルチプールの行にある [削除] アイコンをクリックする。削除要求の確認を求めるメッセージが右ペインに表示される。

  3. [はい] をクリックしてマルチプールを削除する。[マルチプール] ノードの下の [マルチプール] アイコンが削除される。

データ ソースの削除

  1. 左ペインの [データ ソース] ノードを選択する。右ペインに [データ ソース] テーブルが表示され、ドメインで定義された全データ ソースが示される。

  2. 削除するデータ ソースの行にある [削除] アイコンをクリックする。削除要求の確認を求めるメッセージが右ペインに表示される。

  3. [はい] をクリックしてデータ ソースを削除する。[データ ソース] ノードの下の [データ ソース] アイコンが削除される。

接続プールのモニタ

  1. 左ペインでプールを選択する。

  2. 右ペインで [モニタ] タブを選択し、[すべてのアクティブなプールのモニタ] リンクを選択する。

接続プール、マルチプール、またはデータ ソースの属性の修正

  1. 左ペインで JDBC オブジェクト(接続プール、マルチプール、またはデータ ソース)を選択する。

  2. 右ペインの [対象] タブを選択し、各サーバからそのオブジェクトの割り当てを解除する([選択済み] カラムから [使用可能] カラムにオブジェクトを移動する)。[適用] をクリックする。これで、対応するサーバで JDBC オブジェクト(接続プール、マルチプール、またはデータ ソース)が停止する。

  3. 属性を修正するタブを選択する。

  4. [対象] タブを選択し、オブジェクトをサーバに再び割り当てる。これで、対応するサーバで JDBC オブジェクト(接続プール、マルチプール、またはデータ ソース)が開始される。

 

コマンドライン インタフェースを使用した JDBC の管理

次の表では、コマンドライン インタフェースを使用した接続プールの管理について説明します。詳細情報が必要な場合は、目的のコマンドを選択してください。

接続プールのコマンドの使い方については、 WebLogic Server コマンドライン インタフェース リファレンスを参照してください。

表16-22 コマンドライン インタフェースを使用した接続プールの管理

目的とする作業

使用するコマンド

接続プールの無効化

DISABLE_POOL

無効な接続プールの有効化

ENABLE_POOL

JDBC 接続プールの削除

DESTROY_POOL

接続プールが作成されたかどうかの確認

EXISTS_POOL

接続プールのリセット

RESET_POOL

 


prepared statement キャッシュによるパフォーマンスの向上

WebLogic Server で作成する各接続プールに対し、prepared statement キャッシュのサイズを指定できます。prepared statement キャッシュ サイズを設定すると、WebLogic Server は、prepared statement が指定された数に達するまで、アプリケーションと EJB で使用される各 prepared statement を保管します。statement は、接続プール単位ではなく、「接続ごとに」キャッシュされます。たとえば、prepared statement キャッシュ サイズを 10 に設定すると、WebLogic Server は、その特定の接続を使ってアプリケーションまたは EJB によって呼び出された最初の 10 個の prepared statement を保存します。

アプリケーションまたは EJB がキャッシュに保管されている prepared statement のいずれかを呼び出すと、WebLogic Server はキャッシュに保存されている statement を再使用します。prepared statement を再使用することで、データベース中の statement を解析する必要がなくなり、データベース マシンの CPU 使用量が減るので、現在の statement に対するパフォーマンスが向上し、他のタスクが利用できる CPU サイクルが増えます。

prepared statement キャッシュ サイズのデフォルト値は 0 です。接続プールに対して prepared statement キャッシュ サイズを設定するには、以下の方法を使用できます。

コンフィグレーション ファイルを使って接続プールの prepared statement キャッシュ サイズを設定するには、サーバを起動する前に、エディタで config.xml を開き、PreparedStatementCacheSize 属性に対するエントリを JDBCConnectionPool タグに追加します。次に例を示します。

<JDBCConnectionPool CapacityIncrement="5"
DriverName="com.pointbase.jdbc.jdbcUniversalDriver"
InitialCapacity="5" MaxCapacity="20" Name="demoPool"
Password="{3DES}ANfMduXgaaGMeS8+CR1xoA=="
PreparedStatementCacheSize="20" Properties="user=examples"
RefreshMinutes="0" ShrinkPeriodMinutes="15"
ShrinkingEnabled="true" Targets="examplesServer"
TestConnectionsOnRelease="false"
TestConnectionsOnReserve="false"
URL="jdbc:pointbase:server://localhost/demo"/>

prepared statement キャッシュの使用に関する制限

prepared statement キャッシュを使用するとパフォーマンスが劇的に向上しますが、使用するかどうかを決定する前に、制限事項について検討する必要があります。prepared statement キャッシュを使用するときは、以下の制限事項に注意してください。

prepared statement のキャッシングに関しては、ここで示されていない問題がほかにも存在する可能性があります。prepared statement に関係してシステムでエラーが発生する場合は、prepared statement のキャッシュ サイズを 0 に設定してみてください。このように設定すると、prepared statement のキャッシングはオフになり、問題の原因が prepared statement のキャッシングかどうかを確認できます。

データベースを変更してから保存されている prepared statement を呼び出すと発生する可能性のあるエラー

キャッシュに保存されている prepared statement は、キャッシュされる時点で特定のデータベース オブジェクトを参照しています。キャッシュに格納されている prepared statement で参照されているデータベース オブジェクトに対して DDL(データ定義言語)操作を実行した場合、次に prepared statement を実行したときに障害が発生します。たとえば、select * from emp のような statement をキャッシュした後、emp テーブルを削除して作成し直した場合、キャッシュされている statement を次に実行したときには、statement を準備したときに存在していたものとまったく同じ emp テーブルがもはや存在しないため、statement は失敗します。

同様に、prepared statement がキャッシュされる時点で、prepared statement はデータベースのテーブルの各カラムに対するデータ型にバインドされています。テーブル内のカラムを追加、削除、または再配置した場合、キャッシュに格納されている prepared statement を再び実行すると障害が発生します。

prepared statement での setNull の使用

WebLogic jDriver for Oracle を使用してデータベースに接続している場合、setNull バインド変数を使用する prepared statement をキャッシュするときには、変数に適切なデータ型を設定する必要があります。汎用データ型を使用する場合は、次の例で示すように、null 以外の値で実行すると statement は失敗します。

java.sql.Types.Long sal=null

.
.
.

if (sal == null)
setNull(2,int)//正しくない
else
setLong(2,sal)

代わりに、次のようにします。

if (sal == null)
setNull(2,long)//正しい
else
setLong(2,sal)

WebLogic jDriver for Oracle を使用すると、この問題が必ず発生します。他の JDBC ドライバを使用したときは、発生する可能性があります。

キャッシュの prepared statement がデータベース カーソルを予約する可能性

WebLogic Server が prepared statement をキャッシュするとき、prepared statement がデータベースのカーソルを開いている場合があります。あまり多くの statement をキャッシュした場合、接続に対するオープン カーソルの制限を越える可能性があります。接続に対するオープン カーソルの制限を超えないようにするには、データベース管理システムで限度を変更するか、または接続プールに対する prepared statement のキャッシュ サイズを小さくします。

適切な prepared statement キャッシュ サイズの決定

prepared statement キャッシュ サイズの最適な設定を決定するには、開発環境でサーバの負荷をエミュレートしてから、Oracle statspack スクリプトを実行します。スクリプトからの出力で、1 秒あたりの解析数を確認します。prepared statement のキャッシュ サイズを増やすと、1 秒あたりの解析数は減ります。1 秒あたりの解析数がそれ以上減少しなくなるまで、prepared statement キャッシュ サイズを段階的に増やします。

注意: プロダクション環境で prepared statement キャッシュの使用を決定する前に、使用上の制限について検討してください。詳細については、 prepared statement キャッシュの使用に関する制限を参照してください。

スタートアップ クラスを使用した prepared statement キャッシュのロード

prepared statement キャッシュを最大限に活用し、最善のパフォーマンスを実現するには、prepared statement キャッシュに格納しようとする各 prepared statement を呼び出すスタートアップ クラスを作成します。WebLogic Server は、使用されている順序で prepared statement をキャッシュし、prepared statement キャッシュ サイズ制限に達した時点で statement のキャッシュを停止します。キャッシュする prepared statement を呼び出すスタートアップ クラスを作成することで、わずかな回数しか呼び出されない statement ではなく、アプリケーションで再利用される statement をキャッシュに格納でき、最低限の数の statement をキャッシュに収めることで最善のパフォーマンスが向上します。また、 prepared statement キャッシュの使用に関する制限で説明されているような問題のある prepared statement がキャッシュされるのを防ぐことができます。

スタートアップ クラスで問題が発生した場合でも、WebLogic Server は後で使用できるように statement をロードしてキャッシュします。

確立されている接続ごとに、statement のキャッシュが個別にあることに注意してください。スタートアップ クラスを使用して statement をキャッシュする場合は、プールから各接続を取得し、その接続でキャッシュする prepared statement を呼び出すという方法で、クラスを作成する必要があります。

接続の需要が増加するのに合わせて接続プールが拡大するようになっている場合は、statement が使用されると新しい接続が statement をキャッシュします。スタートアップ クラスは、新しい接続に対する prepared statement キャッシュをロードすることはできません。接続プールが縮小できるようにしてある場合は、縮小期間が経過して接続が利用できる状態になっていると、接続プールは接続を閉じます。その際、最初に閉じられる接続を指定する手段はありません。したがって、prepared statement キャッシュをロードした接続が、ロードしていない接続より前に閉じられる場合があります。

 

back to top previous page next page