Thursday, 26 January 2017

WLST script for Database adaptor configurations

Step 1) create a property file with Admin Server details , and Number of connections to configure in database adaptor and those configuration details. in this example , i am taking only one DB adaptor configuration. let us say our property file name : dev.properties

domain.name=soa_domain
domain.adminHost=AdminServerHostname
domain.adminPort=7001
domain.adminUserName=Weblogic
domain.soahome=/u01/fmw/product/111/soa_111


###########################DB Configuration#########################################
########## make 'xa' value true if data source is XA################################

deploymentPlan.db.location=/u01/shared/posia/soa/connectors/DBAdapterPlan.xml
totalDbToConfigure=1
############################DB CCBSOA Config properties#################################
db.resource.dbJNDIName1=eis/DB/SOA_INFRA
db.resource.dataSourceName1=jdbc/SOA/SOA_INFRA
db.resource.platformClassName1=
db.resource.xa1=true
db.resource.sequencePreallocationSize1=1
############################################################################################

Step 2 ) Script for DB Adaptor configurations. Let us say file name is : DBAdaptorConfig.py

from java.io import FileInputStream
env=sys.argv[1]

propInputStream = FileInputStream( env+".properties")

configProps = Properties()
configProps.load(propInputStream)
totdbToConfigure=configProps.get('totalDbToConfigure')
domainName=configProps.get("domain.name")
hostName=configProps.get("domain.adminHost")
portNo=configProps.get("domain.adminPort")
adminUserName=configProps.get("domain.adminUserName")
planPathDB=configProps.get("deploymentPlan.db.location")
adminURL="t3://" + hostName + ":" + portNo
soahome=configProps.get('domain.soahome')
appPathDB=soahome+'/soa/connectors/DbAdapter.rar'
appNameDB='DbAdapter'
moduleOverrideNamedb=appNameDB+'.rar'
moduleDescriptorName='META-INF/weblogic-ra.xml'

def delDeploymentPlanVariable(wlstPlan, name, value, xpath,overrideName, origin='planbased'):
    print 'inside delDeploymentPlanVariable'
    wlstPlan.destroyVariable(name)
    wlstPlan.destroyVariableAssignment(name, overrideName, moduleDescriptorName)


def makeDeploymentPlanVariable(wlstPlan, name, value, xpath,overrideName, origin='planbased'):
    print 'inside makeDeploymentPlanVariable'
    wlstPlan.destroyVariable(name)

    wlstPlan.destroyVariableAssignment(name, overrideName, moduleDescriptorName)

    variableAssignment = wlstPlan.createVariableAssignment(name, overrideName, moduleDescriptorName)

    variableAssignment.setXpath(xpath)
    variableAssignment.setOrigin(origin)

    wlstPlan.createVariable(name, value)

    print 'moduleDescriptorName=',moduleDescriptorName

i = 1
print 'no of adapter to configure...' +totdbToConfigure
print 'connecting to weblogic domain...' + domainName
print 'configuring adapter ....' + appPathDB


connect()
edit()
startEdit()
try:


        myPlandb=loadApplication(appPathDB, planPathDB)
        while (i <= int(totdbToConfigure)):
            print 'inside while'
            try:
                    dbJndi =  configProps.get("db.resource.dbJNDIName"+str(i))
                    dbDS=configProps.get('db.resource.dataSourceName'+str(i))
                    dbPlatform=configProps.get('db.resource.platformClassName'+str(i))
                    xaDS= configProps.get('db.resource.xa'+str(i))
                    sequencePreallocationSize=configProps.get('db.resource.sequencePreallocationSize'+str(i))
                    print 'dbjndi............', dbJndi

                    makeDeploymentPlanVariable(myPlandb, "ConnectionInstance_"+dbJndi, dbJndi, '/weblogic-connector/outbound-resource-adapter/connection-definition-grou
p/[connection-factory-interface="javax.resource.cci.ConnectionFactory"]/connection-instance/[jndi-name="'+dbJndi+'"]/jndi-name',moduleOverrideNamedb)

                    if String(xaDS).indexOf('false') == -1:
                        delDeploymentPlanVariable(myPlandb, "ConfigProperty_dataSourceName_Value_"+dbJndi, dbDS, '/weblogic-connector/outbound-resource-adapter/connecti
on-definition-group/[connection-factory-interface="javax.resource.cci.ConnectionFactory"]/connection-instance/[jndi-name="'+dbJndi+'"]/connection-properties/properties/
property/[name="dataSourceName"]/value',moduleOverrideNamedb)
                        makeDeploymentPlanVariable(myPlandb, "ConfigProperty_dataSourceName_Value_"+dbJndi, dbDS, '/weblogic-connector/outbound-resource-adapter/connect
ion-definition-group/[connection-factory-interface="javax.resource.cci.ConnectionFactory"]/connection-instance/[jndi-name="'+dbJndi+'"]/connection-properties/properties
/property/[name="xaDataSourceName"]/value',moduleOverrideNamedb)
                    else:
                        print 'Not a XA'
                        delDeploymentPlanVariable(myPlandb, "ConfigProperty_dataSourceName_Value_"+dbJndi, dbDS, '/weblogic-connector/outbound-resource-adapter/connecti
on-definition-group/[connection-factory-interface="javax.resource.cci.ConnectionFactory"]/connection-instance/[jndi-name="'+dbJndi+'"]/connection-properties/properties/
property/[name="xaDataSourceName"]/value',moduleOverrideNamedb)
                        makeDeploymentPlanVariable(myPlandb, "ConfigProperty_dataSourceName_Value_"+dbJndi, dbDS, '/weblogic-connector/outbound-resource-adapter/connect
ion-definition-group/[connection-factory-interface="javax.resource.cci.ConnectionFactory"]/connection-instance/[jndi-name="'+dbJndi+'"]/connection-properties/properties
/property/[name="dataSourceName"]/value',moduleOverrideNamedb)
                    if len(dbPlatform)!=0:
                        makeDeploymentPlanVariable(myPlandb, "ConfigProperty_platformClassName_Value_"+dbJndi, dbPlatform, '/weblogic-connector/outbound-resource-adapte
r/connection-definition-group/[connection-factory-interface="javax.resource.cci.ConnectionFactory"]/connection-instance/[jndi-name="'+dbJndi+'"]/connection-properties/p
roperties/property/[name="platformClassName"]/value',moduleOverrideNamedb)
                    if len(sequencePreallocationSize)!=0:
                        makeDeploymentPlanVariable(myPlandb, "ConfigProperty_platformClassName_Value_"+dbJndi, sequencePreallocationSize, '/weblogic-connector/outbound-
resource-adapter/connection-definition-group/[connection-factory-interface="javax.resource.cci.ConnectionFactory"]/connection-instance/[jndi-name="'+dbJndi+'"]/connecti
on-properties/properties/property/[name="sequencePreallocationSize"]/value',moduleOverrideNamedb)
                    myPlandb.save();
                    save();

            except:
                    print 'Exception occured while creating datasource'
                    print 'error infor....', sys.exc_info()[0]
                    raise
            i = i+1
        cd('/AppDeployments/DbAdapter/Targets');
        print 'updating configuration............. for ', appNameDB
        print 'updating configuration............. for ', planPathDB
        updateApplication(appNameDB, planPathDB);
        startApplication(appNameDB)
        activate(block='true');
except:
     print '********************************************'
     print 'Exception occured while configuring db jndi'
     print 'error infor....', sys.exc_info()[0]
     undo('false','y')
     exit('y',1001)
     print '********************************************'

Step 3) Invoke WLST and run the script : wlst.sh DBAdaptorConfig.py dev


1 comment: