Database Administration Guide

     Previous  Next    Open TOC in new window  Open Index in new window  View as PDF - New Window  Get Adobe Reader - New Window
Content starts here

Sample WLST Scripts

The sample build.xml, oraracconf.py and oraracconf.py.properties listed in this appendix provide an example of how to configure an existing WebLogic Portal domain to point to an Oracle RAC database. For more information, see Using WebLogic Portal with Oracle RAC.

Listing 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
Listing 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>
Listing 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

  Back to Top       Previous  Next