データベース管理ガイド

     前  次    新しいウィンドウで目次を開く     
ここから内容

サンプル WLST スクリプト

この付録に示す build.xmloraracconf.py および oraracconf.py.properties のサンプルでは、Oracle RAC データベースを示すため既存の WebLogic Portal domain をコンフィグレーションする方法の一例を説明しています。詳細については、「Oracle RAC を使用した WebLogic Portal の使用」を参照してください。

コード リスト B-1 oraracconf.py
from java.lang import Exception
from jarray import array
from com.bea.plateng.domain.script.jython import WLSTException
import re


class SkipConfError(Exception):
def __init__(self, msg):
self.msg = msg

def __str__(self):
return repr(self.msg)

class OracleRAC:
instance = None

def __init__(self):
try:
self.sid = oracle_rac_sid
except NameError, ne:
raise SkipConfError, "Oracle RAC disabled, skipping. "

print "Re-configuring data sources to target Oracle RAC: " + self.sid
self.initClusterSize()
self.vips=[]
self.ports=[]
self.sids=[]
for i in range(self.size):
index = i + 1
self.vips.append( eval("oracle_rac_vip_" + str(index)) )
self.ports.append( eval("oracle_rac_port_" + str(index)) )
self.sids.append( eval("oracle_rac_sid_" + str(index)) )
self.initDriverURL()
self.xa_driver = oracle_xa_driver
self.nonxa_driver = oracle_nonxa_driver
OracleRAC.instance = self

def initClusterSize(self):
self.size = 0
while true:
try:
eval('oracle_rac_vip_' + str(self.size+1))
self.size += 1
except NameError:
return

def initDriverURL(self):
self.driver_url = 'jdbc:oracle:thin:@(DESCRIPTION =(ADDRESS_LIST ='
for i in range(self.getSize()):
self.driver_url += '(ADDRESS = (PROTOCOL = TCP)(HOST = ' + self.vips[i] + ')(PORT = ' + self.ports[i] + '))'
self.driver_url += '(FAILOVER=on)(LOAD_BALANCE=load_balancing_var))(CONNECT_DATA =(SERVER = DEDICATED)(SERVICE_NAME = ' + self.sid + ')))'

def getSize(self):
if self.size < 0:
self.initClusterSize()
return self.size

def getDriverDSURL(self, loadbal):
return self.driver_url.replace('load_balancing_var',loadbal)

def getMultiDSURL(self, node):
index = node - 1
return 'jdbc:oracle:thin:@'+ self.vips[index] +':'+ self.ports[index] +':'+ self.sids[index]


class DataSource:

def __init__(self, dsName, user, passwd):
self.dsName = dsName
self.user = user
self.passwd = passwd

cd('/JDBCSystemResource/' + dsName + '/JdbcResource/' + dsName + '/JDBCDataSourceParams/NO_NAME_0')
jarray_jndi_names=get('JNDINames')
self.jndi_names=[]
for jname in jarray_jndi_names:
self.jndi_names.append(jname)

def deleteDataSource(self, dsName):
try:
WLDomain.instance.all_datasources.index(dsName)
cd('/')
print "Deleting datasource: " + dsName
delete(dsName,'JDBCSystemResource')
print dsName + " deleted!"
except ValueError:
print dsName + " does not exist!"


def createPhysicalDataSource(self, dsName, jndiName, xaProtocol, url, xa_driver, user, passwd):
print 'Creating Physical DataSource ' + dsName
self.deleteDataSource(dsName)

cd('/')

sysRes = create(dsName, "JDBCSystemResource")

cd('/JDBCSystemResource/' + dsName + '/JdbcResource/' + dsName)
dataSourceParams=create('dataSourceParams','JDBCDataSourceParams')
dataSourceParams.setGlobalTransactionsProtocol(xaProtocol)
cd('JDBCDataSourceParams/NO_NAME_0')
print "Setting JNDI Names: "
print jndiName
set('JNDIName',jndiName)

