cle_clock
Home > wikikonf >  wls/actions/by kikonf > jvm







Jvm

print

Action : wls.jvm   (Category : wls, Name : jvm, By : kikonf)
Complete Name : wls.jvm.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 jvm plugin : Tunes a JVM

The following shows the main Source Code File for the Action : wls.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.wls.tools import *
from weblogic.management import NoAccessRuntimeException



class Jvm(wlsAction):
    DFT_TEMP_ARGS=( 
        '-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('Jvm listing.', level=self.getVerbose(), ifLevel=4, indent=indent, logFile=self.getLogFile())            
        
        attrs={}                                                                # Top Tag attrs
        cmo=cmo=cd('/Servers/' + scope_attrs['server'] + '/ServerStart/' + scope_attrs['server'])
        # - gets user
        attrs['user']=cmo.getUsername()
        # - gets Password
        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())

        attrs['password']=password
        # - gets root_dir
        attrs['root_dir']=cmo.getRootDirectory()
        # - gets java_home
        attrs['java_home']=cmo.getJavaHome()
        # - gets dft context
        cmo=cd('/Servers/' + scope_attrs['server'] + '/WebServer/' + scope_attrs['server'])
        attrs['dft_context']=cmo.getDefaultWebAppContextRoot()
        # - gets startup_mode
        cmo=cd('/Servers/' + scope_attrs['server'])
        attrs['startup_mode']=cmo.getStartupMode()
        # - gets enable_ssl
        cmo=cd('/Servers/' + scope_attrs['server'] + '/SSL/' + scope_attrs['server'])
        # if cmo.isEnabled():attrs['enable_ssl']='true'
        if cmo.isTwoWaySSLEnabled():attrs['enable_ssl']='true'
        # - gets ssl_client_cert
        if cmo.isClientCertificateEnforced():attrs['ssl_client_cert']='true'
        # - gets enable_keep_alive
        cmo=cd('/Servers/' + scope_attrs['server'] + '/WebServer/' + scope_attrs['server'])
        if cmo.isKeepAliveEnabled():attrs['enable_keep_alive']='true'
        # - gets enable_plugin
        cmo=cd('/Servers/' + scope_attrs['server'])
        if cmo.isWeblogicPluginEnabled():attrs['enable_plugin']='true'
        # - gets admin_port
        cmo=cd('/Servers/' + scope_attrs['server'])
        attrs['admin_port']=cmo.getAdministrationPort()
        
        jvm_node.setAttrs(**attrs)                                              #-- Sets Attributes for top node.

        
        attrs={}                                                                # Tag: redirects
        cmo=cd('/Servers/' + scope_attrs['server'] + '/WebServer/' + scope_attrs['server'])
        attrs['frontend_host']=cmo.getFrontendHost()
        attrs['frontend_htttp_port']=cmo.getFrontendHTTPPort()
        attrs['frontend_htttps_port']=cmo.getFrontendHTTPSPort()
        attrs['client_ip_header']=cmo.getClientIpHeader()        
        attrs.values().sort()
        
        if (attrs['frontend_host'], attrs['client_ip_header'], attrs['frontend_htttp_port'], attrs['frontend_htttps_port'])!=(None, None, 0, 0):
            classpath_node=jvm_node.newNode('redirects', **attrs)

        cmo=cd('/Servers/' + scope_attrs['server'] + '/ServerStart/' + scope_attrs['server']) # Tag: classpath
        cps=cmo.getClassPath()
        if cps!=None:
            cps=cps.split()
            if len(cps)!=0:
                cps_node=jvm_node.newNode('classpath')
                for cp in cps:cps_node.addText(cp)

        cmo=cd('/Servers/' + scope_attrs['server'])                             # Tag: prepend_classpath
        cps=cmo.getJavaCompilerPreClassPath()
        if cps!=None:
            cps=cps.split()
            if len(cps)!=0:
                cps_node=jvm_node.newNode('prepend_classpath')
                for cp in cps:cps_node.addText(cp)
        
        cmo=cd('/Servers/' + scope_attrs['server'])                             # Tag: append_classpath
        cps=cmo.getJavaCompilerPostClassPath()
        if cps!=None:
            cps=cps.split()
            if len(cps)!=0:
                cps_node=jvm_node.newNode('append_classpath')
                for cp in cps:cps_node.addText(cp)

        other_jvmargs=[]
        for method in ('extXm', 'extShClasses', 'extHprof', 'extVerbose', 'extGc', 'extLibs'):
            other_jvmargs=getattr(self, method)(other_jvmargs, jvm_node, indent=indent)
            
        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*' '

        # - sets jvm name                                                       # Top Tag attrs
        verbose('Server:' + scope_attrs['server'] + ' retreiving', level=self.getVerbose(), ifLevel=4, indent=indent, logFile=self.getLogFile())
        cmo=cd('/Servers/' + scope_attrs['server'])        
        verbose('Server:' + scope_attrs['server'] + ' retreived.', level=self.getVerbose(), ifLevel=3, indent=indent, logFile=self.getLogFile())
        
        cmo.setVirtualMachineName(scope_attrs['server'])
        cmo=cd('/Servers/' + scope_attrs['server'] + '/ServerStart/' + scope_attrs['server'])
        # - sets user/password
        if jvm_attrs.user!=None:cmo.setUsername(jvm_attrs.user)
        verbose('user', jvm_attrs.user, level=self.getVerbose(), ifLevel=4, indent=indent, logFile=self.getLogFile())
        if jvm_attrs.password!=None:cmo.setPasswordEncrypted(encrypt(jvm_attrs.password))
        
        # - sets root_dir
        if jvm_attrs.root_dir!=None:
            cmo.setRootDirectory(jvm_attrs.root_dir)
            verbose('root_dir', jvm_attrs.root_dir, level=self.getVerbose(), ifLevel=4, indent=indent, logFile=self.getLogFile())
        else:cmo.unSet('RootDirectory')
        
        # - sets java_home
        if jvm_attrs.java_home!=None:
            cmo.setJavaHome(jvm_attrs.java_home)
            verbose('java_home', jvm_attrs.java_home, level=self.getVerbose(), ifLevel=4, indent=indent, logFile=self.getLogFile())
        else:cmo.unSet('JavaHome')
        
        # - sets dft_context
        cmo=cd('/Servers/' + scope_attrs['server'] + '/WebServer/' + scope_attrs['server'])
        if jvm_attrs.dft_context!=None:            
            cmo.setDefaultWebAppContextRoot(jvm_attrs.dft_context)
            verbose('dft_context', jvm_attrs.dft_context, level=self.getVerbose(), ifLevel=4, indent=indent, logFile=self.getLogFile())
        else:cmo.unSet('DefaultWebAppContextRoot')
        
        # - sets startup_mode
        cmo=cd('/Servers/' + scope_attrs['server'])
        cmo.setStartupMode(jvm_attrs.startup_mode)
        verbose('startup_mode', jvm_attrs.startup_mode, level=self.getVerbose(), ifLevel=4, indent=indent, logFile=self.getLogFile())
        
        # - sets enable_ssl
        cmo=cd('/Servers/' + scope_attrs['server'] + '/SSL/' + scope_attrs['server'])
        if jvm_attrs.enable_ssl=='true':
            cmo.setTwoWaySSLEnabled(True)
            verbose('enable_ssl', jvm_attrs.enable_ssl, level=self.getVerbose(), ifLevel=4, indent=indent, logFile=self.getLogFile())
        else:cmo.setTwoWaySSLEnabled(False)
        if jvm_attrs.ssl_client_cert=='true':
            cmo.setClientCertificateEnforced(True)
            verbose('ssl_client_cert', jvm_attrs.ssl_client_cert, level=self.getVerbose(), ifLevel=4, indent=indent, logFile=self.getLogFile())
        else:cmo.unSet('ClientCertificateEnforced')
        
        # - sets enable_keep_alive
        cmo=cd('/Servers/' + scope_attrs['server'] + '/WebServer/' + scope_attrs['server'])
        if jvm_attrs.enable_keep_alive=='true':
            cmo.setKeepAliveEnabled(True)
            verbose('enable_keep_alive', jvm_attrs.enable_keep_alive, level=self.getVerbose(), ifLevel=4, indent=indent, logFile=self.getLogFile())
        else:cmo.unSet('KeepAliveEnabled')
            
        # - sets enable_plugin
        cmo=cd('/Servers/' + scope_attrs['server'])
        if jvm_attrs.enable_plugin=='true':            
            cmo.setWeblogicPluginEnabled(True)
            verbose('enable_plugin', jvm_attrs.enable_plugin, level=self.getVerbose(), ifLevel=4, indent=indent, logFile=self.getLogFile())
        else:cmo.unSet('WeblogicPluginEnabled')
            
        # - sets admin_port
        cmo=cd('/Servers/' + scope_attrs['server'])
        if jvm_attrs.admin_port!=None:
            cmo.setAdministrationPort(jvm_attrs.admin_port)
            verbose('admin_port', jvm_attrs.admin_port, level=self.getVerbose(), ifLevel=4, indent=indent, logFile=self.getLogFile())
        else:cmo.unSet('AdministrationPort')

        cmo=cd('/Servers/' + scope_attrs['server'] + '/WebServer/' + scope_attrs['server'])
        if jvm_node.hasNode('redirects'):                                       # Tag: redirects            
            redirects_attrs=jvm_node.getNode('redirects')[0].getAttrs()
            verbose('redirects:', level=self.getVerbose(), ifLevel=4, indent=indent, logFile=self.getLogFile())

            if redirects_attrs.frontend_host!=None:
                cmo.setFrontendHost(redirects_attrs.frontend_host)
                verbose('frontend_host', redirects_attrs.frontend_host, level=self.getVerbose(), ifLevel=4, indent=indent + 3*' ', logFile=self.getLogFile())
            else:cmo.unSet('FrontendHost')
            if redirects_attrs.frontend_htttp_port!=None:
                cmo.setFrontendHTTPPort(redirects_attrs.frontend_htttp_port)
                verbose('frontend_htttp_port', redirects_attrs.frontend_htttp_port, level=self.getVerbose(), ifLevel=4, indent=indent + 3*' ', logFile=self.getLogFile())
            else:cmo.unSet('FrontendHTTPPort')
            if redirects_attrs.frontend_htttps_port!=None:
                cmo.setFrontendHTTPSPort(redirects_attrs.frontend_htttps_port)
                verbose('frontend_htttps_port', redirects_attrs.frontend_htttps_port, level=self.getVerbose(), ifLevel=4, indent=indent + 3*' ', logFile=self.getLogFile())
            else:cmo.unSet('FrontendHTTPSPort')
            if redirects_attrs.client_ip_header!=None:
                cmo.setClientIpHeader(redirects_attrs.client_ip_header)
                verbose('client_ip_header', redirects_attrs.client_ip_header, level=self.getVerbose(), ifLevel=4, indent=indent + 3*' ', logFile=self.getLogFile())
            else:cmo.unSet('ClientIpHeader')
        else:
            cmo.unSet('FrontendHost')
            cmo.unSet('FrontendHTTPPort')
            cmo.unSet('FrontendHTTPSPort')
            cmo.unSet('ClientIpHeader')

        cmo=cd('/Servers/' + scope_attrs['server'] + '/ServerStart/' + scope_attrs['server'])
        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='\n'.join(cps)
            cmo.setClassPath(classpath)
        else:cmo.unSet('ClassPath')            
        cmo=cd('/Servers/' + scope_attrs['server'])
        if jvm_node.hasNode('prepend_classpath'):                               # Tag: prepend_classpath
            cps=jvm_node.getNode('prepend_classpath')[0].getText()
            if len(cps)==0:prepend_classpath=''
            elif len(cps)==1:prepend_classpath=cps[0]
            else:prepend_classpath='\n'.join(cps)
            cmo.setJavaCompilerPreClassPath(prepend_classpath)
        else:cmo.unSet('JavaCompilerPreClassPath')
            
        cmo=cd('/Servers/' + scope_attrs['server'])
        if jvm_node.hasNode('append_classpath'):                                # Tag: append_classpath
            cps=jvm_node.getNode('append_classpath')[0].getText()
            if len(cps)==0:append_classpath=''
            elif len(cps)==1:append_classpath=cps[0]
            else:append_classpath='\n'.join(cps)
            cmo.setJavaCompilerPostClassPath(append_classpath)      
        else:cmo.unSet('JavaCompilerPostClassPath')

        cmo=cd('/Servers/' + scope_attrs['server'] + '/ServerStart/' + scope_attrs['server'])
        s=self.injJvmArgs(jvm_node, indent=indent)
        if len(s)>=0:cmo.setArguments(s)                                        #-- Treats Jvm Args
        else:cmo.unSet('Arguments')
        
        verbose('Server:' + scope_attrs['server'] + ' modified.', level=self.getVerbose(), ifLevel=3, indent=indent, logFile=self.getLogFile())


                                    # -------------------------------  Sub methods -------------------------------#
    
    
    def injJvmArgs(self, jvm_node, indent=None):
        cmdvalues=[]
        jvm_attrs=jvm_node.getAttrs()
        
        # xms/xmx
        if jvm_attrs.xms!=None:xms=cmdvalues.append('-xms' + str(jvm_attrs.xms) + 'm')
        if jvm_attrs.xmx!=None:xmx=cmdvalues.append('-xmx' + str(jvm_attrs.xmx) + 'm')
        
        if jvm_attrs.temp_dir!=None:
            for e in Jvm.DFT_TEMP_ARGS:cmdvalues.append(e + '=' + jvm_attrs.temp_dir)        
        
        # shared_classes
        if jvm_attrs.shared_classes!='off':cmdvalues.append('-Xshare:' + jvm_attrs.shared_classes)        
        
        # run_hprof
        if jvm_attrs.run_hprof=='true':cmdvalues.append('-Xprof')

        if jvm_node.hasNode('verbose'):                                         # Tag: verbose
            verbose_attrs=jvm_node.getNode('verbose')[0].getAttrs()
            
            if verbose_attrs.clas=='true':cmdvalues.append('-verbose:class')
            if verbose_attrs.gc=='true':cmdvalues.append('-verbose:jni')
            if verbose_attrs.jni=='true':cmdvalues.append('-verbose:gc')

        if jvm_node.hasNode('gc'):                                              # Tag: gc
            gc_attrs=jvm_node.getNode('gc')[0].getAttrs()
            
            if gc_attrs.disable=='true':cmdvalues.append('-Xnoclassgc')
            if gc_attrs.enable_inc=='true':cmdvalues.append('-Xincgc')
            if gc_attrs.log_file!=None:cmdvalues.append('-Xloggc:' + gc_attrs.log_file)

        if jvm_node.hasNode('extlibs'):                                         # Tag: extlibs
            extlibs=jvm_node.getNode('extlibs')[0].getText()
            for extlib in extlibs:cmdvalues.append('-extDir ' + extlib)

        if jvm_node.hasNode('generic_jvm_args'):                                # Tag: 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)

        return ' '.join(cmdvalues)    

    def extXm(self, other_jvmargs, jvm_node, indent=None):                      # xms/xmx
        xms=xmx=None
        wrks=other_jvmargs
        other_jvmargs=[]
        mems={}
        i=0

        while i<len(wrks):
            entry=wrks[i].strip()

            if entry.startswith('-xms')  or entry.startswith('-xmx'):
                i=self.__extGcGetMem(wrks, i, mems)
            else:
                other_jvmargs.append(entry)                
            i+=1
            
        wrks=None

        if len(mems)!=0:jvm_node.setAttrs(**mems)
            
        return other_jvmargs
     
    def __extGcGetMem(self, wrks, i, mems):
        entry=wrks[i]
    
        if entry.startswith('-xms'):key='xms'
        elif entry.startswith('-xmx'):key='xmx'
        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]=value
            
        return i
    
    def extShClasses(self, other_jvmargs, jvm_node, indent=None):               # shared_classes
        xms=xmx=None
        shs={'-Xshare:auto': 'auto', '-Xshare:on': 'on', '-Xshare:off': 'off'}
        wrk=' '.join(other_jvmargs)
        
        sh='off'
        for key in shs.keys():
            if wrk.find(key)>=0:
                wrk.replace(key, '')
                sh=shs[key]

        if sh!='off':jvm_node.setAttr('shared_classes', sh)

        other_jvmargs=wrk.split()

        return other_jvmargs
            
    def extHprof(self, other_jvmargs, jvm_node, indent=None):                   # run_hprof
        xms=xmx=None
        wrk=' '.join(other_jvmargs)
        found=False
        
        if wrk.find('-Xprof')>=0:
            wrk.replace('-Xprof', '')
            found=True

        if found:jvm_node.setAttr('run_hprof', 'true')

        other_jvmargs=wrk.split()

        return other_jvmargs    
    
    def extVerbose(self, other_jvmargs, jvm_node, indent=None):                 # Tag: verbose
        xms=xmx=None
        vbs={'-verbose:class': 'clas', '-verbose:jni': 'jni', '-verbose:gc': 'gc'}
        wrk=' '.join(other_jvmargs)
        
        first_time=True
        for key in vbs.keys():
            if wrk.find(key)>=0:
                wrk.replace(key, '')

                if first_time:
                    first_time=False
                    verbose_node=jvm_node.newNode('verbose')
                verbose_node.setAttr(vbs[key], 'true')

        other_jvmargs=wrk.split()

        return other_jvmargs        

    def extGc(self, other_jvmargs, jvm_node, indent=None):                      # Tag: gc
        wrk=' '.join(other_jvmargs)
        attrs={}
        found=False
        
        if wrk.find('-Xnoclassgc')>=0:
                wrk.replace('-Xnoclassgc', '')
                found=True
                attrs['disable']='true'
        if wrk.find('-Xincgc')>=0:
                wrk.replace('-Xincgc', '')
                found=True
                attrs['enable_inc']='true'
        if wrk.find('-Xloggc:')>=0:
                wrk.replace('-Xloggc:', '')
                found=True
                spl=wrk.split()
                attrs['log_file']=spl[0]
                wrk=' '.join(spl[1:])

        if found:gc_node=jvm_node.newNode('gc', **attrs)
        other_jvmargs=wrk.split()

        return other_jvmargs    
    
    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('-extDir'):
                dosh=True
                if entry=='-extDir':
                    i+=1
                    extlibs.append(wrks[i].strip())                    
                else:extlibs.append(entry.split('-extDir')[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 verbose(self, scope_attrs):
        scope=str(scope_attrs).replace("'", '')[1:-1]
        
        verbose('JavaVirtualMachine at scope:' + scope + '.', level=self.getVerbose(), ifLevel=2, indent=self.getIndent())
							
(Source: <KIKONF_INSTALLATION_DIR>/plugins/actions/wls/jvm/by/kikonf/jvm.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 :
  • "oracle", "Weblogic", "Weblogic Server", "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