cle_clock
Home > wikikonf >  tom/actions/by kikonf > context







Context

print

Action : tom.context   (Category : tom, Name : context, By : kikonf)
Complete Name : tom.context.by.kikonf
Version : 1.0        License : Modified BSD License

Purpose of the tom category :
Easy to customize. This category use in background the Kikonf Repoz tools to create and configure Apache Tomcat ® root installs and Catalina bases at any level (server.xml, hosts or defaults).
You can use it to manage the whole Tomcat ® Architecture.

Purpose of this context plugin : Configure a Tomcat Context

The following shows the main Source Code File for the Action : tom.context

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



REALMES={
    'udb' : 'org.apache.catalina.realm.UserDatabaseRealm',
    'mem' : 'org.apache.catalina.realm.MemoryRealm',
    'jaas' : 'className="org.apache.catalina.realm.JAASRealm',
    'jdbc' : 'org.apache.catalina.realm.JDBCRealm',
    'datarsc' : 'org.apache.catalina.realm.DataSourceRealm',
    'ldaps' : 'org.apache.catalina.realm.JNDIRealm'
    }



#-------------------#
# Utility functions #
#-------------------#

def checkUdbescIntegrity(udbrsc, level=0, indent=None, logFile=None):
    # Checks udbesc integrity
    print
    print '# Checks udbesc integrity' 
    
    #:mount $target_scope_alias # get Steady
    var datarsc_name=udbrsc
    
    # check for a resource
    print '#-- Does a Resource named:' + udbrsc + ' exists for the context ?'
    %select name at Resource where name=${udbrsc} and type=org.apache.catalina.UserDatabase
    if len(ro)==0:
        # check for a resourceLink
        print '#-- Does a ResourceLink named:' + udbrsc + ' exists for the context ?'
        %select name at ResourceLink where name=${udbrsc} and type=org.apache.catalina.UserDatabase
        
    if len(ro)==0:
        verbose('Tomcat configuration inconsistency no Resource or ResourceLink found for referenced UserDatabase Resource:' + datarsc + ' ! Keep going on.', level=level, ifLevel=3, indent=indent, logFile=logFile)
        return False
    return True

def checkDatarscIntegrity(datarsc, level=0, indent=None, logFile=None):
    # Checks datarsc integrity
    print
    print '# Checks datarsc integrity' 
    
    #:mount $target_scope_alias # get Steady
    var datarsc_name=datarsc
    
    # check for a resource
    print '#-- Does a Resource named:' + datarsc_name + ' exists for the context ?'
    %select name at Resource where name=${datarsc_name} and type=javax.sql.DataSource
    if len(ro)==0:
        # check for a resourceLink
        print '#-- Does a ResourceLink named:' + datarsc_name + ' exists for the context ?'
        %select name at ResourceLink where name=${datarsc_name} and type=javax.sql.DataSource
        
    if len(ro)==0:
        verbose('Tomcat configuration inconsistency no Resource or ResourceLink found for referenced JDBC DataSource Resource:' + datarsc + ' ! Keep going on.', level=level, ifLevel=3, indent=indent, logFile=logFile)
        return False
    return True

def injRealme(top_node, realme_node, realme, level=0, indent=None, logFile=None):
    """ Creates a Realme """
    realme_attrs=realme_node.getdAttrs()
    
    if realme=='udb':checkUdbescIntegrity(realme_attrs['resourceName'], level=level, indent=indent, logFile=logFile)
    elif realme=='datarsc':checkDatarscIntegrity(realme_attrs['dataSourceName'], level=level, indent=indent, logFile=logFile)
    
    verbose('Realme:' + realme + ' Creating.', level=level, ifLevel=4, indent=indent, logFile=logFile)
    attrs={}
    
    attrs.update(realme_attrs)
    attrs['digest']=top_node.getAttr('digest')
    attrs['className']=REALMES[realme]
        
    # creates
    target_node.newNode('Realme', **attrs)
    verbose('Realme:' + realme + ' Created.', level=level, ifLevel=3, indent=indent, logFile=logFile)



#------#
# Main #
#------#


# Stores the Action File's Processor Alias
var source_action_alias=ro['alias']

# Stores the Action File's First Node <=> self_action.getTop()
:ls
source_action_node=ro[0]


try:

    ## Retreives the Scope
    print
    print '## Retreives the Scope'
    scope_name, scope_attrs, scope=self_action.getScope(parent_node=self_action.getTop(), indent=self_action.getIndent())
    self_action.verbose(scope_name=scope_name, scope_attrs=scope_attrs)    
    indent=self_action.getIndent() + 3*' '

    ## Stores the target Scope Processor Alias and mount it
    print '## Stores the target Scope Processor Alias and mount it'
    var target_scope_alias=scope.pc_ro['alias']
    :mount $target_scope_alias
    :ls
    target_node=ro[0]
    realmes=[]
    
    # Intergrity check
    for realme in REALMES:
        if self_action.getTop().hasNode(realme):realmes.append(realme)
        
    if len(realmes)==0:raise xception.kikonfActionSystemException(self_action, 'inject', 'At least on realme (in ' + str(REALMES)[1:-1] + ') is required !')
    if len(realmes)>1:raise xception.kikonfActionSystemException(self_action, 'inject', 'Over numbered Realmes: only one realme is allowed ! Found: ' + str(realmes)[1:-1] + '.')
    if not scope_name.startswith('context') and scope_name not in ('engine', 'host'):raise xception.kikonfActionSystemException(self_action, 'inject', 'Bad Scope: ' + scope_name + ', Scope should be one of: "engine", "host" or "context" !')
        
    realme=realmes[0]
    class_name=REALMES[realme]
    
    ## Destroys first
    print    
    print '## Destroys first'
    verbose('Realme: ' + realme + ' Removing.', level=self_action.getVerbose(), ifLevel=4, indent=indent, logFile=self_action.getLogFile())
    var class_name=class_name
    :rm Realme@className=${class_name}
    #%delete Realme where className = ${class_name}
    deleted_nodes=ro
    if deleted_nodes!=None:n=len(deleted_nodes)
    else:n=0
    
    if n>0:verbose('Realme: ' + realme + ' Removed:' + str(n) + ' configuration Entry.', level=self_action.getVerbose(), ifLevel=3, indent=indent, logFile=self_action.getLogFile())

    
    ## Creates the Realme
    print
    print '## Creates the Realme'    
    realme_node=self_action.getTop().getNode(realme)[0]
    injRealme(self_action.getTop(), realme_node, realme, level=self_action.getVerbose(), indent=indent, logFile=self_action.getLogFile())

except Exception, e:
    
    _e=xception.kikonfActionSystemException(self_action, 'inject', 'An exception occures ! SubException is:' + str(e) + ' !')
    _e.setSubException(e)
    REPOZ.recordSessionException(self_action.getName(), _e)
    if self_action.getVerbose()>=10:raise
    # Dont forget to skipt a strict empty line at the end to let the Interpretor to interprete the End of the bloc !

							
(Source: <KIKONF_INSTALLATION_DIR>/plugins/actions/tom/context/by/kikonf/context.inject.repoz)


  • 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 :
  • "Apache", "Apache Tomcat" and "Tomcat" are trademarks of the Apache Software Foundation.
  • "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