|
|
|
Jvm
Action : was.jvm (Category : was, Name : jvm, By : kikonf)
Complete Name : was.jvm.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 jvm plugin : Tune one JVM characteristics The following shows the main Source Code File for the Action : was.jvm 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 Jvm(wasAction): DFT_TEMP_ARGS=( '-Dworkspace.user.root', '-Dwas.repository.temp', '-Dcom.ibm.websphere.servlet.temp.dir', '-DumpDir', '-Dtemp.dir', '-Djava.io.temp', '-Djava.io.tmpdir', '-Djava.util.prefs.userRoot', '-Djava.util.prefs.systemRoot' ) def extract(self, indent=None, scope_attrs=None, **keywords): self_funct='extract' self.verbose(scope_attrs) scope_id, scope_attrs, scope=self.getScope(scope_attrs=scope_attrs, indent=self.getIndent()) indent=self.getIndent() + 3*' ' jvm_node=self.newTop() #-- because in extract mode, each call returns a new blank top node. mkNodeScope(jvm_node, scope_attrs, isUnique=True) #-- creates a scope node. verbose('JavaVirtualMachine listing.', level=self.getVerbose(), ifLevel=4, indent=indent, logFile=self.getLogFile()) jvm=AdminConfig.list('JavaVirtualMachine', scope_id) jvms=getShowAsDict(AdminConfig.show(jvm)) verbose('JavaVirtualMachine listed.', level=self.getVerbose(), ifLevel=3, indent=indent, logFile=self.getLogFile()) attrs={} # Tag: jvm attrs['xms']=int(jvms['initialHeapSize']) attrs['xmx']=int(jvms['maximumHeapSize']) attrs['run_hprof']=jvms['runHProf'] if jvms.has_key('hprofArguments'):run_hprofs=jvms['hprofArguments'][1:-1].split() else:run_hprofs=[] attrs['disable_jit']=jvms['disableJIT'] jvmargs=jvms['genericJvmArguments'][1:-1] jvmargs=jvmargs.split() #-- Retreives temp_dir Attribute temp_dir=None other_jvmargs=[] for entry in jvmargs: if entry=='' or entry.isspace():continue spl=entry.split('=') key=spl[0].strip() value=None if len(spl)>1:value=spl[1].strip() if key in Jvm.DFT_TEMP_ARGS: if temp_dir==None:temp_dir=value elif temp_dir!=value:temp_dir=False else: other_jvmargs.append(entry) if temp_dir in (None, False):attrs['temp_dir']=None else:attrs['temp_dir']=temp_dir attrs['ha']=self.extHA(indent=indent) attrs['plugin_max_con']=self.extPluginMaxCon(indent=indent) attrs['user'], attrs['group']=self.extUserGroup(indent=indent) jvm_node.setAttrs(**attrs) #-- Sets Attributes for top node. cl=gc=jni='false' # Tag: verbose if jvms['verboseModeClass']=='true':cl='true' if jvms['verboseModeGarbageCollection']=='true':gc='true' if jvms['verboseModeJNI']=='true':jni='true' jvm_node.newNode('verbose', cl=cl, gc=gc, jni=jni) #-- creates the node verbose. classpath=jvms['classpath'] # Tag: classpath classpath=classpath.split() if len(classpath)!=0 and classpath[0]!='[]': classpath_node=jvm_node.newNode('classpath') for cp in classpath:classpath_node.addText(cp) boot_classpath=jvms['bootClasspath'] # Tag: boot_classpath boot_classpath=boot_classpath.split() if len(boot_classpath)!=0 and boot_classpath[0]!='[]': boot_classpath_node=jvm_node.newNode('boot_classpath') for cp in boot_classpath:boot_classpath_node.addText(cp) enable_debug=jvms['debugMode'] # Tag: debug_args debug_args=jvms['debugArgs'] if len(debug_args)>=2:debug_args=debug_args[1:-1] debug_args=debug_args.split() if len(debug_args)!=0: debug_args_node=jvm_node.newNode('debug_args', enable=enable_debug) for cp in debug_args:debug_args_node.addText(cp) elif enable_debug=='true':jvm_node.newNode('debug_args', enable=enable_debug) if len(run_hprofs)!=0: # Tag: run_hprof hprof_args_node=jvm_node.newNode('hprof_args') for run_hprof in run_hprofs:hprof_args_node.addText(run_hprof) sps=split(jvms['systemProperties']) # Tag: system_props if len(sps)!=0: system_props_node=jvm_node.newNode('system_props') for sp in sps: attrs={} attrs['name']=AdminConfig.showAttribute(sp, 'name') attrs['value']=AdminConfig.showAttribute(sp, 'value') system_props_node.newNode('property', **attrs) self.extTimouts(jvm_node, indent=indent) # Tag: system_props other_jvmargs=self.extLibs(other_jvmargs, jvm_node, indent=indent) # Tag: extlibs other_jvmargs=self.extGc(other_jvmargs, jvm_node, indent=indent) # Tag: gc other_jvmargs=self.extSharedClasses(other_jvmargs, jvm_node, indent=indent) # Tag: shared_classes if len(other_jvmargs)!=0: # Tag: generic_jvm_args generic_jvm_args_node=jvm_node.newNode('generic_jvm_args') for jvmarg in other_jvmargs: generic_jvm_args_node.addText(jvmarg) def inject(self): self_funct='inject' jvm_node = self.getTop() #-- Grabs top node jvm_attrs = jvm_node.getAttrs() scope_id, scope_attrs, scope=self.getScope(parent_node=jvm_node, indent=self.getIndent()) #-- Retreives scope self.verbose(scope_attrs) indent=self.getIndent() + 3*' ' cmdvalues=[] cmdvalues.append(['initialHeapSize', jvm_attrs.xms]) # Tag jvm/Attribute: xms cmdvalues.append(['maximumHeapSize', jvm_attrs.xmx]) # Tag jvm/Attribute: xmx cmdvalues.append(['runHProf', jvm_attrs.run_hprof]) # Tag jvm/Attribute: run_hprof cmdvalues.append(['disableJIT', jvm_attrs.disable_jit]) # Tag jvm/Attribute: disable_jit if jvm_node.hasNode('verbose'): # Tag jvm/Attribute: verbose verbose_attrs=jvm_node.getNode('verbose')[0].getAttrs() cmdvalues.append(['verboseModeClass', verbose_attrs.cl]) cmdvalues.append(['verboseModeGarbageCollection', verbose_attrs.gc]) cmdvalues.append(['verboseModeJNI', verbose_attrs.jni]) if jvm_node.hasNode('classpath'): # Tag: classpath cps=jvm_node.getNode('classpath')[0].getText() if len(cps)==0:classpath='' elif len(cps)==1:classpath=cps[0] else:classpath=';'.join(cps) cmdvalues.append(['classpath', classpath]) if jvm_node.hasNode('boot_classpath'): # Tag: boot_classpath bcps=jvm_node.getNode('boot_classpath')[0].getText() if len(bcps)==0: boot_classpath='' elif len(bcps)==1: boot_classpath=bcps[0] else: boot_classpath=';'.join(bcps) cmdvalues.append(['bootClasspath', boot_classpath]) if jvm_node.hasNode('debug_args'): # Tag: debug_args debug_args_node=jvm_node.getNode('debug_args')[0] cmdvalues.append(['debugMode', debug_args_node.getAttr('enable')]) debug_args=debug_args_node.getText() if len(debug_args)==0:debug_args='' elif len(debug_args)==1:debug_args=debug_args[0] else:debug_args=' '.join(debug_args) cmdvalues.append(['debugArgs', debug_args]) hprof_args='' # Tag: hprof_args if jvm_node.hasNode('hprof_args'): hprof_args=jvm_node.getNode('hprof_args')[0].getText() if len(hprof_args)==0:hprof_args='' elif len(hprof_args)==1:hprof_args=hprof_args[0] else:hprof_args=' '.join(hprof_args) cmdvalues.append(['hprofArguments', hprof_args]) if jvm_node.hasNode('system_props'): # Tag: system_props system_props_node=jvm_node.getNode('system_props')[0] if system_props_node.hasNode('property'): cmd_properties=[] properties=system_props_node.getNode('property') for property in properties: cmd_property=[] cmd_properties.append(cmd_property) property_attrs=property.getAttrs() cmd_property.append(['name', property_attrs.name]) cmd_property.append(['value', property_attrs.value]) cmdvalues.append(['systemProperties', cmd_properties ]) cmdvalues.append(self.injJvmArgs(jvm_node, indent=indent)) #-- Treats and Appends Jvm Args # Creates verbose('JavaVirtualMachine listing.', level=self.getVerbose(), ifLevel=4, indent=indent, logFile=self.getLogFile()) oid=AdminConfig.list('JavaVirtualMachine', scope_id) #-- Retrieves jvm_id verbose('JavaVirtualMachine listed.', level=self.getVerbose(), ifLevel=3, indent=indent, logFile=self.getLogFile()) verbose('JavaVirtualMachine removing.', level=self.getVerbose(), ifLevel=4, indent=indent, logFile=self.getLogFile()) AdminConfig.remove(oid) #-- Deletes jvm_id verbose('JavaVirtualMachine removed.', level=self.getVerbose(), ifLevel=3, indent=indent, logFile=self.getLogFile()) verbose('JavaProcessDef listing.', level=self.getVerbose(), ifLevel=4, indent=indent, logFile=self.getLogFile()) pdef=AdminConfig.list('JavaProcessDef', scope_id) #-- Recreates jvm verbose('JavaVirtualMachine creating.', level=self.getVerbose(), ifLevel=4, indent=indent, logFile=self.getLogFile()) AdminConfig.create('JavaVirtualMachine', pdef, cmdvalues) verbose('JavaVirtualMachine created.', level=self.getVerbose(), ifLevel=3, indent=indent, logFile=self.getLogFile()) #-- Trivial Server configurations self.injHA(jvm_attrs, indent=indent) self.injPluginMaxCon(jvm_attrs, indent=indent) self.injUserGroup(jvm_attrs, indent=indent) self.injTimouts(jvm_node, indent=indent) # ------------------------------- Sub methods -------------------------------# def injJvmArgs(self, jvm_node, indent=None): self_funct='injJvmArgs' cmdvalues=[] jvm_attrs=jvm_node.getAttrs() generic_jvm_args='' # Tag: generic_jvm_args if jvm_node.hasNode('generic_jvm_args'): generic_jvm_args=jvm_node.getNode('generic_jvm_args')[0].getText() if len(generic_jvm_args)>=1: cmdvalues.extend(generic_jvm_args) # Tag: generic_jvm_args if jvm_node.hasNode('extlibs'): # Tag: extlib extlibs=jvm_node.getNode('extlibs')[0].getText() for extlib in extlibs: cmdvalues.append('-DextDir ' + extlib) if jvm_node.hasNode('gc'): # Tag: gc gc_node=jvm_node.getNode('gc')[0] if gc_node.hasNode('explicitgc'): # Attribute: gc/explicitgc explicitgc_node=gc_node.getNode('explicitgc')[0] explicitgc_attrs=explicitgc_node.getAttrs() if explicitgc_attrs.disable=='true': cmdvalues.append('-Xdisableexplicitgc') if gc_node.hasNode('policy'): # Attribute: gc/policy pol_node=gc_node.getNode('policy')[0] pol_attrs=pol_node.getAttrs() ptype=pol_attrs.type if ptype!='gencon': cmdvalues.append('-Xgcpolicy:' + ptype) else: if not pol_node.hasNode('gencon'):raise xception.kikonfActionSystemException(self, self_funct, 'The node gencon is required for the Tag: gc/policy !') gencon_node=pol_node.getNode('gencon')[0] gencon_attrs=gencon_node.getAttrs() xmns=xmnx=xmos=xmox='' if hasattr(gencon_attrs, 'xmns') and gencon_attrs.xmns!=None:xmns=' -Xmns' + str(gencon_attrs.xmns) + 'm' if hasattr(gencon_attrs, 'xmnx') and gencon_attrs.xmnx!=None:xmnx=' -Xmnx' + str(gencon_attrs.xmnx) + 'm' if hasattr(gencon_attrs, 'xmos') and gencon_attrs.xmos!=None:xmos=' -Xmos' + str(gencon_attrs.xmos) + 'm' if hasattr(gencon_attrs, 'xmox') and gencon_attrs.xmox!=None:xmox=' -Xmox' + str(gencon_attrs.xmox) + 'm' cmdvalues.append('-Xgcpolicy:' + ptype + ' ' + xmns + xmnx + xmos + xmox) if gc_node.hasNode('threads'): # Tag: gc/threads threads_node=gc_node.getNode('threads')[0] threads_attrs=threads_node.getAttrs() cmdvalues.append('-Xgcthreads:' + str(threads_attrs.number)) if jvm_node.hasNode('shared_classes'): # Tag: shared_classes shared_classes_node=jvm_node.getNode('shared_classes')[0] shared_classes_attrs=shared_classes_node.getAttrs() if shared_classes_attrs.enable=='true': fatal='' if shared_classes_attrs.required=='false':fatal=',nonFatal' cmdvalues.append('-Xshareclasses:name=' + shared_classes_attrs.name + fatal + ',controlDir=' + shared_classes_attrs.control_dir + ' -Xscmx' + str(shared_classes_attrs.size) + 'm') if hasattr(jvm_attrs, 'temp_dir') and jvm_attrs.temp_dir!=None: # Attribute: temp dir cmdvalues.extend([arg + '=' + jvm_attrs.temp_dir for arg in Jvm.DFT_TEMP_ARGS]) return ['genericJvmArguments', ' '.join(cmdvalues)] def injHA(self, jvm_attrs, indent=None): scope_id, scope_attrs, scope=self.getScope() cmdvalues=[] cmdvalues.append(['enable', jvm_attrs.ha]) # Attribute: ha cmdvalues.append(['activateEnabled', jvm_attrs.ha]) verbose('HAManagerService listing.', level=self.getVerbose(), ifLevel=4, indent=indent, logFile=self.getLogFile()) ha=AdminConfig.list('HAManagerService', scope_id) verbose('HAManagerService modfying.', level=self.getVerbose(), ifLevel=4, indent=indent, logFile=self.getLogFile()) AdminConfig.modify(ha, cmdvalues) verbose('HAManagerService modified.', level=self.getVerbose(), ifLevel=3, indent=indent, logFile=self.getLogFile()) def injPluginMaxCon(self, jvm_attrs, indent=None): if not hasattr(jvm_attrs, 'plugin_max_con') or jvm_attrs.plugin_max_con==None:return scope_id, scope_attrs, scope=self.getScope() verbose('WebserverPluginSettings listing.', level=self.getVerbose(), ifLevel=4, indent=indent, logFile=self.getLogFile()) wps=AdminConfig.list('WebserverPluginSettings', scope_id) # Attribute: plugin_max_con verbose('WebserverPluginSettings modifying.', level=self.getVerbose(), ifLevel=4, indent=indent, logFile=self.getLogFile()) AdminConfig.modify(wps,'MaxConnections',jvm_attrs.plugin_max_con) verbose('WebserverPluginSettings modified.', level=self.getVerbose(), ifLevel=3, indent=indent, logFile=self.getLogFile()) def injUserGroup(self, jvm_attrs, indent=None): # Attribute: user/group if hasattr(jvm_attrs, 'user'):user=jvm_attrs.user if hasattr(jvm_attrs, 'group'):group=jvm_attrs.group if user==group==None:return scope_id, scope_attrs, scope=self.getScope() cmdvalues=[] if user!=None:cmdvalues.append(['runAsUser', user]) if group!=None:cmdvalues.append(['runAsGroup', group]) cmdvalues.append(['runInProcessGroup', '0']) cmdvalues.append(['processPriority', '20' ]) cmdvalues.append(['umask', '002' ]) verbose('ProcessDef listing.', level=self.getVerbose(), ifLevel=4, indent=indent, logFile=self.getLogFile()) pdef = AdminConfig.list('ProcessDef', scope_id) verbose('ProcessDef modifying.', level=self.getVerbose(), ifLevel=4, indent=indent, logFile=self.getLogFile()) AdminConfig.modify(pdef, 'execution', cmdvalues) verbose('ProcessDef modified.', level=self.getVerbose(), ifLevel=3, indent=indent, logFile=self.getLogFile()) def injTimouts(self, jvm_node, indent=None): # Tag: timout if not jvm_node.hasNode('timouts'):return scope_id, scope_attrs, scope=self.getScope() #-- Transaction Service timouts_attrs=jvm_node.getNode('timouts')[0].getAttrs() verbose('TransactionService listing.', level=self.getVerbose(), ifLevel=4, indent=indent, logFile=self.getLogFile()) ts=AdminConfig.list('TransactionService', scope_id) verbose('TransactionService modifying.', level=self.getVerbose(), ifLevel=4, indent=indent, logFile=self.getLogFile()) AdminConfig.modify(ts, 'totalTranLifetimeTimeout', timouts_attrs.tran_timout) verbose('TransactionService modified.', level=self.getVerbose(), ifLevel=3, indent=indent, logFile=self.getLogFile()) #-- Orb req cmdvalues=[] cmdvalues.append(['requestTimeout', timouts_attrs.orb_req_timout]) cmdvalues.append(['locateRequestTimeout', timouts_attrs.orb_locale_req_timout]) verbose('ObjectRequestBroker listing.', level=self.getVerbose(), ifLevel=4, indent=indent, logFile=self.getLogFile()) oid=AdminConfig.list('ObjectRequestBroker', scope_id) verbose('ObjectRequestBroker modifying.', level=self.getVerbose(), ifLevel=4, indent=indent, logFile=self.getLogFile()) AdminConfig.modify(oid, cmdvalues) verbose('ObjectRequestBroker modified.', level=self.getVerbose(), ifLevel=3, indent=indent, logFile=self.getLogFile()) def extHA(self, indent=None): scope_id, scope_attrs, scope=self.getScope() verbose('HAManagerService listing.', level=self.getVerbose(), ifLevel=4, indent=indent, logFile=self.getLogFile()) ha=AdminConfig.list('HAManagerService', scope_id) verbose('HAManagerService listed.', level=self.getVerbose(), ifLevel=3, indent=indent, logFile=self.getLogFile()) if AdminConfig.showAttribute(ha, 'enable')=='true' or AdminConfig.showAttribute(ha, 'activateEnabled')=='true':return 'true' else:return 'false' def extPluginMaxCon(self, indent=None): scope_id, scope_attrs, scope=self.getScope() verbose('WebserverPluginSettings listing.', level=self.getVerbose(), ifLevel=4, indent=indent, logFile=self.getLogFile()) wps=AdminConfig.list('WebserverPluginSettings', scope_id) verbose('WebserverPluginSettings listed.', level=self.getVerbose(), ifLevel=3, indent=indent, logFile=self.getLogFile()) return AdminConfig.showAttribute(wps, 'MaxConnections') def extUserGroup(self, indent=None): scope_id, scope_attrs, scope=self.getScope() verbose('ProcessDef listing.', level=self.getVerbose(), ifLevel=4, indent=indent, logFile=self.getLogFile()) pdef = AdminConfig.list('ProcessDef', scope_id) verbose('ProcessDef listed.', level=self.getVerbose(), ifLevel=3, indent=indent, logFile=self.getLogFile()) oid=AdminConfig.showAttribute(pdef, 'execution') user=AdminConfig.showAttribute(oid, 'runAsUser') group=AdminConfig.showAttribute(oid, 'runAsGroup') return user, group def extTimouts(self, jvm_node, indent=None): # Tag: timouts scope_id, scope_attrs, scope=self.getScope() attrs={} verbose('TransactionService listing.', level=self.getVerbose(), ifLevel=4, indent=indent, logFile=self.getLogFile()) oid=AdminConfig.list('TransactionService', scope_id) verbose('TransactionService listed.', level=self.getVerbose(), ifLevel=3, indent=indent, logFile=self.getLogFile()) attrs['tran_timout']=AdminConfig.showAttribute(oid, 'totalTranLifetimeTimeout') verbose('ObjectRequestBroker listing.', level=self.getVerbose(), ifLevel=4, indent=indent, logFile=self.getLogFile()) oid=AdminConfig.list('ObjectRequestBroker', scope_id) verbose('ObjectRequestBroker listed.', level=self.getVerbose(), ifLevel=3, indent=indent, logFile=self.getLogFile()) attrs['orb_req_timout']=AdminConfig.showAttribute(oid, 'requestTimeout') attrs['orb_locale_req_timout']=AdminConfig.showAttribute(oid, 'locateRequestTimeout') jvm_node.newNode('timouts', **attrs) def extLibs(self, other_jvmargs, jvm_node, indent=None): # Tag: extlibs wrks=other_jvmargs other_jvmargs=[] extlibs=[] dosh=False i=0 while i<len(wrks): entry=wrks[i].strip() if entry.startswith('-DextDir'): dosh=True if entry=='-DextDir': i+=1 extlibs.append(wrks[i].strip()) else:extlibs.append(entry.split('-DextDir')[1]) else:other_jvmargs.append(entry) i+=1 wrks=None if dosh: extlibs_node=jvm_node.newNode('extlibs') for extlib in extlibs:extlibs_node.addText(extlib) return other_jvmargs def extGc(self, other_jvmargs, jvm_node, indent=None): # Tag: gc dogc=dogc_pol=dogc_thread=False dexplicitgc='false' xmns=xmnx=xmos=xmox=None wrks=other_jvmargs other_jvmargs=[] mems={} other_jvmargs=[] i=0 while i<len(wrks): entry=wrks[i].strip() # ex: -Xgcpolicy:gencon -xmns128m -xmnx256m -xmos128m -xmox768m Xgcthreads:45 if entry=='-Xdisableexplicitgc': dogc=True dexplicitgc='true' elif entry.startswith('-Xmns') or entry.startswith('-Xmnx') or entry.startswith('-Xmos') or entry.startswith('-Xmox'): i=self.__extGcGetMem(wrks, i, mems) elif entry.startswith('-Xgcpolicy:'): dogc=True dogc_pol=True ptype=entry.split(':')[1] elif entry.startswith('-Xgcthreads:'): dogc=True dogc_thread=True nthread=entry.split(':')[1] else: other_jvmargs.append(entry) i+=1 wrks=None if dogc: gc_node=jvm_node.newNode('gc') gc_node.newNode('explicitgc', disable=dexplicitgc) if dogc_pol: policy_node=gc_node.newNode('policy',type=ptype) if len(mems)!=0:policy_node.newNode('gencon', **mems) if dogc_thread:gc_node.newNode('threads', number=nthread) return other_jvmargs def __extGcGetMem(self, wrks, i, mems): entry=wrks[i] if entry.startswith('-Xmns'):key='Xmns' elif entry.startswith('-Xmnx'):key='Xmnx' elif entry.startswith('-Xmos'):key='Xmos' elif entry.startswith('-Xmox'):key='Xmox' if entry=='-' + key: i+=1 value=int(wrks[i].strip()) else: value=str(entry.split('-' + key)[1]) if value!=None: if value[-1]=='m':value=value[:-1] try: value=int(value) except:raise xception.kikonfActionSystemException(self, self_funct, 'Unable to retreive a correct int value from Jvm Argument:' + key) mems[key.lower()]=value return i def extSharedClasses(self, other_jvmargs, jvm_node, indent=None): # Tag: shared_classes wrks=other_jvmargs other_jvmargs=[] name=None required='true' control_dir=None size=None dosc=False i=0 while i<len(wrks): entry=wrks[i].strip() if entry.startswith('-Xshareclasses'): dosc=True #-- name if not entry.find(':name='):dosc=False name=entry.split(':name=')[1] name=name.split(',')[0] #-- required if entry.find(',nonFatal'):required='false' #-- control_dir if not entry.find(',controlDir='):dosc=False control_dir=entry.split(',controlDir=')[1] control_dir=control_dir.split(',')[0] elif entry.startswith('-Xscmx'): if entry=='-Xscmx': i+=1 size=wrks[i].strip() else: size=entry.split('-Xscmx')[1] if size!=None and size[-1]=='m':size=size[:-1] else:size='' else:other_jvmargs.append(entry) i+=1 wrks=None if dosc:jvm_node.newNode('shared_classes', name=name, enable='true', required=required, control_dir=control_dir, size=size) return other_jvmargs def verbose(self, scope_attrs): scope=str(scope_attrs).replace("'", '')[1:-1] verbose('JavaVirtualMachine at scope:' + scope + '.', level=self.getVerbose(), ifLevel=2, indent=self.getIndent())
Trademarks :
|