cle_clock
Home > wikikonf >  was/actions/by kikonf > datasrc







Datasrc

print

Action : was.datasrc   (Category : was, Name : datasrc, By : kikonf)
Complete Name : was.datasrc.by.kikonf
Version : 5.0        License : Modified BSD License

Purpose of the was category :
Easy to customize. This category use in background the wsadmin command in jython mode (through AdminConfig, AdminControl and AdminTask), to drive WebSphere Application Server ® configuration.
You can use it to manage the whole WebSphere ® architecture.

Purpose of this datasrc plugin : Creates a new DataSource

The following shows the main Source Code File for the Action : was.datasrc

Toggle lines
##  Copyright (c) 2008, Patrick Germain Placidoux
##  All rights reserved.
##
##  This file is part of Kikonf Public Software.
##
##  Kikonf Public Software is released under the modified BSD License,
##  which should accompany it or any part of it in the file "COPYING".
##  If you do not have this file you can access the license 
##  through the WWW at http://www.kikonf.org/license/bsd/license.txt.
## 
##  Home: http://www.kikonf.org
##  Contact: kikonf@gmx.com




from actions.was.tools import *



class Datasrc(wasAction):
    
    DATASRC=\
        {
            'db2': {
                'notxa':    'DB2 Universal JDBC Driver DataSource(templates/system|jdbc-resource-provider-templates.xml#DataSource_DB2_UNI_1)',
                'xa':       'DB2 Universal JDBC Driver XA DataSource(templates/system|jdbc-resource-provider-templates.xml#DataSource_DB2_UNI_2)',
            },

            'oracle_5': {
                'notxa':    'Oracle JDBC Driver DataSource(templates/system|jdbc-resource-provider-templates.xml#DataSource_ora_5)',
            },
            
            'oracle_6': {
                'xa':    'Oracle JDBC Driver XA DataSource(templates/system|jdbc-resource-provider-templates.xml#DataSource_ora_6)',
            },
            
            'msql': {
                'notxa':    'WebSphere embedded ConnectJDBC for SQL Server DataSource(templates/system|jdbc-resource-provider-templates.xml#DataSource_DD_3)',
                'xa':    'WebSphere embedded ConnectJDBC for SQL Server XA DataSource(templates/system|jdbc-resource-provider-templates.xml#DataSource_DD_4)',
            }
        }

    def extract(self, scope_attrs, name=None, prefix=None, doRaise=True, **keywords):
        self_funct='extract'
        from actions.was.jdbc.by.kikonf import jdbc
        self.verbose(scope_attrs, name=name, prefix=prefix)    
        scope_id, scope_attrs, scope=self.getScope(scope_attrs=scope_attrs, indent=self.getIndent())
        indent=self.getIndent() + 3*' '
        
        verbose('DataSource retreiving.', level=self.getVerbose(), ifLevel=4, indent=indent, logFile=self.getLogFile())
        ds=split( AdminConfig.getid(self.getScopeCP() + '/JDBCProvider:/DataSource:/') )
        for d in ds:  
            datasrcs=getShowAsDict(AdminConfig.show(d))            
            dname=datasrcs['name']
            
            if not (prefix!=None and name!=None and dname==prefix + '_' + name \
            or prefix==None and name!=None and name==dname \
            or prefix!=None and name==None and dname.startswith(prefix) \
            or prefix==None and name==None):continue            
            verbose('DataSource:' + dname + ' retreived.', level=self.getVerbose(), ifLevel=3, indent=indent, logFile=self.getLogFile())
            
            if datasrcs.has_key('description') and datasrcs['description']!=None:desc=datasrcs['description']
            else:desc=None
            if desc==DESIGN_NOTICE:desc=None
            
            jndi_name=datasrcs['jndiName']
            provider=AdminConfig.showAttribute(datasrcs['provider'], 'name')
            
            try:
                ptype=jdbc.getProviderType(datasrcs['provider'], self)
                if ptype==None:raise
                if ptype.startswith('oracle'):ptype='oracle'
            except:
                verbose('DataSource:' + dname + ', not managed provider: ' + AdminConfig.showAttribute(datasrcs['provider'], 'name') + '. Skipped !', level=self.getVerbose(), ifLevel=3, indent=indent, logFile=self.getLogFile())
                continue
            
            verbose('JDBCProvider:' + provider + ' with type:' + ptype + ' retreived.', level=self.getVerbose(), ifLevel=3, indent=indent, logFile=self.getLogFile())
                
            statement_cache_size=datasrcs['statementCacheSize']
            
            datasrc_node=self.newTop() #-- because in extract mode, each call returns a new blank top node.
            _name=dname
            if prefix!=None:_name=dname.split(prefix + '_')[1]
            
            datasrc_node.setAttrs(name=_name, desc=desc, jndi_name=jndi_name, provider=provider, dbtype=ptype, statement_cache_size=statement_cache_size, prefix=prefix)
            
            mkNodeScope(datasrc_node, scope_attrs, isUnique=True) #-- creates a scope node.

            jaas_name=datasrcs['authDataAlias']
            propset=datasrcs['propertySet']
            
            jaas=None
            verbose('JAASAuthData listing.', level=self.getVerbose(), ifLevel=4, indent=indent, logFile=self.getLogFile())
            as=split( AdminConfig.list("JAASAuthData") )
            for a in as:
                aname=AdminConfig.showAttribute(a, "alias")
                if jaas_name==aname:
                    jaas=a
                    break
                
            if jaas==None:
                if doRaise:raise xception.kikonfActionSystemException(self, self_funct, 'Tag: jaas, Unable to retreive JAAS Alias named:' + jaas_name + ' !')
                else:verbose('Tag: jaas, Unable to retreive JAAS Alias named:' + jaas_name + ' !', level=self.getVerbose(), ifLevel=3, indent=indent, logFile=self.getLogFile())
                user=password='?'
            else:
                user = AdminConfig.showAttribute(jaas, 'userId')
                verbose('JAASAuthData:' + aname + ' with user:' + user + ' retreived.', level=self.getVerbose(), ifLevel=3, indent=indent, logFile=self.getLogFile())

                try:
                    password=self.getPwdFromJAAS(aname)
                except:password='???'

            _name=aname
            if prefix!=None:_name=aname.split(prefix + '_')[1]
            
            desc=AdminConfig.showAttribute(jaas, 'description')
            if desc!=None:desc=desc[1:-1]
            if desc==DESIGN_NOTICE:desc=None
            
            jaas_node=datasrc_node.newNode('jaas', name=_name, user=user, password=password, create='true', desc=desc)
             
            connection_pool_node=datasrc_node.newNode('connection_pool')        # Tag: connection_pool
            indent=self.getIndent() + 3*' '
            getConnectionPoolAttrs(datasrcs['connectionPool'], connection_pool_node, level=self.getVerbose(), indent=indent, logFile=self.getLogFile())
            
            rps = split( AdminConfig.showAttribute(datasrcs['propertySet'], 'resourceProperties') ) # Tag: properties
            properties_node=datasrc_node.newNode('properties')

            properties=jdbc.Jdbc.DRIVERS[ptype]['pset']
            for rp in rps:
                
                for property in properties:
                    if rp.startswith(property):
                        value=AdminConfig.showAttribute(rp, 'value');
                        properties_node.newNode('property', name=property, value=value)

    def remove(self, no_name, no_name_no_prefix):
        datasrc_node=self.getTop()        
        datasrc_attrs = datasrc_node.getAttrs()
        scope_id, scope_attrs, scope=self.getScope(parent_node=datasrc_node, indent=self.getIndent()) #-- Retreives scope
        self.verbose(scope_attrs, name=datasrc_attrs.name, prefix=datasrc_attrs.prefix)
        indent=self.getIndent() + 3*' '

        # no_name/no_name_no_prefix
        prefix=datasrc_attrs.prefix
        name=datasrc_attrs.name
        if no_name or no_name_no_prefix:name=None
        if no_name_no_prefix:prefix=None
        
        # remove all at prefix if present.
        self.rmvDatasrc(name=name, prefix=prefix, indent=indent)
        
        if datasrc_node.hasNode('jaas'):
            jaas_node=datasrc_node.getNode('jaas')[0]
            jaas_attrs = jaas_node.getAttrs()        
            if jaas_attrs.create == 'true':self.rmvJaas(name=jaas_attrs.name, prefix=datasrc_attrs.prefix, indent=indent) # not allowed to destroy all.
    
    def inject(self):
        self_funct='inject'
        datasrc_node = self.getTop()        
        datasrc_attrs = datasrc_node.getAttrs()
        scope_id, scope_attrs, scope=self.getScope(parent_node=datasrc_node, indent=self.getIndent()) #-- Retreives scope
        from actions.was.jdbc.by.kikonf import jdbc
        indent=self.getIndent() + 3*' '
        
        self.rmvDatasrc(name=datasrc_attrs.name, prefix=datasrc_attrs.prefix, indent=indent) #-- Destroy all first        

        #-- name
        if datasrc_attrs.prefix==None:name=datasrc_attrs.name
        else:name=datasrc_attrs.prefix + '_' + datasrc_attrs.name
        self.verbose(scope_attrs, name=name, prefix=datasrc_attrs.prefix)

        if datasrc_node.hasNode('jaas'):
            jaas_node=datasrc_node.getNode('jaas')[0]
            jaas_attrs = jaas_node.getAttrs()
            jaas_name=self.inJaas(jaas_attrs, datasrc_attrs.prefix, indent=indent)
        else:raise xception.kikonfActionSystemException(self, self_funct, 'Tag: jaas, is required !')
        
        verbose('JDBCProvider retreiving.', level=self.getVerbose(), ifLevel=4, indent=indent, logFile=self.getLogFile())
        provider = AdminConfig.getid(self.getScopeCP()+'/JDBCProvider:' + datasrc_attrs.provider)

        if provider in ('', None):raise xception.kikonfActionSystemException(self, self_funct, 'Unable to retreive provider:' + datasrc_attrs.provider +  '!')
        verbose('JDBCProvider:' + provider + ' retreived.', level=self.getVerbose(), ifLevel=3, indent=indent, logFile=self.getLogFile())

        dbtype=datasrc_attrs.dbtype
        if AdminConfig.showAttribute(provider, 'xa')=='true':
            isxa='xa'
            if dbtype=='oracle':dbtype+='_6'
        else:
            isxa='notxa'        
            if dbtype=='oracle':dbtype+='_5'
        if not Datasrc.DATASRC[dbtype].has_key(isxa):raise xception.kikonfActionSystemException(self, self_funct, 'This dbtype:' + datasrc_attrs.dbtype + 'do not support  this xa mode:' + iswa + ' !')        
        dtmpl=Datasrc.DATASRC[dbtype][isxa]      

        cmdvalues=[]
        cmdvalues.append(['name', name])
        cmdvalues.append(['jndiName', datasrc_attrs.jndi_name])
        
        if datasrc_attrs.desc!=None:cmdvalues.append(['description', datasrc_attrs.desc])
        else:cmdvalues.append(['description', DESIGN_NOTICE])
        
        cmdvalues.append(['authDataAlias', jaas_name])
        cmdvalues.append(['statementCacheSize', datasrc_attrs.statement_cache_size])

        if datasrc_node.hasNode('connection_pool'):
            conpool_node=datasrc_node.getNode('connection_pool')[0]
            cmdvalues.append(['connectionPool', getConnectionPoolCfgs(conpool_node, level=self.getVerbose(), indent=indent, logFile=self.getLogFile())])

        if isxa=='xa':cmdvalues.append(['xaRecoveryAuthAlias', jaas_name])
        
        # creates
        verbose('DataSource template listing.', level=self.getVerbose(), ifLevel=4, indent=indent, logFile=self.getLogFile())
        verbose('DataSource' + datasrc_attrs.name + ' creating using template.', level=self.getVerbose(), ifLevel=4, indent=indent, logFile=self.getLogFile())
        ds = AdminConfig.createUsingTemplate('DataSource', provider, 'name', datasrc_attrs.name, dtmpl)
        AdminConfig.modify(ds, cmdvalues)
        verbose('DataSource:' + datasrc_attrs.name + ' created.', level=self.getVerbose(), ifLevel=3, indent=indent, logFile=self.getLogFile())
                 
        if datasrc_node.hasNode('properties'):self.inProps(datasrc_node.getNode('properties')[0], datasrc_attrs.provider, name, indent=indent + 3*' ')
 
    def rmvDatasrc(self, name=None, prefix=None, indent=None):
        scope_id, scope_attrs, scope=self.getScope()
        verbose('DataSource listing.', level=self.getVerbose(), ifLevel=4, indent=indent, logFile=self.getLogFile())
        ds=getStartByNameAsDict(split( AdminConfig.list('DataSource', scope_id) ))
    
        for dname in ds.keys():
            if prefix!=None and dname.startswith(prefix) \
            or prefix==None and name!=None and name==dname \
            or prefix==None and name==None:
            
                verbose('DataSource:' + dname + ' removing.', level=self.getVerbose(), ifLevel=4, indent=indent, logFile=self.getLogFile())
                AdminConfig.remove(ds[dname])
                verbose('DataSource:' + dname + ' removed.', level=self.getVerbose(), ifLevel=3, indent=indent, logFile=self.getLogFile())
                    
    def inJaas(self, jaas_attrs, prefix=None, indent=None):
        self_funct='inJaas'
        if prefix==None:name=jaas_attrs.name
        else:name=prefix + '_' + jaas_attrs.name
        if jaas_attrs.create == 'false':return name
        self.rmvJaas(name=jaas_attrs.name, prefix=prefix, indent=indent)
        
        if jaas_attrs.user==None or jaas_attrs.password==None:raise xception.kikonfActionSystemException(self, self_funct, 'Tag: jaas, because Attribute "create" is false, Attributes user and password must be guiven !')
        cmdvalues=[]
        
        cmdvalues.append(['alias', name])
        
        if jaas_attrs.desc!=None:description=['description', jaas_attrs.desc]
        else:description=['description', DESIGN_NOTICE]
        
        cmdvalues.append(['userId', jaas_attrs.user])
        cmdvalues.append(['password', jaas_attrs.password])

        verbose('Security retreiving.', level=self.getVerbose(), ifLevel=4, indent=indent, logFile=self.getLogFile())
        security = AdminConfig.getid('/Cell:' + self.getCell() + '/Security:/')
        verbose('JAASAuthData:' + name + ' creating.', level=self.getVerbose(), ifLevel=4, indent=indent, logFile=self.getLogFile())
        jaasAlias = AdminConfig.create('JAASAuthData', security, cmdvalues)
        verbose('JAASAuthData:' + name + ' with name:' + jaas_attrs.user + ' created.', level=self.getVerbose(), ifLevel=3, indent=indent, logFile=self.getLogFile())
        
        return name
        
    def rmvJaas(self, name=None, prefix=None, indent=None):
        verbose('JAASAuthData listing.', level=self.getVerbose(), ifLevel=4, indent=indent, logFile=self.getLogFile())
        as=split(AdminConfig.list("JAASAuthData"))
        
        for a in as:
            aname=AdminConfig.showAttribute(a, "alias")

            if prefix!=None and aname.startswith(prefix) \
            or prefix==None and name!=None and name==aname:
            # or prefix==None and name==None: not allowed to destroy all
            
                verbose('JAASAuthData:' + aname  + ' removing.', level=self.getVerbose(), ifLevel=4, indent=indent, logFile=self.getLogFile())
                AdminConfig.remove(a)
                verbose('JAASAuthData:' + aname  + ' removed.', level=self.getVerbose(), ifLevel=3, indent=indent, logFile=self.getLogFile())
            
    def inProps(self, node, provider, datasrc, indent=None):
        props={}
        
        for prop_node in node.getNodes():
            dct=prop_node.getdAttrs()
            props[dct['name']]=dct['value']
 
        if len(props)!=0:
            self.rmvProps(provider, datasrc, upds=props.keys(), indent=indent) #-- destroy first
    
            verbose('JDBCProvider retreiving.', level=self.getVerbose(), ifLevel=4, indent=indent, logFile=self.getLogFile())
            pset=AdminConfig.getid(self.getScopeCP() + '/JDBCProvider:' + provider + '/DataSource:' + datasrc + '/J2EEResourcePropertySet:/')        
            for prop in props.keys():
                verbose('J2EEResourceProperty:' + prop + ' creating.', level=self.getVerbose(), ifLevel=4, indent=indent, logFile=self.getLogFile())
                AdminConfig.create('J2EEResourceProperty', pset, [['name', prop],['value', props[prop]]])
                verbose('J2EEResourceProperty:' + prop + ' created.', level=self.getVerbose(), ifLevel=3, indent=indent, logFile=self.getLogFile())
        
    def rmvProps(self, provider, datasrc, upds=None, indent=None):
        if upds==None:return
        
        verbose('J2EEResourceProperty retreiving.', level=self.getVerbose(), ifLevel=4, indent=indent, logFile=self.getLogFile())
        ps = getStartByNameAsDict(split( AdminConfig.getid(self.getScopeCP() + '/JDBCProvider:' + provider + '/DataSource:' + datasrc + '/J2EEResourcePropertySet:/J2EEResourceProperty:/') ))

        for pname in ps.keys():
            if pname in upds:
                
                verbose('J2EEResourceProperty:' + pname + ' removing.', level=self.getVerbose(), ifLevel=4, indent=indent, logFile=self.getLogFile())
                AdminConfig.remove(ps[pname])
                verbose('J2EEResourceProperty:' + pname + ' removed.', level=self.getVerbose(), ifLevel=3, indent=indent, logFile=self.getLogFile())

    def verbose(self, scope_attrs, name=None, prefix=None):
        scope=str(scope_attrs).replace("'", '')[1:-1]
        
        if name!=None and prefix!=None:verbose('DataSource:' + name + ', under prefix:' + prefix+ ', at scope:' + scope + '.', level=self.getVerbose(), ifLevel=2, indent=self.getIndent())
        elif name!=None:verbose('DataSource:' + name + ', at scope:' + scope + '.', level=self.getVerbose(), ifLevel=2, indent=self.getIndent())
        elif prefix!=None:verbose('DataSources under prefix:' + prefix + ', at scope:' + scope + '.', level=self.getVerbose(), ifLevel=2, indent=self.getIndent())
        else:verbose('DataSources at scope:' + scope + '.', level=self.getVerbose(), ifLevel=2, indent=self.getIndent())
							
(Source: <KIKONF_INSTALLATION_DIR>/plugins/actions/was/datasrc/by/kikonf/datasrc.py)


  • Line 1 to 3 say something , say something , say something
  • Line 10 to 17 say something , say something , say something , say something , say something
  • Line 20 to 25 say something



Trademarks :
  • "Python" is a registered trademark of the Python Software Foundation.
  • "IBM", "WebSphere MQ", "WebSphere", "WebSphere Aplication Server", "WAS", "Db2" and "AIX" are registred trademarks of International Business Machines Corporation.
  • "oracle", "MySql", "Java" and "JVM" are a registred trademarks of Oracle and/or its affiliates.
  • "Linux" is a trademark registred to Linus Torvalds
  • "MS SQL Server" is a registred trademark of Microsoft Corporation.
  • "IBM", "WebSphere", "WebSphere Aplication Server", "WAS" are registred trademarks of International Business Machines Corporation.
  • "Java" and "JVM" are a registred trademarks of Oracle and/or its affiliates.
  • Other names may be trademarks of their respective owners.

Copyright © 2011 - Patrick Placidoux, Hélène Malamoud