8 共有プールのデータ・ソースの使用
- 共有プールの仕組み
アプリケーション・コンポーネントがデータ・ソースから接続をリクエストすると、共有プールはデータ・ソースのデータベース名とサービスに一致する接続の検索を試みます。 - 共有プールのデータ・ソースを使用する場合の要件および考慮事項
共有プールを使用するための要件を学習し、理解します。 - 共有プールの構成
WebLogic Server固有のドライバ・プロパティを設定し、データベース・プロパティを構成することで、共有プールを構成できます。
共有プールの仕組み
ノート:
共有プールに使用可能な接続がなく、容量が許す場合は、共通サービス用の新しい接続が作成され、接続をリクエストしている共有データ・ソース用に利用されます。親トピック: 共有プールのデータ・ソースの使用
共有プールのデータ・ソースを使用する場合の要件および考慮事項
共有プールを使用するための要件を学習し、理解します。
-
共有プール機能を使用するには、Oracle 12.2データベースおよび
12.2 JDBC/UCP/ONS
のクライアント・ライブラリが必要です。 -
特定の共有プールのJNDI名を指定するすべての共有データ・ソース定義には、共有プールのデータ・ソース定義と互換性のある構成属性が必要です。
-
一意のPDBサービスを定義する各共有データ・ソースに対して、個別のONSサブスクリプションを管理する必要があります。
-
共有プール機能は、汎用およびActive GridLink (AGL)のデータ・ソースをサポートします。
ノート:
汎用共有データ・ソースを、マルチ・データ・ソース構成内のメンバーのデータ・ソースとして使用することはできません。実行時に例外が発生し、マルチ・データ・ソースのデプロイメントが失敗する可能性があるためです。 -
共有接続プールは、PDB名、サービス名、およびRACインスタンス名(AGL)に基づく接続の照合をサポートします
-
共有プールでは、スレッドに固定の最適化、アプリケーション起動のPDB切替え、およびIDベースのプールとBI偽装IDのオプションはサポートされません。
親トピック: 共有プールのデータ・ソースの使用
共有プールの構成
WebLogic Server固有のドライバ・プロパティを設定し、データベース・プロパティを構成することで、共有プールを構成できます。
共有プール用のWebLogic Server固有のドライバ・プロパティの構成
共有プール定義の設定
-
共有プール属性
weblogic.jdbc.sharedPool=true
を設定します。ノート:
この属性は、そのデータ・ソース定義が共有接続プールを表すかどうかを示します。この属性をfalse(デフォルト)に設定すると、そのデータ・ソースを共有プールとして参照するデータ・ソースはデプロイメントで例外が発生します。
共有データ・ソース定義の設定
- 共有プールのJNDI名を設定します。
weblogic.jdbc.sharedPoolJNDIName=<jndiname>
ノート:
JNDI名でバインドされたデータ・ソースが共有プールとして構成されていない場合、デプロイメントで例外が発生します。 - 共有データ・ソースに関連付けられているPDBの名前を設定します。
weblogic.jdbc.pdbName=<pdb>
ノート:
共有データ・ソースでPDB名のプロパティを指定していない場合、getConnection()
呼出しはルート・コンテナに関連付けられたJDBC接続、または共有プール構成のデフォルト・サービスを返します。 -
PDBサービス名を設定して、特定のPDBに対して接続が再設定されたときに、JDBC接続に設定されるサービスの名前を指定できます。
weblogic.jdbc.pdbServiceName=<service>
ノート:
PDBサービス名の属性はオプションです。共有データ・ソース構成で指定されていない場合、接続は共有プールのデータ・ソースのデフォルト・サービスに関連付けられます。 -
Proxy User
プロパティを設定して、共有データ・ソースの接続を再利用するときに、JDBC接続に設定されるプロキシ・ユーザーの名前とパスワードを指定できます。weblogic.jdbc.pdbProxy.<proxy-user>=<proxy-password>
ノート:
プロキシ・ユーザーは、接続がPDB/サービスに切り替えられた場合にのみ設定されます。プロキシ・ユーザーの属性とロール名の属性の両方が指定されている場合、プロキシ・ユーザーが優先され、そのロールはデータベース・セッションには設定されません。 -
Role
プロパティを設定して、共有データ・ソース用に再利用されるときに、JDBC接続にパスワード保護されたロールを設定するように指定することもできます。共有データ・ソース用のパスワード保護されたロールは、いくつでも構成できます。weblogic.jdbc.pdbRole.<role-name>=<role-password>
ノート:
Proxy User
属性も設定されている場合は、それが優先され、ロールは設定されません。
ノート:
プロキシ認証またはパスワード保護されたロールを設定して、共有データ・ソースを保護できます。任意の共有プールに対して、これらのオプションのうちの1つのみを使用できます。親トピック: 共有プールの構成
共有プール用のデータベース構成
この共通ユーザーには、次の権限が必要です。
-
grant execute on
dbms_service_prvt to c##user;
-
grant set container to
c##user;
共有プールのデータ・ソース構成では、CDBの共通サービスを含むURLを指定する必要があります。
パスワードで保護されたロールは、共有データ・ソースによって接続される各PDBで構成されている共通ユーザーに対して定義する必要があります
例8-1 共有プールの構成用のWLSTスクリプト
import os
def createJDBCSystemResource(owner, resourceName, driver, url, user, password):
systemResource=owner.createJDBCSystemResource(resourceName)
systemResource.setName(resourceName)
jdbcResource=systemResource.getJDBCResource()
jdbcResource.setName(resourceName)
driverParams=jdbcResource.getJDBCDriverParams()
if driver:
driverParams.setDriverName(driver)
if url:
driverParams.setUrl(dburl)
properties = driverParams.getProperties()
if user:
properties.createProperty('user', user)
if password:
driverParams.setPassword(dbpassword)
return systemResource
def createSharedPoolDS(owner, resourceName, driver, url, user, password):
systemResource = createJDBCSystemResource(owner, resourceName, driver, url, user, password)
systemResource.getJDBCResource().getJDBCDriverParams().getProperties().createProperty('weblogic.jdbc.sharedPool', 'true')
return systemResource
def createSharingDS(owner, resourceName, sharedPoolJNDIName, pdbName, pdbServiceName, roleName, rolePassword):
systemResource = createJDBCSystemResource(owner, resourceName, driver=None, url=None, user=None, password=None)
properties=systemResource.getJDBCResource().getJDBCDriverParams().getProperties()
properties.createProperty('weblogic.jdbc.sharedPoolJNDIName', sharedPoolJNDIName)
if pdbName:
properties.createProperty("weblogic.jdbc.pdbName", pdbName)
if pdbServiceName:
properties.createProperty("weblogic.jdbc.pdbServiceName", pdbServiceName)
if roleName:
roleprop=properties.createProperty("weblogic.jdbc.pdbRole."+roleName)
if rolePassword:
roleprop.setEncryptedValue(rolePassword)
return systemResource
servername='myserver'
sharedpoolname='sharedpool'
sharingds1name='sharingds1'
sharingds2name='sharingds2'
driver='oracle.jdbc.OracleDriver'
dburl='jdbc:oracle:thin:@host:1521/orcl'
dbuser='c##1'
dbpassword='xyzzy'
pdb1='pdb1'
pdb1service='coke'
pdb1role='cokerole'
pdb1rolepwd='cokepwd'
pdb2='pdb2'
pdb2service='pepsi'
pdb2role='pepsirole'
pdb2rolepwd='pepsipwd'
connect('weblogic', 'weblogic', 't3://localhost:7001')
edit()
# create shared pool datasource
startEdit()
spds=createSharedPoolDS(cmo, sharedpoolname, driver, dburl, dbuser, dbpassword)
spds.addTarget(getMBean('/Servers/'+servername))
activate()
startEdit()
# create sharing datasource 1
sharingds1=createSharingDS(owner=cmo, resourceName=sharingds1name, sharedPoolJNDIName=sharedpoolname, pdbName=pdb1, pdbServiceName=pdb1service, roleName=pdb1role, rolePassword=pdb1rolepwd)
sharingds1.addTarget(getMBean('/Servers/'+servername))
# create sharing datasource 2
sharingds2=createSharingDS(owner=cmo, resourceName=sharingds2name, sharedPoolJNDIName=sharedpoolname, pdbName=pdb2, pdbServiceName=pdb2service, roleName=pdb2role, rolePassword=pdb2rolepwd)
sharingds2.addTarget(getMBean('/Servers/'+servername))
activate()
exit()
親トピック: 共有プールの構成