ユニバーサル接続プール・データ・ソースの使用

ユニバーサル接続プール(UCP)データ・ソースは、Oracle Universal Connection Poolingを使用してOracle Databaseに接続するユーザー用のオプションとして提供されています。UCPは、Oracle WebLogic Server接続プーリングに対する代替接続プーリング・テクノロジを提供します。

ユニバーサル接続プール・データ・ソースとは

ユニバーサル接続プール・データ・ソースは、UCPを使用してOracle Databaseに接続するユーザー用のオプションとして提供されています。UCPは、Oracle WebLogic Server接続プーリングに対する代替接続プーリング・テクノロジを提供します。

ノート:

通常、Oracleデータベースとの接続を確立するために、汎用データ・ソースマルチ・データ・ソースまたはActive GridLinkデータ・ソースをOracle WebLogic Serverで使用することをお薦めします。

UCPデータ・ソースを使用する場合、WebLogic Serverでは次のサポートが提供されます:

  • 汎用データ・ソースマルチ・データ・ソースまたはActive GridLinkデータ・ソースの代替データ・ソースとしての構成。

  • データ・ソースのデプロイおよびアンデプロイ。

  • 基本的なモニタリングおよび統計:

    • ConnectionsTotalCount

    • CurrCapacity

    • FailedReserveRequestCount

    • ActiveConnectionsHighCount

    • ActiveConnectionsCurrentCount

  • Oracle簡易ドライバ、XAドライバおよびJDBCリプレイ・ドライバ対応ドライバでの動作保証。

UCPデータ・ソースでは、次の機能はサポートされません:

  • WebLogic Serverトランザクション・マネージャ(1フェーズ、LLR、JTS、JDBC TLog、決定子リソースなど)

  • 追加のライフサイクル操作(中断、再開、停止、強制停止、開始など)。

  • 任意の接続プールの汎用サポート。

  • Oracle WebLogic Serverセキュリティ・オプション。

  • 前にリストされているもの以外のJDBCドライバ。

  • JMS、リース、EJBなどのOracle WebLogic Serverデータ操作。

  • UCPデータ・ソースに対するRMIアクセス。

UCPデータ・ソースの実装は、疎結合されており、アプリケーションによる新しいUCP機能の使用をサポートするためにucp.jarを切り替えることができます。UCPデータ・ソースは、アプリケーション・スコープ環境/アプリケーション・パッケージ化環境またはスタンドアロン・モジュール環境ではサポートされません。

Oracle Universal Connection Poolの詳細は、『Oracle Universal Connection Pool for JDBC開発者ガイド』を参照してください。

ユニバーサル接続プール・データ・ソースの構成

WebLogicドメインにユニバーサル接続プール・データ・ソースを構成する場合は、WebLogic Server管理コンソール、WebLogic Scripting Tool (WLST)またはFusion Middleware Controlを使用できます。

WebLogic Server管理コンソールとWLSTによる方法は、次のトピックを参照してください:

WebLogic Server管理コンソールでのUCPの構成

WebLogic Server管理コンソールでユニバーサル接続プール(UCP)データ・ソースを作成する手順は、Oracle WebLogic Server管理コンソール・オンライン・ヘルプのユニバーサル接続プール・データ・ソースの作成を参照してください。この手順には、データ・ソースの構成ウィザードにアクセスする方法も含まれます。

次の各項では、WebLogic Server管理コンソールからデータ・ソースの構成ウィザードを使用して、データ・ソースを作成するために使用する基本ステップの概要について説明します。

JDBCデータ・ソースのプロパティの設定