cd('/JDBCSystemResource/' + dsName + '/JdbcResource/' + dsName)
connPoolParams=create('connPoolParams','JDBCConnectionPoolParams')
connPoolParams.setMaxCapacity(20)
connPoolParams.setInitialCapacity(5)
connPoolParams.setCapacityIncrement(1)
connPoolParams.setTestConnectionsOnReserve(true)
connPoolParams.setTestTableName('SQL SELECT 1 FROM DUAL')

cd('/JDBCSystemResource/' + dsName + '/JdbcResource/' + dsName)
driverParams=create('driverParams','JDBCDriverParams')
driverParams.setUrl(url)
if xa_driver == "true":
driverParams.setDriverName(OracleRAC.instance.xa_driver)
else:
driverParams.setDriverName(OracleRAC.instance.nonxa_driver)
driverParams.setPasswordEncrypted(passwd)
cd('JDBCDriverParams/NO_NAME_0')
create(dsName,'Properties')
cd('Properties/NO_NAME_0')
create('user', 'Property')
cd('Property/user')
cmo.setValue(user)

if xaProtocol != "None":
cd('/JDBCSystemResource/' + dsName + '/JdbcResource/' + dsName)
XAParams=create('XAParams','JDBCXAParams')
XAParams.setKeepXaConnTillTxComplete(true)
XAParams.setXaRetryDurationSeconds(300)
XAParams.setXaTransactionTimeout(120)
XAParams.setXaSetTransactionTimeout(true)
XAParams.setXaEndOnlyOnce(true)

assign('JDBCSystemResource',dsName,'Target',WLDomain.instance.targetServer)
print dsName + ' successfully created.'

class MultiDataSource(DataSource):
def __init__(self, dsName, user, passwd):
DataSource.__init__(self, dsName, user, passwd)
self.xa_protocol = eval(dsName.replace('-','_') + '_xa_protocol')
self.xa_driver = eval(dsName.replace('-','_') + '_xa_driver')
self.mp_algorithm = eval(dsName.replace('-','_') + '_mp_algorithm')

def configure(self):
print 'Creating Multi DataSource ' + self.dsName
self.deleteDataSource(self.dsName)

ds_list = ''
for i in range(OracleRAC.instance.size):
index = i + 1
physical_ds_name = self.dsName + '-' + str(index)
self.createPhysicalDataSource(physical_ds_name, physical_ds_name, self.xa_protocol, OracleRAC.instance.getMultiDSURL(index), self.xa_driver, self.user, self.passwd)
if i > 0:
ds_list += ','
ds_list += physical_ds_name

cd('/')

sysRes = create(self.dsName, "JDBCSystemResource")

cd('/JDBCSystemResource/' + self.dsName + '/JdbcResource/' + self.dsName)
dataSourceParams=create('dataSourceParams','JDBCDataSourceParams')
dataSourceParams.setAlgorithmType(self.mp_algorithm)
dataSourceParams.setDataSourceList(ds_list)
cd('JDBCDataSourceParams/NO_NAME_0')
print "Setting JNDI Names: "
print self.jndi_names
set('JNDINames',self.jndi_names)
set('GlobalTransactionsProtocol',self.xa_protocol)

assign('JDBCSystemResource',self.dsName,'Target',WLDomain.instance.targetServer)
print 'Multi DataSource '+ self.dsName + ' successfully created.'

class PhysicalDataSource(DataSource):
def __init__(self, dsName, user, passwd):
DataSource.__init__(self, dsName, user, passwd)
self.loadbalance = eval(dsName.replace('-','_') + '_loadbalance')

def configure(self):
print "Re-configuring existing datasource: " + self.dsName
self.createPhysicalDataSource(self.dsName, self.jndi_names, 'None', OracleRAC.instance.getDriverDSURL(self.loadbalance), 'false', self.user, self.passwd)
print self.dsName + ' successfully re-configured.'

class WLDomain:
instance = None
def __init__(self):

try:
self.db_user = database_user
self.db_passwd = database_passwd
except NameError, ne:
print "No databse user/password specified. Will not configure portalDataSource, etc."

