|
|
|
Datasrc
Action : wls.datasrc (Category : wls, Name : datasrc, By : kikonf)
Complete Name : wls.datasrc.by.kikonf Version : 4.0 License : Modified BSD License Purpose of the wls category : Easy to customize. This category use in background the wlst command in jython mode, to drive WebLogic Server ® configuration. You can use it to manage the whole WebLogic ® architecture. Purpose of this datasrc plugin : Creates a DataSource The following shows the main Source Code File for the Action : wls.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.wls.tools import * from weblogic.management import NoAccessRuntimeException class Datasrc(wlsAction): DATASRC=\ { 'db2': { 'notxa': 'COM.ibm.db2.jdbc.app.DB2Driver', 'xa': 'COM.ibm.db2.jdbc.DB2XADataSource)', 'url': 'jdbc:db2:DATABASE', 'testreq': 'SQL SELECT COUNT(*) FROM SYSIBM.SYSTABLES\r\n', 'properties': ('driverType', 'currentSchema') }, 'oracle': { 'notxa': 'oracle.jdbc.OracleDriver', 'xa': 'oracle.jdbc.xa.client.OracleXADataSource', 'url': 'jdbc:oracle:thin:@HOST:PORT:DATABASE', 'testreq': 'SQL SELECT 1 FROM DUAL\r\n', 'properties': tuple() }, 'sqlserver': { 'notxa': 'com.microsoft.sqlserver.jdbc.SQLServerDriver', 'xa': 'com.microsoft.sqlserver.jdbc.SQLServerXADataSource', 'url': 'jdbc:sqlserver://HOST:PORT', 'testreq': 'SQL SELECT 1\r\n', 'properties': tuple() } } CONN_POOL_PROPS={'max_capacity': 'MaxCapacity', 'capacity_increment': 'CapacityIncrement' , 'initial_capacity': 'InitialCapacity'} def extract(self, scope_attrs, name=None, prefix=None, doRaise=True, **keywords): self_funct='extract' self.verbose(scope_attrs, name=name, prefix=prefix) scope_cp, 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()) cmo=cd('/JDBCSystemResources') dsrces=cmo.getJDBCSystemResources() for ds in dsrces: dname=ds.getName() 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 if not checkTarget(ds, scope):continue verbose('DataSource:' + dname + ' retreived.', level=self.getVerbose(), ifLevel=3, indent=indent, logFile=self.getLogFile()) # - finds dbtype, database, host and port # -- samples UrlsS # jdbc:db2:DATABASE # jdbc:oracle:thin:@HOST:PORT:DATABASE # jdbc:sqlserver://HOST:PORT cmo=cd('/JDBCSystemResources/' + dname + '/JDBCResource/' + dname + '/JDBCDriverParams/' + dname) spl=cmo.getUrl().split(':') dbtype=spl[1] if not dbtype in Datasrc.DATASRC.keys(): verbose('DataSource:' + dname + ', not managed Database Type: ' + dbtype + '. Skipped !', level=self.getVerbose(), ifLevel=3, indent=indent, logFile=self.getLogFile()) continue if dbtype=='db2': database=spl[-1] cmo=cd('/JDBCSystemResources/' + dname + '/JDBCResource/' + dname + '/JDBCDriverParams/' + dname + '/Properties/' + dname + '/Properties/host') host=cmo.getValue() cmo=cd('/JDBCSystemResources/' + dname + '/JDBCResource/' + dname + '/JDBCDriverParams/' + dname + '/Properties/' + dname + '/Properties/portNumber') port=cmo.getValue() elif dbtype=='oracle': database=spl[-1] port=spl[-2] host=spl[-3].split('@')[-1] else: port=spl[-1] host=spl[-2].split('//')[-1] verbose('DataSource:' + dname + ' with type:' + dbtype + ' retreiving.', level=self.getVerbose(), ifLevel=3, indent=indent, logFile=self.getLogFile()) # - get description cmo=cd('/JDBCSystemResources/' + dname) desc=cmo.getNotes() if desc==DESIGN_NOTICE:desc=None # - get jndiName cmo=cd('/JDBCSystemResources/' + dname + '/JDBCResource/' + dname + '/JDBCDataSourceParams/' + dname) jndi_name=cmo.getJNDINames()[0] # - get transaction cmo=cd('/JDBCSystemResources/' + dname + '/JDBCResource/' + dname + '/JDBCDataSourceParams/' + dname) if cmo.getGlobalTransactionsProtocol()=='TwoPhaseCommit':xa='true' else:xa='false' # - get statementCacheSize cmo=cd('/JDBCSystemResources/' + dname + '/JDBCResource/' + dname + '/JDBCConnectionPoolParams/' + dname) statement_cache_size=cmo.getStatementCacheSize() # - get Database cmo=cd('/JDBCSystemResources/' + dname + '/JDBCResource/' + dname + '/JDBCDriverParams/' + dname + '/Properties/' + dname + '/Properties/databaseName') if cmo==None:verbose('Property: datatabase not found Skipped !', level=self.getVerbose(), ifLevel=3, indent=indent, logFile=self.getLogFile()) else:datatabase=cmo.getSysPropValue() # - gets user cmo=cd('/JDBCSystemResources/' + dname + '/JDBCResource/' + dname + '/JDBCDriverParams/' + dname + '/Properties/' + dname + '/Properties/user') user=cmo.getValue() # - gets Password cmo=cd('/JDBCSystemResources/' + dname + '/JDBCResource/' + dname + '/JDBCDriverParams/' + dname) try: password=cmo.getPassword() except NoAccessRuntimeException: password='???' verbose('Passwords retreiving is not allowed because "clearTextCredentialAccessEnabled" attribute is not set in SecurityConfigurationMBean. Password retreiving is skipped !', level=self.getVerbose(), ifLevel=3, indent=indent, logFile=self.getLogFile()) 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, dbtype=dbtype, xa=xa, statement_cache_size=statement_cache_size, database=database, host=host, port=port, user=user, password=password, prefix=prefix) mkNodeScope(datasrc_node, scope_attrs, isUnique=True) #-- creates a scope node. # - gets Connection Pool connection_pool_node=datasrc_node.newNode('connection_pool') # Tag: connection_pool verbose('Connection Pool retreiving.', level=self.getVerbose(), ifLevel=4, indent=indent, logFile=self.getLogFile()) cmo=cd('/JDBCSystemResources/' + dname + '/JDBCResource/' + dname + '/JDBCConnectionPoolParams/' + dname) for tag in Datasrc.CONN_POOL_PROPS.keys(): cpname=Datasrc.CONN_POOL_PROPS[tag] verbose('Connection Property:' + cpname + ' retreiving.', level=self.getVerbose(), ifLevel=4, indent=indent + 3*' ', logFile=self.getLogFile()) value=getattr(cmo, 'get' + cpname)() connection_pool_node.newNode(tag, value=value) verbose('Connection Property:' + cpname + ' retreived.', level=self.getVerbose(), ifLevel=4, indent=indent + 3*' ', logFile=self.getLogFile()) verbose('Connection Pool retreived.', level=self.getVerbose(), ifLevel=3, indent=indent, logFile=self.getLogFile()) # - gets properties properties_node=datasrc_node.newNode('properties') self.extProps(properties_node, dname, dbtype, indent=indent) def remove(self, no_name, no_name_no_prefix): datasrc_node=self.getTop() datasrc_attrs = datasrc_node.getAttrs() scope_cp, 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) def inject(self): self_funct='inject' datasrc_node = self.getTop() datasrc_attrs = datasrc_node.getAttrs() scope_cp, scope_attrs, scope=self.getScope(parent_node=datasrc_node, indent=self.getIndent()) #-- Retreives scope 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_attrs.xa=='true':isxa='xa' else:isxa='notxa' driver=Datasrc.DATASRC[datasrc_attrs.dbtype][isxa] url=Datasrc.DATASRC[datasrc_attrs.dbtype]['url'] testreq=Datasrc.DATASRC[datasrc_attrs.dbtype]['testreq'] # - creates DataSource verbose('DataSource:' + datasrc_attrs.name + ' creating.', level=self.getVerbose(), ifLevel=4, indent=indent, logFile=self.getLogFile()) cmo=cd('/') dsmb=cmo.createJDBCSystemResource(name) # - sets target cmo=cd('/') tg=getMBean(scope_cp) cmo=cd('/JDBCSystemResources/' + name) # dsmb.addTarget(getMBean(scope_cp)) <=> cmo.setTargets([tg]) # - ds name cmo=cd('/JDBCSystemResources/' + name + '/JDBCResource/' + name) cmo.setName(name) # - sets description cmo=cd('/JDBCSystemResources/' + name) if datasrc_attrs.desc!=None:desc=datasrc_attrs.desc else:desc=DESIGN_NOTICE cmo.setNotes(desc) # - sets jndiName cmo=cd('/JDBCSystemResources/' + name + '/JDBCResource/' + name + '/JDBCDataSourceParams/' + name) cmo.setJNDINames([datasrc_attrs.jndi_name]) # - sets Driver cmo=cd('/JDBCSystemResources/' + name + '/JDBCResource/' + name + '/JDBCDriverParams/' + name) cmo.setDriverName(driver) # - sets Database cmo=cd('/JDBCSystemResources/' + name + '/JDBCResource/' + name + '/JDBCDriverParams/' + name + '/Properties/' + name) cmo.createProperty('databaseName') cmo=cd('/JDBCSystemResources/' + name + '/JDBCResource/' + name + '/JDBCDriverParams/' + name + '/Properties/' + name + '/Properties/databaseName') cmo.setValue(datasrc_attrs.database) # - adaptes url if datasrc_attrs.dbtype=='db2': url.replace('DATABASE', datasrc_attrs.database) # -- As for db2 host and port are not in url, creates properties cmo=cd('/JDBCSystemResources/' + name + '/JDBCResource/' + name + '/JDBCDriverParams/' + name + '/Properties/' + name) cmo.createProperty('host') cmo.createProperty('portNumber') cmo=cd('/JDBCSystemResources/' + name + '/JDBCResource/' + name + '/JDBCDriverParams/' + name + '/Properties/' + name + '/Properties/host') cmo.setValue(datasrc_attrs.host) cmo=cd('/JDBCSystemResources/' + name + '/JDBCResource/' + name + '/JDBCDriverParams/' + name + '/Properties/' + name + '/Properties/portNumber') cmo.setValue(datasrc_attrs.port) elif datasrc_attrs.dbtype=='oracle': url.replace('DATABASE', datasrc_attrs.database) url.replace('HOST', datasrc_attrs.host) url.replace('PORT', datasrc_attrs.port) else: url.replace('HOST', datasrc_attrs.host) url.replace('PORT', datasrc_attrs.port) # - sets url cmo=cd('/JDBCSystemResources/' + name + '/JDBCResource/' + name + '/JDBCDriverParams/' + name) cmo.setUrl(url) # - sets user cmo=cd('/JDBCSystemResources/' + name + '/JDBCResource/' + name + '/JDBCDriverParams/' + name + '/Properties/' + name) cmo.createProperty('user') cmo=cd('/JDBCSystemResources/' + name + '/JDBCResource/' + name + '/JDBCDriverParams/' + name + '/Properties/' + name + '/Properties/user') cmo.setValue(datasrc_attrs.user) # - sets Password cmo=cd('/JDBCSystemResources/' + name + '/JDBCResource/' + name + '/JDBCDriverParams/' + name) cmo.setPasswordEncrypted(encrypt(datasrc_attrs.password)) # - sets transaction cmo=cd('/JDBCSystemResources/' + name + '/JDBCResource/' + name + '/JDBCDataSourceParams/' + name) if isxa=='xa':cmo.setGlobalTransactionsProtocol('TwoPhaseCommit') else:cmo.setGlobalTransactionsProtocol('OnePhaseCommit') # - sets testreq cmo=cd('/JDBCSystemResources/' + name + '/JDBCResource/' + name + '/JDBCConnectionPoolParams/' + name) cmo.setTestTableName(testreq) # - sets Connection Pool cmo.setStatementCacheSize(datasrc_attrs.statement_cache_size) if datasrc_node.hasNode('connection_pool'): cnodes=datasrc_node.getNode('connection_pool')[0].getNodes() for cnode in cnodes: cnode_attrs=cnode.getAttrs() tag=cnode.getTag() if tag not in Datasrc.CONN_POOL_PROPS.keys():raise xception.kikonfActionSystemException(self, self_funct, 'Unknown Ponnection Pool tag:' + tag + ', known Connection pool tags are:' + str(Datasrc.CONN_POOL_PROPS.keys())[1:-1] + ' !' ) cpname=Datasrc.CONN_POOL_PROPS[tag] getattr(cmo, 'set' + cpname)(cnode_attrs.value) 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], name, indent=indent + 3*' ') def rmvDatasrc(self, name=None, prefix=None, indent=None): scope_cp, scope_attrs, scope=self.getScope() verbose('DataSource retreiving.', level=self.getVerbose(), ifLevel=4, indent=indent, logFile=self.getLogFile()) cmo=cd('/JDBCSystemResources') dsrces=cmo.getJDBCSystemResources() for ds in dsrces: dname=ds.getName() if prefix!=None and dname.startswith(prefix) \ or prefix==None and name!=None and name==dname \ or prefix==None and name==None: if not checkTarget(ds, scope):continue verbose('DataSource:' + dname + ' removing.', level=self.getVerbose(), ifLevel=4, indent=indent, logFile=self.getLogFile()) cmo=cd('/') cmo.destroyJDBCSystemResource(ds) verbose('DataSource:' + dname + ' removed.', level=self.getVerbose(), ifLevel=3, indent=indent, logFile=self.getLogFile()) def rmvProps(self, datasrc, upds, indent=None): if upds==None:return verbose('DataSource Properties retreiving.', level=self.getVerbose(), ifLevel=4, indent=indent, logFile=self.getLogFile()) cmo=cd('/JDBCSystemResources/' + datasrc + '/JDBCResource/' + datasrc + '/JDBCDriverParams/' + datasrc + '/Properties/' + datasrc) props=cmo.getProperties() for prop in props: pname=prop.getName() if pname in upds: verbose('DataSource Property:' + pname + ' removing.', level=self.getVerbose(), ifLevel=4, indent=indent, logFile=self.getLogFile()) cmo.removeProperty(prop) verbose('DataSource Property:' + pname + ' removed.', level=self.getVerbose(), ifLevel=3, indent=indent, logFile=self.getLogFile()) def inProps(self, node, 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(datasrc, upds=props.keys(), indent=indent) #-- destroy first for prop in props.keys(): verbose('DataSource Property' + prop + ' creating.', level=self.getVerbose(), ifLevel=4, indent=indent, logFile=self.getLogFile()) cmo=cd('/JDBCSystemResources/' + datasrc+ '/JDBCResource/' + datasrc + '/JDBCDriverParams/' + datasrc + '/Properties/' + datasrc) cmo.createProperty(prop) cmo=cd('/JDBCSystemResources/' + datasrc + '/JDBCResource/' + datasrc + '/JDBCDriverParams/' + datasrc + '/Properties/' + datasrc + '/Properties/' + prop) cmo.setSysPropValue(props[prop]) verbose('DataSource Property:' + prop + ' created.', level=self.getVerbose(), ifLevel=3, indent=indent, logFile=self.getLogFile()) def extProps(self, properties_node, datasrc, dbtype, indent=None): props=driver=Datasrc.DATASRC[dbtype]['properties'] verbose('DataSource Properties retreiving.', level=self.getVerbose(), ifLevel=4, indent=indent, logFile=self.getLogFile()) cmo=cd('/JDBCSystemResources/' + datasrc + '/JDBCResource/' + datasrc + '/JDBCDriverParams/' + datasrc + '/Properties/' + datasrc) for pname in props: verbose('DataSource Property:' + pname + ' retreiving.', level=self.getVerbose(), ifLevel=4, indent=indent, logFile=self.getLogFile()) p=cmo.lookupProperty(pname) if p==None:continue properties_node.newNode('property', name=pname, value=p.getSysPropValue()) verbose('DataSource Property:' + pname + ' retreived.', 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())
Trademarks :
|