「JDBCデータ・ソースのプロパティ」セクションには、データ・ソースのアイデンティティとデータベース接続でのデータの処理方法を決定するオプションが含まれます。これらのプロパティを構成するためのガイドラインは、次のとおりです。

  • データ・ソース名 - 「名前」フィールドにUCPデータ・ソースの名前を入力します。JDBCデータ・ソースの名前は、WebLogicドメイン内でデータ・ソースを識別するために使用されます。システム・リソース・データ・ソースの場合、そのリソース以外のすべてのJDBCシステム・リソース(データ・ソースを含む)間で一意の名前にする必要があります。名前の競合を避けるために、データ・ソースの名前は、その他の構成オブジェクト(サーバー、アプリケーション、クラスタ、JMSキュー、JMSトピック、JMSサーバーなど)の名前の間でも一意にする必要があります。

  • スコープ - 使用可能なスコープのリストからデータ・ソースのスコープを選択します。スコープは、「グローバル」(ドメイン・レベル)または既存の「リソース・グループ」や「リソース・グループ・テンプレート」に設定できます。

  • JNDI名 - 「JNDI名」フィールドにUCPデータ・ソースのJNDI名を入力します。単一の名前または複数の名前でJNDIツリーにバインドされるように、データ・ソースを構成します。単一のJDBC接続プールを指す複数のデータ・ソースを含む従来の構成のかわりに、複数JNDI名のデータ・ソースを使用できます。詳細は、『Oracle WebLogic Server JNDIアプリケーションの開発』を参照してください。

  • 「データベースのタイプ」および「ドライバ」 - UCPデータ・ソースは、Thin XA、非XAおよびJDBCリプレイ・ドライバという3つのOracleドライバで動作保証されています。メニューから必要なドライバを選択します。

表4-4に、ドライバとJDBC接続ファクトリのサポートされる組合せを示します

表4-4 UCPデータ・ソースでサポートされるドライバと接続ファクトリの組合せ

ドライバ ファクトリ(ConnectionFactoryClassName)
oracle.ucp.jdbc.PoolDataSourceImpl (デフォルト) oracle.ucp.jdbc.PoolDataSourceImpl
oracle.ucp.jdbc.PoolXADataSourceImpl oracle.jdbc.xa.client.OracleXADataSource
oracle.ucp.jdbc.PoolDataSourceImpl oracle.jdbc.replay.OracleDataSourceImpl

ノート:

現時点では、JDBCリプレイ・ドライバはXAトランザクションをサポートしていません。

表4-4のリストにある非XAドライバを表のXAファクトリと一緒に指定すると、エラーが発生します。表に含まれない値を指定しても、それらは検証されません。

jdbc-driver-paramsdriver-nameが指定されていない場合、デフォルトでoracle.ucp.jdbc.PoolDataSourceImplに設定されます。

サポートされるドライバ名を指定したが、ConnectionFactoryClassName接続プロパティを指定しないと、表4-4の対応するエントリが使用されます。サポートされるドライバ名を指定しない場合、エラーが生成されます。

接続プロパティの設定

接続プロパティは、データ・ソースとDBMSとの間の接続を構成するために使用します。管理コンソールでUCPデータ・ソースの接続プロパティを入力する場合、2つの方法があります。

ウィザードの「接続プロパティ」ページには、UCPドライバに使用できるすべての接続プロパティが表示されるため、適切な値を入力できます。別の方法として、「データベース接続のテスト」ページの「プロパティ」テキスト・ボックスに、propertyName=valueという書式を使用して直接プロパティを入力することで、プロパティを構成できます。「接続プロパティ」ページで入力した値は、「プロパティ」テキスト・ボックスにすでにリストされています。

表4-5では、UCPデータ・ソースで構成できる接続プロパティについて説明します。UCPのプロパティの詳細は、次を参照してください: クラスPoolDataSourceImpl(『Oracle Universal Connection Pool for JDBC Java APIリファレンス』)。属性は、PoolDataSourceImplクラスのセッターによって決定されます。set接頭辞なしの属性名を使用してください。名前の大文字と小文字は区別されません。

表4-5 ユニバーサル接続プールのプロパティ

プロパティ データ型 説明

AbandonedConnectionTimeout

int

中止接続タイムアウトを設定します。

有効値の範囲は、0からInteger.MAX_VALUEまでです。デフォルトは0です。

ConnectionFactoryClassName

String

接続ファクトリのクラス名を設定します。

ConnectionFactoryProperties

name=value

接続ファクトリの複数の接続ファクトリ・プロパティを設定します。

ConnectionFactoryProperty

name=value

接続ファクトリの1つの接続ファクトリ・プロパティを設定します。

ConnectionHarvestMaxCount

int

接続収集の発生時に収集できる接続の最大数を設定します。

ConnectionHarvestTriggerCount

int

接続プールの接続収集が発生するときに使用可能な接続の数を設定します。

ConnectionLabelingHighCost

int

接続ラベリングで接続を高コストとして識別するコスト値を設定します。

ConnectionPoolName

String

接続プール名を設定します。

ConnectionProperties

name=value

接続ファクトリの複数の接続プロパティを設定します。

ConnectionProperty

name=value

接続ファクトリの1つの接続プロパティを設定します。

ConnectionWaitTimeout

int

