Search This Blog

Tuesday, August 24, 2010

Configuring Multi DataSource

Introducing Problem Statement for this post is WLST which enables us to configure any kind of resource on a WebLogic domain. Here I am with new attempt to configuring Multi Datasource. In most of new domain configurations you need to work separately for configuring Datasource. We are already seen how to configure a Dynamic Datasource with customized property file, Adding to the same topic now we are going to work on Multi Datasource configuration.

The steps involved in multi datasource confiuration are as follows:
1. Configure individual datasource
2. Configure a new multidatasource
3. Add the datasources created in steip 1

Keeping more flavor (Object-Orientation) to your script we will create a Class in WLST this time. Are you ready??? I know you guys very intelligents and know all WLST tricks how they works and all!! Lets dive into the process of configuration.
-->


#==========================================
# File name: ConfigMDS.py
# Please change the code (line 38) as per your environment and needs
# Author : Inteligent WLA :)
#=============================================

class MDS:          
 def __init__(self, nam):
  self.nam  = nam 

 def configMDS(self):
  n=self.nam
  try:
   cd('/')
   cmo.createJDBCSystemResource(n)
   cd('/JDBCSystemResources/'+n+'/JDBCResource/'+n)
   cmo.setName(n)
   cd('JDBCDataSourceParams/'+n)
   set('JNDINames',jarray.array([String(n)], String))
 
   cmo.setAlgorithmType('Failover')
   dslist=raw_input('Please enter comma separating Datasources for MDS:')
   cmo.setDataSourceList(dslist)
   cd('/JDBCSystemResources/'+n)
   targetType=raw_input('Target to (C)luster or (S)erver: ')
   if targetType in ('C','c') :
           clstrNam=raw_input('Cluster Name: ')
               set('Targets',jarray.array([ObjectName('com.bea:Name='+clstrNam+',Type=Cluster')], ObjectName))
          else:
               servr=raw_input('Server Name: ')
               set('Targets',jarray.array([ObjectName('com.bea:Name='+servr+',Type=Server')], ObjectName))
   print 'Succesfully configured MultiDataSource...'
   activation()
  except BeanAlreadyExistsException:
   print 'Error: '+n+' BeanAlreadyExists...'
       cancelEdit('y')
   exit()

#===== main program===============
if __name__== "main":
 connect('wlusr','paswd','t3://AdminUrl:AdminPort')
 edit()
 startEdit()
 
 mdsName = raw_input("Please enter MultiDataSource name: ")
  # create object, call configMDS
 MDS(mdsName).configMDS()
 print('Exiting...')
 exit() 

Here you can templatise more by creating the a properties file where you need to store Multidatasoruce name, JNDIName, WebLogic Admin user, Password, AdminURL, the datasource names you wish to add to the multidatasource.

Use the same steps as followed in the Generic Data Source Creation.

# http://unni-at-work.blogspot.com/2009/03/multi-data-source-using-wlst.html
# http://edocs.bea.com/wls/docs100/wlsmbeanref/mbeans/JDBCDataSourceParamsBean.html#AlgorithmType

5 comments:

  1. I get an error setting up the multidatasource:
    [java] AttributeError: setDataSourceList
    even tough I have it hardcoded the values and it is as in the scripts written by you or the one recorded.
    cmo.setDataSourceList('ENSDS1,ENSDS2')

    Any idea how to debug futher?

    ReplyDelete
  2. Thanks for referring the blog.
    dslist is a Python list you need to use input as ['ENSDS1','ENSDS2']
    This is like an array in C.
    Hope this will help you.

    ReplyDelete
  3. This comment has been removed by the author.

    ReplyDelete
  4. Hi Pavan,

    Many thanks for sharing your knowledge across. I have been an avid follower of your blog. I have automated the creation of datasource. But unfortunately, unable to add multiple targets (in a non-clustered environment). For instance if the properties file has DS_TARGETS=soa,osb, I have created a list dsTargetsList=dsTargets.split(","). Then I loop through as, for aTarget in dsTargetsList and call
    set('Targets',jarray.array([ObjectName('com.bea:Name='+aTarget+',Type=Server')], ObjectName)). But this doesn't set all the targets. It sets the last target in the list which is osb. After successful activation, you only see one target i.e. osb. Can you help me with this please?

    ReplyDelete
  5. @Jawad, Can you try from the interactive mode so that you can trace what is wrong going after looping or you need loop or not, then you can proceed with the loop.

    ReplyDelete

Please write your comment here

Popular Posts