|
|
|
Ra
Action : was.ra (Category : was, Name : ra, By : kikonf)
Complete Name : was.ra.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 ra plugin : Configure a Resource Adaptor The following shows the main Source Code File for the Action : was.ra 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 Ra(wasAction): TYPES={'cics':'ECIResourceAdapter', 'ims':'IMSResourceAdapter', 'sib':'SIBResourceAdapter'} CRITICAL_PROPERTIES={ 'cics':['ConnectionURL', 'ServerName', 'UserName', 'TranName', 'TPNName'], 'ims':['DataStoreName', 'HostName', 'PortNumber', 'UserName', 'Password'], 'sib':['UserName', 'Password', 'BusName'] } def extract(self, scope_attrs=None, name=None, prefix=None, **keywords): self_funct='extract' scope_id, scope_attrs, scope=self.getScope(scope_attrs=scope_attrs, indent=self.getIndent()) self.verbose(scope_attrs, name=name, prefix=prefix) indent=self.getIndent() + 3*' ' verbose('J2CResourceAdapter retreiving.', level=self.getVerbose(), ifLevel=4, indent=indent, logFile=self.getLogFile()) ras=getStartByNameAsDict(split( AdminConfig.getid(self.getScopeCP() + '/J2CResourceAdapter:/') )) for raname in ras.keys(): if prefix!=None and name!=None and raname==prefix + '_' + name \ or prefix==None and name!=None and raname==name \ or prefix!=None and name==None and raname.startswith(prefix) \ or prefix==None and name==None: verbose('J2CResourceAdapter:' + raname + ' retreived.', level=self.getVerbose(), ifLevel=3, indent=indent, logFile=self.getLogFile()) radaptors=getShowAsDict(AdminConfig.show(ras[raname])) ra_type=None desc = radaptors['description'][1:-1] if desc.startswith('type:'):desc=desc.split('type:')[1].split('/')[0] if desc in Ra.TYPES.keys():ra_type=desc else: print indent + 'Unmanaged Resource Adapter type for:' + raname + ', Managed types are:' + str(Ra.TYPES) + '. Properties will be skipped !' continue ra_node=self.newTop() # Tag: ra _name=raname if prefix!=None:_name=raname.split(prefix + '_')[1] attrs={'name':_name, 'ra_type':ra_type, 'ra_archive_path':radaptors['archivePath'], 'prefix':prefix} ra_node.setAttrs(**attrs) mkNodeScope(ra_node, scope_attrs, isUnique=True) # tag: scope self.extJcf(ra_node, raname, ra_type=ra_type, prefix=prefix, indent=self.getIndent() + 3*' ') def remove(self, no_name, no_name_no_prefix): self_funct='inJcf' ra_node = self.getTop() ra_attrs = ra_node.getAttrs() scope_id, scope_attrs, scope=self.getScope(parent_node=ra_node, indent=self.getIndent()) #-- Retreives scope self.verbose(scope_attrs, ra_attrs.name, prefix=ra_attrs.prefix) indent=self.getIndent() + 3*' ' # no_name/no_name_no_prefix prefix=ra_attrs.prefix name=ra_attrs.name if no_name or no_name_no_prefix:name=None if no_name_no_prefix:prefix=None self.rmvRa(name=name, prefix=prefix, indent=indent) def inject(self): self_funct='inJcf' ra_node = self.getTop() ra_attrs = ra_node.getAttrs() scope_id, scope_attrs, scope=self.getScope(parent_node=ra_node, indent=self.getIndent()) #-- Retreives scope self.verbose(scope_attrs, name=ra_attrs.name, prefix=ra_attrs.prefix) indent=self.getIndent() + 3*' ' if ra_attrs.prefix==None:name=ra_attrs.name else:name=ra_attrs.prefix + '_' + ra_attrs.name ra=AdminConfig.getid(self.getScopeCP() + '/J2CResourceAdapter:' + name + '/') # -- installing rar file on guiven Node. if ra_attrs.ra_force=='true' and (ra_attrs.ra_path==None or ra_attrs.ra_archive_path==None):raise xception.kikonfActionSystemException(self, self_funct, 'Attribute "ra_file" must be provided when "ra_force" is true !') if ra_attrs.ra_path!=None: if ra_attrs.ra_force=='true' or (ra_attrs.ra_force=='false' and ra==''): self.rmvRa(name=ra_attrs.name, prefix=ra_attrs.prefix, indent=indent) verbose('J2CResourceAdapter:' + name + ' installing.', level=self.getVerbose(), ifLevel=4, indent=indent, logFile=self.getLogFile()) cde="-nodeName " + scope_attrs['node'] + ' -rarPath ' + ra_attrs.ra_path + ' -rar.name ' + name + ' -rar.desc ' + '"type:' + ra_attrs.ra_type + '/kikonf mark:Please do not delete this text !" -rar.archivePath ' + ra_attrs.ra_archive_path ra=AdminTask.installResourceAdapter(cde) verbose('J2CResourceAdapter:' + name + ' installed.', level=self.getVerbose(), ifLevel=3, indent=indent, logFile=self.getLogFile()) # -- creating J2C Resource Adaptor using rar file. ra_archive_path=AdminConfig.showAttribute(ra, "archivePath") cmdvalues=[] cmdvalues.append(["name", name]) cmdvalues.append(["archivePath", ra_attrs.ra_archive_path]) verbose('J2CResourceAdapter creating.', level=self.getVerbose(), ifLevel=4, indent=indent, logFile=self.getLogFile()) AdminConfig.createUsingTemplate("J2CResourceAdapter", scope_id, cmdvalues, ra) verbose('J2CResourceAdapter:' + name + ' created.', level=self.getVerbose(), ifLevel=3, indent=indent, logFile=self.getLogFile()) if ra=='':raise xception.kikonfActionSystemException(self, self_funct, 'Unable to find resource Adaptor:' + name + ', ra_path and ra_archive_path should be given, in order to create the absent Resource adapor !') if ra_node.hasNode('jcfs') and ra_node.getNode('jcfs')[0].hasNode('jcf'): jcfs=ra_node.getNode('jcfs')[0].getNode('jcf') for jcf_node in jcfs: jcf_attrs=jcf_node.getAttrs() self.rmvJcf(name=jcf_attrs.name, prefix=ra_attrs.prefix, provider=name, indent=indent) for jcf_node in jcfs:self.inJcf(jcf_node, name, prefix=ra_attrs.prefix, indent=indent + 3*' ') def rmvRa(self, name, prefix=None, indent=None): verbose('J2CResourceAdapter retreiving.', level=self.getVerbose(), ifLevel=4, indent=indent, logFile=self.getLogFile()) ras=getStartByNameAsDict(split( AdminConfig.getid(self.getScopeCP() + '/J2CResourceAdapter:/') )) for raname in ras.keys(): if prefix!=None and raname.startswith(prefix) \ or prefix==None and name!=None and name==raname \ or prefix==None and name==None: self.rmvJcf(provider=raname, indent=indent) verbose('J2CResourceAdapter removing.', level=self.getVerbose(), ifLevel=4, indent=indent, logFile=self.getLogFile()) AdminConfig.remove(ras[raname]) verbose('J2CResourceAdapter:' + raname + ' removed.', level=self.getVerbose(), ifLevel=3, indent=indent, logFile=self.getLogFile()) def inJcf(self, jcf_node, provider, prefix=None, indent=None): self_funct='inJcf' jcf_attrs = jcf_node.getAttrs() if prefix==None:name=jcf_attrs.name else:name=prefix + '_' + jcf_attrs.name jcf_attrs=jcf_node.getAttrs() # -- retreive ra verbose('J2CResourceAdapter retreiving.', level=self.getVerbose(), ifLevel=4, indent=indent, logFile=self.getLogFile()) ra = AdminConfig.getid(self.getScopeCP() + '/J2CResourceAdapter:' + provider) if ra=='':raise xception.kikonfActionSystemException(self, self_funct, 'Resource adaptor named:' + str(ra_name) + ' is not configured !') # -- create jcf cmdvalues=[] cmdvalues.append(["name", name]) cmdvalues.append(["jndiName", jcf_attrs.jndi_name]) # -- connection pool if jcf_node.hasNode('connection_pool'): conpool_node=jcf_node.getNode('connection_pool')[0] cmdvalues.append(['connectionPool', getConnectionPoolCfgs(conpool_node, level=self.getVerbose(), indent=indent + 3*' ', logFile=self.getLogFile())]) # -- ConnectionDefinition fis=[] found=None cds=split(AdminConfig.list('ConnectionDefinition', ra)) if len(cds)==0:raise xception.kikonfActionSystemException(self, self_funct, 'No Factory Interface found for Resource Adaptor:' + provider + '.') for cd in cds: fi=AdminConfig.showAttribute(cd, 'connectionFactoryInterface') fis.append(fi) if jcf_attrs.factory_interface!=None and jcf_attrs.factory_interface==fi:found=cd if found==None and jcf_attrs.factory_interface==None and len(cds)==1:found=cds[0] if found==None: mes_your_fi='' if jcf_attrs.factory_interface!=None:mes_your_fi='Your Factory Interface:' + jcf_attrs.factory_interface raise xception.kikonfActionSystemException(self, self_funct, 'No matching Factory Interface found for Connection Factory:' + name + '. ' + mes_your_fi + '. Supported Factory Interfaces for Resource Adaptor:' + provider + ' are:' + str(fis) + ' !') cmdvalues.append(['connectionDefinition', found]) verbose('J2CConnectionFactory:' + name + ' creating.', level=self.getVerbose(), ifLevel=4, indent=indent, logFile=self.getLogFile()) jcf=AdminConfig.create("J2CConnectionFactory", ra, cmdvalues) verbose('J2CConnectionFactory:' + name + ' created.', level=self.getVerbose(), ifLevel=3, indent=indent, logFile=self.getLogFile()) if jcf_node.hasNode('properties'):self.inProps(jcf_node.getNode('properties')[0], provider, name, indent=indent) def rmvJcf(self, name=None, prefix=None, provider=None, indent=None): verbose('J2CResourceAdapter retreiving.', level=self.getVerbose(), ifLevel=4, indent=indent, logFile=self.getLogFile()) cfs=getStartByNameAsDict(split( AdminConfig.getid(self.getScopeCP() + '/J2CResourceAdapter:' + provider + '/J2CConnectionFactory:/') )) for cname in cfs.keys(): if prefix!=None and cname.startswith(prefix) \ or prefix==None and name!=None and name==cname \ or prefix==None and name==None: verbose('J2CConnectionFactory:' + cname + ' removing.', level=self.getVerbose(), ifLevel=4, indent=indent, logFile=self.getLogFile()) AdminConfig.remove(cfs[cname]) verbose('J2CConnectionFactory:' + cname + ' removed.', level=self.getVerbose(), ifLevel=3, indent=indent, logFile=self.getLogFile()) def extJcf(self, parent_node, provider, ra_type=None, prefix=None, indent=None): self_funct='extJcf' verbose('J2CResourceAdapter retreiving.', level=self.getVerbose(), ifLevel=4, indent=indent, logFile=self.getLogFile()) jcfs=split(AdminConfig.getid(self.getScopeCP() + '/J2CResourceAdapter:' + provider + '/J2CConnectionFactory:/')) if len(jcfs)>0:jcfs_node=parent_node.newNode('jcfs') for jcf in jcfs: typ=None confacts=getShowAsDict(AdminConfig.show(jcf)) name=confacts['name'] # -- factory_interface cd=confacts['connectionDefinition'] factory_interface=AdminConfig.showAttribute(cd, 'connectionFactoryInterface') # -- jcf _name=name if prefix!=None:_name=name.split(prefix + '_')[1] attrs={'name':_name, 'jndi_name':confacts['jndiName'], 'factory_interface':factory_interface} jcf_node=jcfs_node.newNode('jcf', **attrs) # -- connection pool connection_pool_node=jcf_node.newNode('connection_pool') indent=indent+3*' ' getConnectionPoolAttrs(confacts['connectionPool'], connection_pool_node, level=self.getVerbose(), indent=indent, logFile=self.getLogFile()) # -- properties self.extProps(jcf_node, ra_type, provider, name, indent=indent) # Note : This shows J2C Activation Specs # AdminConfig.list('J2CActivationSpec', self.getScope()) def inProps(self, node, provider, jcf_name, indent=None): self_funct='inProps' # xml props props={} l=node.getNodes() for prop_node in l: prop_attrs=prop_node.getAttrs() props[prop_attrs.name]=prop_attrs.value # was conf props verbose('J2CResourceAdapter retreiving.', level=self.getVerbose(), ifLevel=4, indent=indent, logFile=self.getLogFile()) ps=getStartByNameAsDict(split( AdminConfig.getid(self.getScopeCP() + '/J2CResourceAdapter:' + provider + '/J2CConnectionFactory:' + jcf_name + '/J2EEResourcePropertySet:/J2EEResourceProperty:/') )) for property in props.keys(): if property not in ps.keys():raise xception.kikonfActionSystemException(self, self_funct, 'Unmanaged property:' + property + ', do not exist into the property list of the connection factory:' + jcf_name + ' ! Applowed properties are:' + str(ps.keys()) + ' !') verbose('Properties modifying.', level=self.getVerbose(), ifLevel=4, indent=indent, logFile=self.getLogFile()) AdminConfig.modify(ps[property], 'value', props[property]) verbose('Property:' + property + ' modified.', level=self.getVerbose(), ifLevel=3, indent=indent, logFile=self.getLogFile()) def extProps(self, parent_node, ra_type, provider, jcf_name, indent=None): self_funct='extProps' if ra_type==None:return properties_node=parent_node.newNode('properties') # was conf props verbose('J2CResourceAdapter retreiving.', level=self.getVerbose(), ifLevel=4, indent=indent, logFile=self.getLogFile()) ps=split(AdminConfig.getid(self.getScopeCP() + '/J2CResourceAdapter:' + provider + '/J2CConnectionFactory:' + jcf_name + '/J2EEResourcePropertySet:/J2EEResourceProperty:/')) ps=getStartByNameAsDict(ps) for property in Ra.CRITICAL_PROPERTIES[ra_type]: if property not in ps.keys():raise xception.kikonfActionSystemException(self, self_funct, 'Unmanaged property:' + property + ', do not exist into the propertie list of the connection factory:' + jcf_name + ', for resource adaptor:' + provider + ' of type:' + ra_type + ' !') value=AdminConfig.showAttribute(ps[property], 'value') if value==None:continue properties_node.newNode('property', name=property, value=value) def verbose(self, scope_attrs, name=None, prefix=None): scope=str(scope_attrs).replace("'", '')[1:-1] if name!=None:verbose('J2CResourceAdapter:' + name + ', at scope:' + scope + '.', level=self.getVerbose(), ifLevel=2, indent=self.getIndent()) elif prefix!=None:verbose('J2CResourceAdapters under prefix:' + prefix + ', at scope:' + scope + '.', level=self.getVerbose(), ifLevel=2, indent=self.getIndent()) else:verbose('J2CResourceAdapters at scope:' + scope + '.', level=self.getVerbose(), ifLevel=2, indent=self.getIndent())
Trademarks :
|