WLST script to add DataSource and DBAdapter EIS Connection Factory
Creating a EIS ConnectionFactory in your Database Adapter can be done with the WebLogic Administration Console, but of course this is also “scriptable”. What I needed was a script that created a Data Source with EIS Connection factory bound to the specific datasource.
First I created a properties file, let’s call it DsCf.properties. Everything between <> should be replaced with your own values:
# Propertie file for creating datasource and EIS DB Adapter # Created by Michel Schildmeijer # Domain settings domainname="<your WLS DOMAIN>" adminurl=<WLS HOST:Admin Port> adminusername=weblogic adminpassword=<passwd weblogic> #datasource settings datasourcename=<Name DataSource> datasourcedatabasename=<database> datasourcetarget=<targeted manaegd server> datasourcefilename= datasourcename + '.xml' datasourcejndiname= 'jdbc/' + datasourcename datasourcedriverclass=oracle.jdbc.OracleDriver datasourceurl=jdbc:oracle:thin:@<db host>:1521:<db sid> datasourceusername=<db user> datasourcepassword=<db user password datasourcetestquery=SQL SELECT * FROM DUAL #EIS Connection Factory settings connfactname=eis/DB/<Connection factory Name>
Second, I created a WLST script to execute these properties and added the DataSource and ConnectionFactory. See the script below.
When running on a UNIX or linux system, navigate to the WLS DOMAIN DIR /bin( Specified during domaincreation) like /app/oracle/middleware/user_projects/domains/<Your domain>/bin and run
./setDomainEnv.sh
After this you are able to deploy the DataSource en ConnectionFactory:
java weblogic.WLST loadProperties DsCf.properties
After finished you can check in the WebLogic Admin Console to see:
- If datasource is created
- If in your outbound connections of the database adapter the EIS connection factory with binding to the DataSource has been created.
Script DsCf.py
Â
<code></code><code>import os
</code><code>import time
</code><code>domainName = domainname
</code><code>adminURL= adminurl
</code><code>adminUserName= adminusername
</code><code>adminPassword= adminpassword
</code><code>dsName= datasourcename
</code><code>dsFileName= datasourcefilename
</code><code>dsDatabaseName=datasourcedatabasename
</code><code>datasourceTarget=datasourcetarget
</code><code>dsJNDIName=datasourcejndiname
</code><code>dsDriverName=datasourcedriverclass
</code><code>dsURL=datasourceurl
</code><code>dsUserName=datasourceusername
</code><code>dsPassword=datasourcepassword
</code><code>dsTestQuery=datasourcetestquery
</code><code>connect(adminUserName, adminPassword, adminURL)
</code><code>TargetServerName='soa_server1'
</code><code>edit()
</code><code>startEdit()
</code><code>cd('/')
</code><code>cmo.createJDBCSystemResource(dsName)
</code><code>cd('/JDBCSystemResources/' + dsName + '/JDBCResource/' + dsName)
</code><code>cmo.setName(dsName)
</code><code>cd('/JDBCSystemResources/' + dsName + '/JDBCResource/' + dsName + '/JDBCDataSourceParams/' + dsName )
</code><code>set('JNDINames',jarray.array([String('jdbc/' + dsName )], String))
</code><code>cd('/JDBCSystemResources/' + dsName + '/JDBCResource/' + dsName + '/JDBCDriverParams/' + dsName )
</code><code>cmo.setUrl(dsURL)
</code><code>cmo.setDriverName( dsDriverName )
</code><code>cmo.setPassword(dsPassword)
</code><code>cd('/JDBCSystemResources/' + dsName + '/JDBCResource/' + dsName + '/JDBCConnectionPoolParams/' + dsName )
</code><code>cmo.setTestTableName(dsTestQuery)
</code><code>cd('/JDBCSystemResources/' + dsName + '/JDBCResource/' + dsName + '/JDBCDriverParams/' + dsName + '/Properties/' + dsName )
</code><code>cmo.createProperty('user')
</code><code>cd('/JDBCSystemResources/' + dsName + '/JDBCResource/' + dsName + '/JDBCDriverParams/' + dsName + '/Properties/' + dsName + '/Properties/user')
</code><code>cmo.setValue(dsUserName)
</code><code>cd('/JDBCSystemResources/' + dsName + '/JDBCResource/' + dsName + '/JDBCDriverParams/' + dsName + '/Properties/' + dsName )
</code><code>cmo.createProperty('databaseName')
</code><code>cd('/JDBCSystemResources/' + dsName + '/JDBCResource/' + dsName + '/JDBCDriverParams/' + dsName + '/Properties/' + dsName + '/Properties/databaseName')
</code><code>cmo.setValue(dsDatabaseName)
</code><code>cd('/JDBCSystemResources/' + dsName + '/JDBCResource/' + dsName + '/JDBCDataSourceParams/' + dsName )
</code><code>cmo.setGlobalTransactionsProtocol('OnePhaseCommit')
</code><code>cd('/SystemResources/' + dsName )
</code><code>set('Targets',jarray.array([ObjectName('com.bea:Name=' + datasourceTarget + ',Type=Server')], ObjectName))
</code><code>save()
</code><code>activate()
</code><code>print 'Data source ' + dsName + ' configured'</code>
<code></code><code>
</code><code>#Connect
</code><code>#appPath='/app/oracle/middleware/soa11g/soa/connectors/DbAdapter.rar'
</code><code>#planPath='/app/oracle/middleware/soa11g/soa/connectors/DbAdapterPlanGenerated.xml'</code>
<code></code><code></code>oracleHome = os.environ.get(“ORACLE_HOMEâ€)
<code></code><code>appPath= oracleHome + 'soa/connectors/DbAdapter.rar'
planPath=oracleHome + 'soa/connectors/DbAdapterPlanGenerated.xml'</code>
<code></code><code></code>
<code>CFName=connfactname
</code><code>dsName=datasourcename
</code><code>appName='DbAdapter'
</code><code>moduleOverrideName=appName+'.rar'
</code><code>moduleDescriptorName='META-INF/weblogic-ra.xml'
</code><code>def makeDeploymentPlanVariable(wlstPlan, name, value, xpath, origin='planbased'):
</code><code>while wlstPlan.getVariableAssignment(name, moduleOverrideName, moduleDescriptorName):
</code><code>wlstPlan.destroyVariableAssignment(name, moduleOverrideName, moduleDescriptorName)
</code><code>while wlstPlan.getVariable(name):
</code><code>wlstPlan.destroyVariable(name)
</code><code>variableAssignment = wlstPlan.createVariableAssignment( name, moduleOverrideName, moduleDescriptorName )
</code><code>variableAssignment.setXpath( xpath )
</code><code>variableAssignment.setOrigin( origin )
</code><code>wlstPlan.createVariable( name, value )
</code><code> def main():
</code><code> connect(adminUserName, adminPassword, adminURL)
</code><code> edit()
</code><code> try:
</code><code> startEdit()
</code><code> planPath = get('/AppDeployments/DbAdapter/PlanPath')
</code><code> print '__ Using plan ' + planPath
</code><code> myPlan=loadApplication(appPath, planPath)
</code><code> print '___ BEGIN change plan'
</code><code> makeDeploymentPlanVariable(myPlan, 'ConnectionInstance_' '+ CFName' +'_JNDIName_abc123XXX','+ CFName', '/weblogic-connector/outbound-resource-adapter/connection-definition-group/[connection-factory-interface="javax.resource.cci.ConnectionFactory"]/connection-instance/[jndi-name="'+ CFName + '"]/jndi-name')
</code><code> makeDeploymentPlanVariable(myPlan, 'ConfigProperty_xADataSourceName_'+ dsName +'_abc123XXX',dsName, '/weblogic-connector/outbound-resource-adapter/connection-definition-group/[connection-factory-interface="javax.resource.cci.ConnectionFactory"]/connection-instance/[jndi-name="'+ CFName + '"]/connection-properties/properties/property/[name="xADataSourceName"]/value')
</code><code> print '___ DONE change plan'
</code><code> myPlan.save();
</code><code> save();
</code><code> activate(block='true');
</code><code> cd('/AppDeployments/DbAdapter/Targets');
</code><code>
</code><code> redeploy(appName, planPath,targets=cmo.getTargets());
</code><code> print 'EIS Connection factory ' + CFName + 'using' + dsName + ' configured';
</code><code> except:
</code><code> stopEdit('y')
</code><code>main()</code>
<code>
</code>
Related posts:
- Simple WLST script to add WebLogic Cluster timer scheduler
- Core J2EE patterns, Abstract Factory: unit testing with Struts
- Setting up Oracle JNDI Datasource on Tomcat
- Configuring a (Oracle) datasource on Glassfish
- Hands-on: Run-time datasource selection with JCA adapters in the Oracle Service Bus 11g
Really an awesome blog to be appreciable, it covers some significant matters that are very helpful and needful.