使用中の接続をクライアントが解放するまでの待機時間(秒)を設定します。

有効値の範囲は、0からInteger.MAX_VALUEまでです。デフォルトは3です。

DatabaseName

String

データベース名を設定します。

DataSourceName

String

データ・ソース名を設定します。

Description

String

データ・ソースの説明を設定します。

FastConnectionFailoverEnabled

Boolean

このプール対応のデータ・ソースを使用してアクセスされる接続プールの高速接続フェイルオーバー(FCF)を有効化します。有効な値は、trueおよびfalseです。

HighCostConnectionReuseThreshold

int

接続ラベリングの高コストの接続再使用しきい値を設定します。

InactiveConnectionTimeout

int

非アクティブ接続タイムアウトを設定します。

有効値の範囲は、0からInteger.MAX_VALUEまでです。デフォルトは0です。

InitialPoolSize

int

初期プール・サイズを設定します。

有効値の範囲は、0からInteger.MAX_VALUEまでです。これを最大プール・サイズより大きい値に設定すると無効になります。デフォルトは0です。

LoginTimeout

int

ログイン・タイムアウトを設定します。

MaxConnectionReuseCount

int

接続再使用数プロパティを設定します。

MaxConnectionReuseTime

long

接続再使用時間プロパティを設定します。

MaxIdleTime

int

プールで使用可能な接続のアイドル・タイムアウトを設定します。

MaxPoolSize

int

接続の最大数を設定します。

有効値の範囲は、1からInteger.MAX_VALUEまでです。デフォルトはInteger.MAX_VALUEです。

MaxStatements

int

接続でプールするかキャッシュできる文の最大数を設定します。

MinPoolSize

int

接続の最小数を設定します。

有効値の範囲は、0からInteger.MAX_VALUEまでです。これを最大プール・サイズより大きい値に設定すると無効になります。デフォルトは0です。

NetworkProtocol

String

データ・ソース・ネットワーク・プロトコルを設定します。

ONSConfiguration

String

リモートONSサブスクリプションに使用される構成文字列を設定します。

Password

String

接続を取得するためのパスワードを設定します。

PortNumber

int

データベース・ポート番号を設定します。

PropertyCycle

int

プロパティ・サイクル(秒)を設定します。

RoleName

String

データ・ソース・ロール名を設定します。

ServerName

String

データベース・サーバー名を設定します。

SQLForValidateConnection

String

SQLForValidateConnectionプロパティの値(SQL)を設定します。

TimeoutCheckInterval

int

timeoutCheckInterval (秒)を設定します。

TimeToLiveConnectionTimeout

int

接続を使用中のままにできる最大時間(秒)を設定します。

URL

String

データベースへの接続を取得するためにデータ・ソースで使用するURLを設定します。

User

String

接続を取得するためのユーザー名を設定します。

ValidateConnectionOnBorrow

Boolean

流用した接続を最初に検証するかどうかを設定します。有効な値は、true およびfalseです。

ノート:

通常の文字列リテラルに加え、システム・プロパティと暗号化プロパティがサポートされます。Oracle WebLogic Server管理コンソール・オンライン・ヘルプの次のトピックを参照してください。

jdbc-driver-params URLが設定されている場合、URLプロパティは無視されます。encrypted-passwordが設定されている場合、パスワード・プロパティは無視されます。

属性ConnectionFactoryProperty、ConnectionFactoryProperties、ConnectionPropertyおよびConnectionFactoryPropertiesは、「name1=value1,name2=value2...」という形式の値を受け入れます。

データベース接続のテスト

「データベース接続のテスト」ページでは、プロパティの自由形式の値を入力し、データ・ソース構成をファイナライズする前に、表名またはSQL文を使用してデータベース接続をテストできます。必要に応じて、Properties属性とSystem Properties属性を使用すると、追加の構成情報をテストできます。

ターゲットの選択

新しいUCPデータ・ソースのデプロイ先として1つ以上のターゲットを選択します。ターゲットを選択していない場合でもデータ・ソースは作成されますが、デプロイされません。そのデータ・ソースは、後でデプロイする必要があります。

WLSTを使用したUCPの構成

他のデータ・ソース・タイプを作成するのと同じ方法で、WebLogic Scripting Tool (WLST)を使用してUCPデータ・ソースを作成できます。ただし、UCPデータ・ソースのほうが属性は少なくなります。

