|
|
|
Jdbc
Action : was.jdbc (Category : was, Name : jdbc, By : kikonf)
Complete Name : was.jdbc.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 jdbc plugin : Creates one JDBC provider The following shows the main Source Code File for the Action : was.jdbc 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 Jdbc(wasAction): DRIVERS=\ { 'db2': { 'notxa': ('DB2 Universal JDBC Driver Provider Only(templates/system|jdbc-resource-provider-only-templates.xml#JDBCProvider_DB2_UNI_1)', 'com.ibm.db2.jcc.DB2ConnectionPoolDataSource'), 'xa': ('DB2 Universal JDBC Driver Provider Only (XA)(templates/system|jdbc-resource-provider-only-templates.xml#JDBCProvider_DB2_UNI_2)', 'com.ibm.db2.jcc.DB2XADataSource'), 'vname': 'DB2_JDBC_DRIVER_PATH', 'pset' : ('databaseName', 'serverName', 'portNumber', 'driverType', 'currentSchema') }, 'oracle_5': { 'notxa': ('Oracle JDBC Driver Provider Only(templates/system|jdbc-resource-provider-only-templates.xml#JDBCProvider_Oracle_5)', 'oracle.jdbc.pool.OracleConnectionPoolDataSource'), 'vname': 'ORACLE_JDBC_DRIVER_PATH', 'pset' : ('URL',) }, 'oracle_6': { 'xa': ('Oracle JDBC Driver (XA)(templates/system|jdbc-resource-provider-templates.xml#JDBCProvider_Oracle_6)', 'oracle.jdbc.xa.client.OracleXADataSource'), 'vname': 'ORACLE_JDBC_DRIVER_PATH', 'pset' : ('URL',) }, 'msql': { 'notxa': ('WebSphere embedded ConnectJDBC driver for MS SQL Server Provider Only(templates/system|jdbc-resource-provider-only-templates.xml#JDBCProvider_DataDirect_1a)', 'com.ibm.websphere.jdbcx.sqlserver.SQLServerDataSource'), 'xa': ('WebSphere embedded ConnectJDBC driver for MS SQL Server Provider Only (XA)(templates/system|jdbc-resource-provider-only-templates.xml#JDBCProvider_DataDirect_2a)', 'com.ibm.websphere.jdbcx.sqlserver.SQLServerDataSource'), 'vname': 'MSSQLSERVER_JDBC_DRIVER_PATH', 'pset' : [] }, } def extract(self, scope_attrs, name=None, prefix=None, doRaise=True, **keywords): self_funct='extract' 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('JDBCProvider listing.', level=self.getVerbose(), ifLevel=4, indent=indent, logFile=self.getLogFile()) pvs=getStartByNameAsDict(split( AdminConfig.list('JDBCProvider', scope_id) )) for jname in pvs.keys(): if not (prefix!=None and name!=None and jname==prefix + '_' + name \ or prefix==None and name!=None and name==jname \ or prefix!=None and name==None and jname.startswith(prefix) \ or prefix==None and name==None):continue verbose('JDBCProvider:' + jname + ' retreived.', level=self.getVerbose(), ifLevel=3, indent=indent, logFile=self.getLogFile()) providers=getShowAsDict(AdminConfig.show(pvs[jname])) try: ptype=getProviderType(pvs[jname], self) except: verbose('Unmanaged provider:' + jname + ' found, skipping !', level=self.getVerbose(), ifLevel=3, indent=indent, logFile=self.getLogFile()) continue xa=providers['xa'] if providers.has_key('description') and providers['description']!=None:desc=providers['description'][1:-1] else:desc=None if desc==DESIGN_NOTICE:desc=None #-- path path='?' vname=Jdbc.DRIVERS[ptype]['vname'] if prefix!=None:vname=prefix + '_' + vname verbose('VariableSubstitutionEntry listing.', level=self.getVerbose(), ifLevel=4, indent=indent, logFile=self.getLogFile()) vars = split(AdminConfig.list('VariableSubstitutionEntry', scope_id)) for var in vars: var_name = AdminConfig.showAttribute(var, 'symbolicName') if vname==var_name:path=AdminConfig.showAttribute(var, "value") if path=='?':verbose('Unable to retreive WebSphere variable named: ' + vname + ' at scope: ' + str(scope_attrs) + ' ! keep going on.', level=self.getVerbose(), ifLevel=3, indent=indent, logFile=self.getLogFile()) jdbc_node=self.newTop() # Tag: jdbc _name=jname if prefix!=None:_name=jname.split(prefix + '_')[1] attrs={'name':_name, 'desc':desc, 'path':path, 'prefix':prefix} jdbc_node.setAttrs(**attrs) mkNodeScope(jdbc_node, scope_attrs, isUnique=True) #-- creates a scope node. cp=providers['classpath'] # Tags: oracle, db2, msql l=cp.split(';') from os import path jars=';'.join([path.basename(p) for p in l]) if ptype.startswith('oracle'):version=ptype[-1]=='true' else:version='' if ptype.startswith('oracle'): jdbc_node.newNode('oracle', version=ptype[-1], jars=jars) else: jdbc_node.newNode(ptype, xa=xa, jars=jars) def remove(self, no_name, no_name_no_prefix): self_funct='remove' jdbc_node = self.getTop() jdbc_attrs = jdbc_node.getAttrs() scope_id, scope_attrs, scope=self.getScope(parent_node=jdbc_node, indent=self.getIndent()) #-- Retreives scope self.verbose(scope_attrs, name=jdbc_attrs.name, prefix=jdbc_attrs.prefix) indent=self.getIndent() + 3*' ' # no_name/no_name_no_prefix prefix=jdbc_attrs.prefix name=jdbc_attrs.name if no_name or no_name_no_prefix:name=None if no_name_no_prefix:prefix=None self.rmvProvider(name=name, prefix=prefix, indent=indent) def inject(self): self_funct='inject' jdbc_node = self.getTop() jdbc_attrs = jdbc_node.getAttrs() scope_id, scope_attrs, scope=self.getScope(parent_node=jdbc_node, indent=self.getIndent()) #-- Retreives scope self.verbose(scope_attrs, name=jdbc_attrs.name, prefix=jdbc_attrs.prefix) indent=self.getIndent() + 3*' ' self.rmvProvider(name=jdbc_attrs.name, prefix=jdbc_attrs.prefix, indent=indent) #-- Removing first #-- name if jdbc_attrs.prefix==None:jname=jdbc_attrs.name else:jname=jdbc_attrs.prefix + '_' + jdbc_attrs.name #-- Check unique node: keys=Jdbc.DRIVERS.keys() driver_nodes=list() l=jdbc_node.getNodes() for driver_node in l: if driver_node.getTag() in keys or driver_node.getTag()=='oracle':driver_nodes.append(driver_node) if len(driver_nodes)==0:raise xception.kikonfActionSystemException(self, self_funct, 'At least one node of: "oracle", "db2" or "msql" tag is required !') elif len(driver_nodes)>1:raise xception.kikonfActionSystemException(self, self_funct, 'Only one node of: "oracle", "db2" or "msql" tag is allowed !') #-- Several variables driver_node=driver_nodes[0] driver_attrs=driver_node.getAttrs() tag=driver_node.getTag() cmdvalues=[] if tag=='oracle': # Tag: oracle #-- Oracle 5 driver if driver_attrs.version==5: # Attribute: oracle/version vname=Jdbc.DRIVERS[tag + '_5']['vname'] ptmpl=Jdbc.DRIVERS[tag + '_5']['notxa'][0] else: # Other Tags: db2, msql #-- Oracle 6 driver vname=Jdbc.DRIVERS[tag + '_6']['vname'] ptmpl=Jdbc.DRIVERS[tag + '_6']['xa'][0] else: #-- Other drivers vname=Jdbc.DRIVERS[tag]['vname'] if driver_attrs.xa=='true': ptmpl=Jdbc.DRIVERS[tag]['xa'][0] # Attribute: /xa else: ptmpl=Jdbc.DRIVERS[tag]['notxa'][0] cmdvalues.append(['name', jname]) if jdbc_attrs.desc!=None:cmdvalues.append(['description', jdbc_attrs.desc]) else:cmdvalues.append(['description', DESIGN_NOTICE]) spl=driver_attrs.jars.split(';') if driver_attrs.jars.find(',')>=0:raise xception.kikonfActionSystemException(self, self_funct, 'Tag:' + tag + ', Incorrrect Attribute: jars. ";" are not allowed. Only "," are allowed. Your value:' + driver_attrs.jars + ' !') bp='${' + vname + '}/' cp = bp + (';' + bp).join(driver_attrs.jars.split(';')) # Attribute: /jars cmdvalues.append(['classpath', cp]) cmdvalues.append(['nativepath', '']) # Creates verbose('JDBCProvider creating using template.', level=self.getVerbose(), ifLevel=4, indent=indent, logFile=self.getLogFile()) AdminConfig.createUsingTemplate("JDBCProvider", scope_id, cmdvalues, ptmpl) verbose('JDBCProvider:' + jname + ' created.', level=self.getVerbose(), ifLevel=3, indent=indent, logFile=self.getLogFile()) #-- Adjusts var Driver path self.inVar(vname, jdbc_attrs.path, jdbc_attrs.prefix, indent=self.getIndent() + 3*' ') def rmvProvider(self, name=None, prefix=None, indent=None): scope_id, scope_attrs, scope=self.getScope() verbose('JDBCProvider listing.', level=self.getVerbose(), ifLevel=4, indent=indent, logFile=self.getLogFile()) jds=getStartByNameAsDict(split(AdminConfig.list('JDBCProvider', scope_id))) for jdname in jds.keys(): if prefix!=None and jdname.startswith(prefix) \ or prefix==None and name!=None and jdname==name \ or prefix==None and name==None: #-- retreiving ptype try: ptype=getProviderType(jds[jdname], self) ptfound=True except: verbose('Unmanaged provider:' + jdname + ' no var entry to remove !', level=self.getVerbose(), ifLevel=3, indent=indent, logFile=self.getLogFile()) ptfound=False verbose('JDBCProvider:' + jdname + ' removing.', level=self.getVerbose(), ifLevel=4, indent=indent, logFile=self.getLogFile()) AdminConfig.remove(jds[jdname]) verbose('JDBCProvider:' + jdname + ' removed.', level=self.getVerbose(), ifLevel=3, indent=indent, logFile=self.getLogFile()) if ptfound: vname=Jdbc.DRIVERS[ptype]['vname'] self.rmvVar(vname, prefix=prefix, indent=self.getIndent() + 3*' ') def inVar(self, name, value, prefix=None, indent=None): # Attribute: path if prefix==None:name=name else:name=prefix + '_' + name cmdvalues=[] cmdvalues.append(['symbolicName', name]) cmdvalues.append(['value', value]) verbose('VariableMap retreiving.', level=self.getVerbose(), ifLevel=4, indent=indent, logFile=self.getLogFile()) varmap = AdminConfig.getid(self.getScopeCP() + '/VariableMap:/') verbose('VariableMap modifying.', level=self.getVerbose(), ifLevel=4, indent=indent, logFile=self.getLogFile()) AdminConfig.modify(varmap, 'entries', [cmdvalues]) verbose('VariableMap:' + name + ' created.', level=self.getVerbose(), ifLevel=3, indent=indent, logFile=self.getLogFile()) def rmvVar(self, name, prefix=None, indent=None): scope_id, scope_attrs, scope=self.getScope() verbose('VariableSubstitutionEntry listing.', level=self.getVerbose(), ifLevel=4, indent=indent, logFile=self.getLogFile()) vars = split(AdminConfig.list('VariableSubstitutionEntry', scope_id)) for var in vars: vname = AdminConfig.showAttribute(var, 'symbolicName') if prefix!=None and vname.startswith(prefix) \ or prefix==None and name!=None and vname==name: verbose('VariableSubstitutionEntry:' + vname + ' removing.', level=self.getVerbose(), ifLevel=4, indent=indent, logFile=self.getLogFile()) AdminConfig.remove(var) verbose('VariableSubstitutionEntry:' + vname + ' 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('JDBCProvider:' + name + ', under prefix:' + prefix + ', at scope:' + scope + '.', level=self.getVerbose(), ifLevel=2, indent=self.getIndent()) elif name!=None:verbose('JDBCProvider:' + name + ', at scope:' + scope + '.', level=self.getVerbose(), ifLevel=2, indent=self.getIndent()) elif prefix!=None:verbose('JDBCProviders under prefix:' + prefix + ', at scope:' + scope + '.', level=self.getVerbose(), ifLevel=2, indent=self.getIndent()) else:verbose('JDBCProviders at scope:' + scope + '.', level=self.getVerbose(), ifLevel=2, indent=self.getIndent()) def getProviderType(pv, action): self_funct='getProviderType' found=False ic=AdminConfig.showAttribute(pv, 'implementationClassName') for db in Jdbc.DRIVERS.keys(): if Jdbc.DRIVERS[db].has_key('notxa') and ic==Jdbc.DRIVERS[db]['notxa'][1]: found=True break if Jdbc.DRIVERS[db].has_key('xa') and ic==Jdbc.DRIVERS[db]['xa'][1]: found=True break if found:return db else:raise xception.kikonfActionSystemException(action, 'Main', self_funct, 'Provider type not found for porvider:' + pv + '!')
Trademarks :
|