Wednesday, October 26, 2011

Oracle SOA Suite – Creating weblogic database resources through WLST

Oracle SOA Suite – Creating weblogic database resources through WLST:


WLST script can be use to create the data sources and set the different configuration parameters in weblogic server.
Here we will use the property file to configure the data source details, the WLST script will create the data sources in the server based on the property file.
Just edit the JDBCResources.properties file with the data source details.

JDBCResources.properties

DBURL=jdbc:oracle:thin:@::EAIDB14A
domain.AdminIP=xxxxxxxxx
domain.AdminPort=xxxx
domain.AdminPasswd=xxxxx

datasource.connectionpool.driver.class=oracle.jdbc.OracleDriver
datasource.connectionpool.test.query=SQL SELECT * FROM DUAL
datasource.total=2

datasource.prefix.1=xref
datasource.xref.connectionpool.name.1=ESBXRefDataConnectionPool
datasource.xref.connectionpool.username.1=SOA_SOAINFRA
datasource.xref.connectionpool.password.1=val11g
datasource.xref.connectionpool.initCapacity.1=10
datasource.xref.connectionpool.maxCapacity.1=60
datasource.xref.name.1=ESBXRefDataSource
datasource.xref.jndi.name.1=eai/ds/EAIXRef
datasource.xref.target.1=Clusters/SOACluster,Clusters/WLSCoreCluster

datasource.prefix.2=om
datasource.om.connectionpool.name.2=OMConnectionPool
datasource.om.connectionpool.username.2=SOA_EAIOWNER
datasource.om.connectionpool.password.2=val11g
datasource.om.connectionpool.initCapacity.2=10
datasource.om.connectionpool.maxCapacity.2=180
datasource.om.name.2=CRM6EAIReference
datasource.om.jndi.name.2=eai/ds/EAIReference
datasource.om.target.2=Clusters/SOACluster,Clusters/WLSCoreCluster


The below WLST code snippet will create the required data sources and set the corresponding connection parameters to the data source.

JDBCResourceCreation.py

from java.io import FileInputStream
def createJDBCResources():
propInputStream = FileInputStream("JDBCResources.properties")
configProps = Properties()
configProps.load(propInputStream)
adminURL='t3://'+configProps.get('domain.AdminIP')+':'+configProps.get('domain.AdminPort')
adminUserName='weblogic'
adminPassword=configProps.get("domain.AdminPasswd")
connect(adminUserName, adminPassword, adminURL)
edit()
startEdit()
totalDataSource_to_Create=configProps.get("datasource.total")
server='AdminServer'
cd("Servers/"+server)
target=cmo
cd("../..")
print '========================================='
print 'Creating DataSource....'
print '========================================='
dsTestQuery=configProps.get("datasource.connectionpool.test.query")
dsDriverName=configProps.get("datasource.connectionpool.driver.class")
i=1
while (i <= int(totalDataSource_to_Create)) :
#try:
cd('/')
prefix = configProps.get("datasource.prefix."+ str(i))
poolName = configProps.get("datasource."+prefix+".connectionpool.name."+ str(i))
dsUserName = configProps.get("datasource."+prefix+".connectionpool.username."+ str(i))
dsPassword = configProps.get("datasource."+prefix+".connectionpool.password."+ str(i))
initCapacity = configProps.get("datasource."+prefix+".connectionpool.initCapacity."+ str(i))
maxCapacity = configProps.get("datasource."+prefix+".connectionpool.maxCapacity."+ str(i))
dsName = configProps.get("datasource."+prefix+".name."+ str(i))
jndiname = configProps.get("datasource."+prefix+".jndi.name."+ str(i))
datasourceTargets = configProps.get("datasource."+prefix+".target."+ str(i)).split(",")
print 'prefix',prefix
print 'poolName',poolName
print 'dsUserName',dsUserName
print 'dsPassword',dsPassword
print 'initCapacity',initCapacity
print 'maxCapacity',maxCapacity
print 'dsName',dsName
print 'jndiname',jndiname
print 'datasourceTargets',datasourceTargets
print 'Creating DataSource: ',dsName,' ....'
print("")
print("*** Creating JDBC with property prefix " + prefix)
myResourceName = dsName
print("Here is the Resource Name: " + myResourceName)
jdbcSystemResource = create(myResourceName,"JDBCSystemResource")
myFile = jdbcSystemResource.getDescriptorFileName()
print ("HERE IS THE JDBC FILE NAME: " + myFile)
jdbcResource = jdbcSystemResource.getJDBCResource()
jdbcResource.setName(myResourceName)
# Create the DataSource Params
dpBean = jdbcResource.getJDBCDataSourceParams()
myName=jndiname
dpBean.setJNDINames([myName])
#dpBean.setGlobalTransactionsProtocol('EmulateTwoPhaseCommit')
dpBean.setGlobalTransactionsProtocol('None')
# Create the Driver Params
drBean = jdbcResource.getJDBCDriverParams()
drBean.setPassword(dsPassword)
drBean.setUrl(configProps.get("DBURL"))
drBean.setDriverName(dsDriverName)
propBean = drBean.getProperties()
driverProps = Properties()
driverProps.setProperty("user",dsUserName)
e = driverProps.propertyNames()
while e.hasMoreElements() :
propName = e.nextElement()
myBean = propBean.createProperty(propName)
myBean.setValue(driverProps.getProperty(propName))
# Create the ConnectionPool Params
ppBean = jdbcResource.getJDBCConnectionPoolParams()
ppBean.setInitialCapacity(int(initCapacity))
ppBean.setMaxCapacity(int(maxCapacity))
ppBean.setTestConnectionsOnReserve(true)
ppBean.setTestTableName('SQL SELECT 1 FROM DUAL')
# Adding KeepXaConnTillTxComplete to help with in-doubt transactions.
xaParams = jdbcResource.getJDBCXAParams()
xaParams.setKeepXaConnTillTxComplete(1)
# Add Target
for datasourceTarget in datasourceTargets:
print 'DataSourceTargets',datasourceTargets
print 'DataSourceTarget',datasourceTarget
if datasourceTarget=='':
print ''
else:
jdbcSystemResource.addTarget(getMBean(datasourceTarget))
print 'DataSource: ',dsName,', has been created Successfully !!!'
print '========================================='
#except:
#print '***** CANNOT CREATE DATASOURCE !!! Check If the DataSource With the Name : ' , dsName ,' Alreday exists or NOT...'
#print ''
i = i + 1
print '========================================='
save()
activate()
disconnect()

def main():
createJDBCResources();
print 'Successfully created JDBC resources for SOACoreDomain'
main()

Execute the WLST script that will create the required data sources and set the corresponding parameters.
>$ORACLE_HOME/common/bin/wlst.sh JDBCResourceCreation.py

Download: JDBCResourceCreation.py  JDBCResources.properties

1 comment: