Creating Resource Adapter Connection factories through WLST for Database Adapter,MQ Adapter and FTP Adapter
WLST script can be use to create the Resource Adapter connection 
factories (DB, FTP and MQ) and set the different configuration 
parameters in weblogic server.
Here we will use the property file to configure the connection factories
 details, the WLST script will create the connection factories in the 
server based on the property file.
Just edit the ResourceAdapter.properties file with the connection factories details.
Set the global.resource.deployment.plan.path property with the where the generated deploymentPlan files needs to be stored.
ResourceAdapter.properties
domain.AdminIP=xxxxxxxx
domain.AdminPort=xxxx
domain.AdminPasswd=xxxxxxxxxx
global.resource.deployment.plan.path= /config/deployplan
domain.resource.ftpHost = 10.10.10.10
domain.resource.ftpUserName=
domain.resource.ftpPassword=
domain.resource.mqQueueManager=TCRMGEN1
domain.resource.mqHost=LOCALHOST
domain.resource.mqport=2022
domain.resource.mqChannel=L_CRM_FUSION_CLNT_N2
The below WLST code snippet will create the required connection factories in the server.
Set the DB data source Connection Factory JNDI Name and the data source 
name as per the requirement. In this sample we are creating two 
connection factories. Change the method createDBConnectionFactory to 
create more Database Adapter connection factories.
Change the method createFTPConnectionFactory to create more FTP Adapter connection factories.
Change the method createMQConnectionFactory to create more FTP Adapter Connection factories.
ResourceAdapterCreation.py
from java.io import FileInputStream
TargetServerName='AdminServer'
#Connect
#The directory of the SOA binaries
soaHome=os.environ["SOAHOME"]
print "SOAHOME="+soaHome
appPathDB=soaHome+'/soa/connectors/DbAdapter.rar'
appNameDB='DbAdapter'
moduleOverrideNameDB=appNameDB+'.rar'
appPathFTP=soaHome+'/soa/connectors/FtpAdapter.rar'
appNameFTP='FtpAdapter'
moduleOverrideNameFTP=appNameFTP+'.rar'
appPathMQ=soaHome+'/soa/connectors/MQSeriesAdapter.rar'
appNameMQ='MQSeriesAdapter'
moduleOverrideNameMQ=appNameMQ+'.rar'
moduleDescriptorName='META-INF/weblogic-ra.xml'
ConnFactory1JNDIName = 'eis/DB/OM'
ConnFactory1DataSourceName = 'eai/ds/EAIReference'
ConnFactory2JNDIName = 'eis/DB/XRef'
ConnFactory2DataSourceName = 'eai/ds/EAIXRef'
transactionSupport='LocalTransaction'
ftpJNDIName='eis/Ftp/ProductRefXML'
mqJNDIName='eis/MQ/MQSeriesAdapterRemoteCRMtoEAI'
domainName='SOADomain'
def createDBConnectionFactory():
        propInputStream = FileInputStream("ResourceAdapter.properties")
        configProps1 = Properties()
        configProps1.load(propInputStream)         planPathDB=configProps1.get('global.resource.deployment.plan.path')+'/'+domainName+'_PlanDB.xml'
        edit()  
        startEdit()
        myPlanDB=loadApplication(appPathDB, planPathDB)
        makeDeploymentPlanVariable(myPlanDB,
 'ConnectionInstance_eis/DB/OM_JNDIName_13102979357209', 
ConnFactory1JNDIName , 
'/weblogic-connector/outbound-resource-adapter/connection-definition-group/[connection-factory-interface="javax.resource.cci.ConnectionFactory"]/connection-instance/[jndi-name="'+ConnFactory1JNDIName+'"]/jndi-name',moduleOverrideNameDB)
        makeDeploymentPlanVariable(myPlanDB,
 'ConfigProperty_dataSourceName_Value_13102979357210', 
ConnFactory1DataSourceName,'/weblogic-connector/outbound-resource-adapter/connection-definition-group/[connection-factory-interface="javax.resource.cci.ConnectionFactory"]/connection-instance/[jndi-name="'+ConnFactory1JNDIName+'"]/connection-properties/properties/property/[name="xADataSourceName"]/value',moduleOverrideNameDB)
        makeDeploymentPlanVariable(myPlanDB,
 'ConnectionInstance_eis/DB/XRef_JNDIName_13102979357211', 
ConnFactory2JNDIName , 
'/weblogic-connector/outbound-resource-adapter/connection-definition-group/[connection-factory-interface="javax.resource.cci.ConnectionFactory"]/connection-instance/[jndi-name="'+ConnFactory2JNDIName+'"]/jndi-name',moduleOverrideNameDB)
        makeDeploymentPlanVariable(myPlanDB,
 'ConfigProperty_dataSourceName_Value_13102979357213', 
ConnFactory2DataSourceName,'/weblogic-connector/outbound-resource-adapter/connection-definition-group/[connection-factory-interface="javax.resource.cci.ConnectionFactory"]/connection-instance/[jndi-name="'+ConnFactory2JNDIName+'"]/connection-properties/properties/property/[name="xADataSourceName"]/value',moduleOverrideNameDB)
                                                makeDeploymentPlanVariable(myPlanDB,
 'ConnectionDefinitionProperties_TransactionSupport_13123107532320', 
transactionSupport,'/weblogic-connector/outbound-resource-adapter/connection-definition-group/[connection-factory-interface="javax.resource.cci.ConnectionFactory"]/connection-instance/[jndi-name="'+ConnFactory1JNDIName+'"]/connection-properties/transaction-support',moduleOverrideNameDB)
                                                makeDeploymentPlanVariable(myPlanDB,
 'ConnectionDefinitionProperties_TransactionSupport_13123107532320', 
transactionSupport,'/weblogic-connector/outbound-resource-adapter/connection-definition-group/[connection-factory-interface="javax.resource.cci.ConnectionFactory"]/connection-instance/[jndi-name="'+ConnFactory2JNDIName+'"]/connection-properties/transaction-support',moduleOverrideNameDB)
        myPlanDB.save();
        save();
        cd('/AppDeployments/DbAdapter/Targets');
        updateApplication(appNameDB, planPathDB);
        startApplication(appNameDB)
        #redeploy(appNameDB, planPathDB,targets=cmo.getTargets());
        activate(block='true');
def createFTPConnectionFactory():
        propInputStream = FileInputStream("ResourceAdapter.properties")
        configProps1 = Properties()
        configProps1.load(propInputStream)  
      planPathFTP=configProps1.get('global.resource.deployment.plan.path')+'/'+domainName+'_PlanFTP.xml'
        ftpHost=configProps1.get('domain.resource.ftpHost')
        ftpUserName=configProps1.get('domain.resource.ftpUserName')
        ftpPassword=configProps1.get('domain.resource.ftpPassword')
        edit()
        startEdit()
        myPlanFTP=loadApplication(appPathFTP, planPathFTP)
        makeDeploymentPlanVariable(myPlanFTP,
 'ConnectionInstance_eis/Ftp/FtpPRD_JNDIName', ftpJNDIName, 
'/weblogic-connector/outbound-resource-adapter/connection-definition-group/[connection-factory-interface="javax.resource.cci.ConnectionFactory"]/connection-instance/[jndi-name="'+ftpJNDIName+'"]/jndi-name',moduleOverrideNameFTP)        
        makeDeploymentPlanVariable(myPlanFTP,
 'ConfigProperty_useSftp_Value_FtpPRD', 'true', 
'/weblogic-connector/outbound-resource-adapter/connection-definition-group/[connection-factory-interface="javax.resource.cci.ConnectionFactory"]/connection-instance/[jndi-name="'+ftpJNDIName+'"]/connection-properties/properties/property/[name="useSftp"]/value',moduleOverrideNameFTP)
        makeDeploymentPlanVariable(myPlanFTP, 'ConfigProperty_host_Value_FtpPRD', ftpHost,   '/weblogic-connector/outbound-resource-adapter/connection-definition-group/[connection-factory-interface="javax.resource.cci.ConnectionFactory"]/connection-instance/[jndi-name="'+ftpJNDIName+'"]/connection-properties/properties/property/[name="host"]/value',moduleOverrideNameFTP)
        makeDeploymentPlanVariable(myPlanFTP,
 'ConfigProperty_password_Value_FtpPRD', ftpUserName, 
'/weblogic-connector/outbound-resource-adapter/connection-definition-group/[connection-factory-interface="javax.resource.cci.ConnectionFactory"]/connection-instance/[jndi-name="'+ftpJNDIName+'"]/connection-properties/properties/property/[name="username"]/value',moduleOverrideNameFTP)
        makeDeploymentPlanVariable(myPlanFTP,
 'ConfigProperty_password_Value_FtpPRD', ftpPassword, 
'/weblogic-connector/outbound-resource-adapter/connection-definition-group/[connection-factory-interface="javax.resource.cci.ConnectionFactory"]/connection-instance/[jndi-name="'+ftpJNDIName+'"]/connection-properties/properties/property/[name="password"]/value',moduleOverrideNameFTP)
        myPlanFTP.save();
        save();
        cd('/AppDeployments/FtpAdapter/Targets');
        updateApplication(appNameFTP, planPathFTP);
        startApplication(appNameFTP)
        #redeploy(appNameFTP, planPathFTP,targets=cmo.getTargets());
        activate(block='true');
def createMQConnectionFactory():
        propInputStream = FileInputStream("ResourceAdapter.properties")
        configProps1 = Properties()
        configProps1.load(propInputStream)  
        planPathMQ=configProps1.get('global.resource.deployment.plan.path')+'/'+domainName+'_PlanMQ.xml'
        mqQueueManager=configProps1.get('domain.resource.mqQueueManager')  
        mqHostName=configProps1.get('domain.resource.mqHost')
        MqPort=configProps1.get('domain.resource.mqport')
        mqChannelName=configProps1.get('domain.resource.mqChannel')        
        edit()
        startEdit()
        myPlanMQ=loadApplication(appPathMQ, planPathMQ)
        makeDeploymentPlanVariable(myPlanMQ,
 'ConnectionInstance_eis_MQ_MQSeriesAdapterRemoteCRMtoEAI_JNDIName', 
mqJNDIName, 
'/weblogic-connector/outbound-resource-adapter/connection-definition-group/[connection-factory-interface="javax.resource.cci.ConnectionFactory"]/connection-instance/[jndi-name="'+mqJNDIName+'"]/jndi-name',moduleOverrideNameMQ)        
        makeDeploymentPlanVariable(myPlanMQ, 'ConfigProperty_host_Value_mqQueueManagerPRD', mqQueueManager,   '/weblogic-connector/outbound-resource-adapter/connection-definition-group/[connection-factory-interface="javax.resource.cci.ConnectionFactory"]/connection-instance/[jndi-name="'+mqJNDIName+'"]/connection-properties/properties/property/[name="queueManagerName"]/value',moduleOverrideNameMQ)
        makeDeploymentPlanVariable(myPlanMQ,
 'ConfigProperty_password_Value_mqHostNamePRD', mqHostName, 
'/weblogic-connector/outbound-resource-adapter/connection-definition-group/[connection-factory-interface="javax.resource.cci.ConnectionFactory"]/connection-instance/[jndi-name="'+mqJNDIName+'"]/connection-properties/properties/property/[name="hostName"]/value',moduleOverrideNameMQ)
        makeDeploymentPlanVariable(myPlanMQ,
 'ConfigProperty_password_Value_MqPortPRD', MqPort, 
'/weblogic-connector/outbound-resource-adapter/connection-definition-group/[connection-factory-interface="javax.resource.cci.ConnectionFactory"]/connection-instance/[jndi-name="'+mqJNDIName+'"]/connection-properties/properties/property/[name="portNumber"]/value',moduleOverrideNameMQ)
        makeDeploymentPlanVariable(myPlanMQ,
 'ConfigProperty_password_Value_mqChannelNamePRD', mqChannelName, 
'/weblogic-connector/outbound-resource-adapter/connection-definition-group/[connection-factory-interface="javax.resource.cci.ConnectionFactory"]/connection-instance/[jndi-name="'+mqJNDIName+'"]/connection-properties/properties/property/[name="channelName"]/value',moduleOverrideNameMQ)        
        myPlanMQ.save();
        save();
        cd('/AppDeployments/MQSeriesAdapter/Targets');
        updateApplication(appNameMQ, planPathMQ);
        startApplication(appNameMQ)
        #redeploy(appNameFTP, planPathMQ,targets=cmo.getTargets());
        activate(block='true');
def makeDeploymentPlanVariable(wlstPlan, name, value, xpath,overrideName, origin='planbased'):
    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
 def main():
    propInputStream1 = FileInputStream("ResourceAdapter.properties")
    domainProps = util.Properties()
    domainProps.load(propInputStream1)
        adminURL='t3://'+domainProps.get('domain.AdminIP')+':'+domainProps.get('domain.AdminPort')
    adminUserName='weblogic'
    adminPassword=domainProps.get("domain.AdminPasswd")
    connect(adminUserName, adminPassword, adminURL)
    createDBConnectionFactory()
    createFTPConnectionFactory()
    createMQConnectionFactory()
    disconnect()
 main()
Set the environment variable “SOAHOME” in the server and execute the 
WLST script that will create the required Resource Adapter connection 
factories. Also this will create the deploymentPlan files to the 
location specified. The generated plan file can be used to modify the 
configuration of connection factories also to move the connection 
factories from one server to another server.
>$ORACLE_HOME/common/bin/wlst.sh ResourceAdapterCreation.py
 
 
Hi
ReplyDeleteI tried create adapter resource using the similar scripts. Resource created in Plan.xml,and redeploy or updateApplication completed. But the new resource not showing in console. I have to run "Update" and then got new resource.
Have you got this happened before? Is there domainRuntime or serverRuntime after connect in your scripts?
Thank you for sharing this great post.
ReplyDeleteOnline OSB Training
OSB Course Online