try:
self.gs_user = groupspace_user
self.gs_passwd = groupspace_passwd
except NameError, ne:
print "No groupspace cmrepo user/password specified. Will not configure appGroupSpaceDataSource"


try:
readDomain(domain_dir)
server=ls('Server').splitlines()
self.targetServer = re.split('\s+', server[0])[1]
except IndexError, ie:
raise SkipConfError, "No valid domain found at: " + domain_dir + ". Skipping RAC configuration. "
except NameError, ne:
print "Required parameter domain_dir not specified! "
sys.exit(-1)

self.all_datasources = ls('/JDBCSystemResource').splitlines()
for i in range(len(self.all_datasources)):
self.all_datasources[i]= re.split('\s+', self.all_datasources[i])[1]

WLDomain.instance = self

def configure(self):
for dsName in self.all_datasources:
print "Processing datasource: " + dsName + " ..."

try:
is_mp=eval(dsName.replace('-','_') + '_is_mp')
except NameError:
print "Skipping unknown datasource: " + dsName
continue

try:
if dsName == 'appsGroupSpaceDataSource':
user = self.gs_user
passwd = self.gs_passwd
else:
user = self.db_user
passwd = self.db_passwd
except AttributeError, ae:
print "Skipping un-used datasource: " + dsName
continue

if is_mp=="true":
MultiDataSource(dsName, user, passwd).configure()
else:
PhysicalDataSource(dsName, user, passwd).configure()

updateDomain()
print "Successfully re-configured domain for Oracle RAC! "


for i in range(1,len(sys.argv)):
exec sys.argv[i]

try:
OracleRAC()
WLDomain().configure()
except SkipConfError, sce:
print sce
コード リスト B-2 build.xml
<?xml version="1.0"?>
<project name="WLP_AND_RAC" default="configServer">
<target name="configServer">
<property name="domain_dir" value="."/>
<wlst debug="false"
failOnError="false"
fileName="./oraracconf.py"
properties="./oraracconf.py.properties"
arguments="domain_dir='${domain_dir}'">
</wlst>
</target>
</project>
コード リスト B-3 oraracconf.py.properties
database_user=WEBLOGIC_8
database_passwd=WEBLOGIC_8
groupspace_user=WEBLOGIC_9
groupspace_passwd=WEBLOGIC_9

oracle_rac_sid=DBSRAC10
oracle_xa_driver=oracle.jdbc.xa.client.OracleXADataSource
oracle_nonxa_driver=oracle.jdbc.OracleDriver

oracle_rac_vip_1=rnhp380-c11-23-vip
oracle_rac_port_1=1521
oracle_rac_sid_1=DBSRAC101

oracle_rac_vip_2=rnhp380-c11-25-vip
oracle_rac_port_2=1521
oracle_rac_sid_2=DBSRAC102

p13nDataSource_is_mp=true
p13nDataSource_xa_protocol=None
p13nDataSource_xa_driver=false
p13nDataSource_mp_algorithm=Load-Balancing

appsGroupSpaceDataSource_is_mp=true
appsGroupSpaceDataSource_xa_protocol=None
appsGroupSpaceDataSource_xa_driver=false
appsGroupSpaceDataSource_mp_algorithm=Load-Balancing

portalDataSourceNeverXA_is_mp=true
portalDataSourceNeverXA_xa_protocol=OnePhaseCommit
portalDataSourceNeverXA_xa_driver=false
portalDataSourceNeverXA_mp_algorithm=Failover

portalDataSourceAlwaysXA_is_mp=true
portalDataSourceAlwaysXA_xa_protocol=TwoPhaseCommit
portalDataSourceAlwaysXA_xa_driver=true
portalDataSourceAlwaysXA_mp_algorithm=Load-Balancing

portalDataSource_is_mp=true
portalDataSource_xa_protocol=OnePhaseCommit
portalDataSource_xa_driver=false
portalDataSource_mp_algorithm=Load-Balancing

  ページの先頭       前  次