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