UCPデータ・ソースの構成要素は、次のとおりです。

  • name
  • datasource-type=UCP

  • jdbc-driver-params url

  • jdbc-driver-params property - user

  • jdbc-driver-params password-encrypted

  • jdbc-data-source-params jndi-name

  • jdbc-driver-params other properties

WebLogic Serverデータ・ソース・ディスクリプタからの他の要素は、認識されません。他の要素を指定しても、無視されます。

例4-2に、UCPデータ・ソースを作成するためのサンプルWLSTスクリプトを示します

例4-2 UCPデータ・ソースを作成するためのサンプルWLSTスクリプト

import sys, socket
import os
hostname = socket.gethostname()
connect("username","password","t3://"+hostname+":7001")
edit()
startEdit()
serverName="AdminServer"
serverBean = getMBean('/Servers/'+serverName)
host='%s.us.example.com' %hostname
print 'Creating UCP datasource'
domain = getMBean("/")
startEdit()
resourceName='ucpDS'
print "Creating datasource ds in domain"
systemResource=domain.createJDBCSystemResource(resourceName)
systemResource.setName(resourceName)
jdbcResource=systemResource.getJDBCResource()
jdbcResource.setName(resourceName)
jdbcResource.setDatasourceType('UCP')
driverParams=jdbcResource.getJDBCDriverParams()
driverParams.setDriverName('oracle.ucp.jdbc.PoolDataSourceImpl')
driverParams.setUrl('jdbc:oracle:thin:@dbhost:1521/otrade')
properties = driverParams.getProperties()
properties.createProperty('user', 'dbuser')
properties.createProperty('ConnectionFactoryClassName', 'oracle.jdbc.pool.OracleDataSource')
driverParams.setPassword('PASSWD')
jdbcDataSourceParams=jdbcResource.getJDBCDataSourceParams()
jdbcDataSourceParams.addJNDIName(resourceName)
jdbcDataSourceParams.setGlobalTransactionsProtocol('None')
cd('/SystemResources/' + resourceName )
set('Targets',jarray.array([ObjectName('com.bea:Name=' + serverName + ',Type=Server')], ObjectName))
save()
activate()

ノート:

このサンプルWLSTスクリプトは、汎用データ・ソースを作成するためにも使用できます。これはUCPデータ・ソースの基礎としてWebLogic Serverに用意されています。:
EXAMPLES_HOME\wl_server\examples\src\examples\wlst\online\jdbc_data_source_creation.py

ここでEXAMPLES_HOMEは、WebLogic Serverのコード・サンプルを構成するディレクトリです。WebLogic Scripting Toolの理解WLSTオンライン・サンプル・スクリプトを参照してください。

ユニバーサル接続プール・マルチテナント共有プールのサポート

この機能を使用するには、UCPデータ・ソースをJVMにロードする前に、ユニバーサル接続プール(UCP) MT共有プールのサポートXML構成ファイルのURIをoracle.UCP.jdbc.xmlConfigFileシステム・プロパティを使用して指定する必要があります。

これは、Weblogic Serverの起動時にコマンドラインに設定できます。これでは不都合な場合もあるため、XmlConfigFile接続プロパティを設定することもできます。接続プロパティによる方法を使用する場合は、たとえそれがXMLファイルを使用していなくても、WebLogic Serverで構成されているすべてのUCPデータ・ソースに対して設定する必要があります。そのフォーマットは通常、file:///path/file.xmlのようなものです。

共有プール機能を使用する場合、次のものを除き、データ・ソースのすべての属性が無視されます。
  • 名前 – データ・ソースの名前

  • データ・ソース・タイプ – UCP

  • ドライバのクラス名 – oracle.ucp.jdbc.PoolDataSourceImplまたはoracle.ucp.jdbc.PoolXADataSourceImpl

  • DataSourceFromConfigurationプロパティ – XMLファイル内のデータ・ソース名

  • XmlConfigFileプロパティ – システム・プロパティとして設定されていない場合は、オプションでXMLファイルのURIを設定

  • JNDI名 - データ・ソース・オブジェクトがマップされているJNDI名

    例:

    import sys, socket
    import os
    hostname = socket.gethostname()
    connect("weblogic","server_password","t3://"+hostname+":7001")
    edit()
    startEdit()
    serverName="myserver"
    print 'Creating UCP datasource'
    domain = getMBean("/")
    startEdit()
    resourceName='ds5'
    print "Creating datasource ds in domain"
    systemResource=domain.createJDBCSystemResource(resourceName)
    systemResource.setName(resourceName)
    jdbcResource=systemResource.getJDBCResource()
    jdbcResource.setName(resourceName)
    jdbcResource.setDatasourceType('UCP')
    driverParams=jdbcResource.getJDBCDriverParams()
    driverParams.setDriverName('oracle.ucp.jdbc.PoolDataSourceImpl')
    properties = driverParams.getProperties()
    properties.createProperty('DataSourceFromConfiguration', 'pds1')
    properties.createProperty('XmlConfigFile', 'file:///SharedPoolDemo.xml')
    jdbcDataSourceParams=jdbcResource.getJDBCDataSourceParams()
    jdbcDataSourceParams.addJNDIName(resourceName)
    cd('/SystemResources/' + resourceName )
    set('Targets',jarray.array([ObjectName('com.bea:Name=' + serverName + ',Type=Server')], ObjectName))
    save()
    activate()
    UCPのXMLファイルは次のようになります:
    <?xml version="1.0" encoding="UTF-8"?> 
    <ucp-properties> 
    <connection-pool  
    connection-pool-name="pool1"  
    connection-factory-class-name="oracle.jdbc.pool.OracleDataSource" 
    url="jdbc:oracle:thin:@(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)
    (HOST=dbhost)(PORT=5521))(CONNECT_DATA=
    (SERVICE_NAME=dbhostservice)))"  
    user="system"  
    password="manager"  
    initial-pool-size="4" 
    min-pool-size="2" 
     max-pool-size="10"  
    shared="true"
      >  
    <data-source data-source-name="pds1" 
     user="system" 
     password="manager" 
     service="pdb1_service" 
     description="pdb1 data source"
      />  
    <data-source data-source-name="pds2"   
    user="system"  
     password="manager"   
    service="pdb2_service"  
     description="pdb2 data source"  
    /> 
    </connection-pool> 
    </ucp-properties>

ユニバーサル接続プールJDBCリソースのモニタリング

WebLogic Sever管理コンソールまたはJDBCUCPDataSourceRuntimeMBeanJDBCDataSourceRuntimeMBeanを使用するユニバーサル接続プールJDBCリソースのモニタリングについて学習します。

JDBCUCPDataSourceRuntimeMBeanには、データ・ソースの現在の状態を取得するメソッドと、データ・ソースに関する統計を取得するメソッドが用意されています。取得できる統計には、平均のアクティブな接続数、現在のアクティブな接続数、最大のアクティブな接続数などがあります。このMBeanは、JDBCDataSourceRuntimeMBeanを拡張して、JDBCサービスから他のJDBC MBeanのリストとともにそれを返すことができるようにします。Oracle WebLogic Server MBeanリファレンスJDBCUCPDataSourceRuntimeMBeanを参照してください。

実行時の統計に加え、テストに成功すると、testPool()操作はNULLを返しますが、それ以外の場合はエラー文字列を返します(他のデータ・ソース・タイプと同様)。プールのテストが実行されるのは、検証用に実行するSQL文字列(SELECT 1 from DUALなど)がSQLForValidateConnectionに設定されている場合のみです。操作の残りは、アクションを実行しません。

JDBCのモニタリングの詳細は、「WebLogic JDBCリソースのモニタリング」を参照してください

Oracle Shardingのサポート

シャーディングは、独立したデータベース間でデータが水平にパーティション化されるデータ階層アーキテクチャです。

Oracle Shardingは12.2のUCPで使用可能であり、ネイティブのUCPデータ・ソース機能を介してWebLogic Serverによって表に現れます。『Oracle Shardingの使用』Oracle Shardingの概要を参照してください。

JNDI参照を使用してUCPデータ・ソースにアクセスすると、次のJavaコードのようにシャーディングAPIを使用できます:

import javax.naming.Context;
import javax.naming.InitialContext;
import java.sql.Connection;
import oracle.ucp.jdbc.PoolDataSource;

Context cts = new InitialContext();

/// Look up the data source using JNDI
PoolDatasource pds = (PoolDataSource) ctx.lookup("ShardedDB");

 // Create a key corresponding to sharding key columns, to access the correct shard
OracleShardingKey key = pds.createShardingKeyBuilder().subkey(100, JDBCType.NUMERIC).build();

 // Fetch a connection to the shard corresponding to the key
Connection conn = pds.createconnectionBuilder().shardingKey(key).build();

 // Use the above connection for performing shard specific operations