|
|
|
|
|
Trans
Action : tom.trans (Category : tom, Name : trans, By : kikonf)
Complete Name : tom.trans.by.kikonf Version : 5.5 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 trans plugin : This Action configures a Tomcat Transaction. The following shows the main Source Code File for the Action : tom.trans 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
#-------------------#
# Utility functions #
#-------------------#
def rmvLink(level=None, indent=None, logFile=None):
verbose('UserTransaction ResourceLink Removing.', level=level, ifLevel=4, indent=indent, logFile=logFile)
%delete ResourceLink where type=javax.transaction.UserTransaction
if ro!=None:n=len(ro)
else:n=0
if n>0:verbose('UserTransaction ResourceLink Removed:' + str(n) + ' configuration Entry.', level=level, ifLevel=3, indent=indent, logFile=logFile)
def rmvTrans(factory , level=None, indent=None, logFile=None):
verbose('UserTransaction on factory:' + factory + ' Removing.', level=level, ifLevel=4, indent=indent, logFile=logFile)
var factory = factory
%delete Transaction where factory = ${factory}
if ro!=None:n=len(ro)
else:n=0
if n>0:verbose('UserTransaction on factory:' + factory + ' Removed:' + str(n) + ' configuration Entry.', level=level, ifLevel=3, indent=indent, logFile=logFile)
def injLink(top_node, target_node, level=0, indent=None, logFile=None):
""" Creates a ResourceLink """
trans_attrs=top_node.getAttrs()
# link node
link_attrs=top_node.getNode('link')[0].getAttrs()
verbose('UserTransaction ResourceLink:' + link_attrs.name + ' Creating.', level=level, ifLevel=4, indent=indent, logFile=logFile)
attrs={'global': 'UserTransaction', 'name': link_attrs.name, 'type':'javax.transaction.UserTransaction'}
# creates
target_node.newNode('ResourceLink', **attrs)
verbose('UserTransaction ResourceLink:' + link_attrs.name + ' Created.', level=level, ifLevel=3, indent=indent, logFile=logFile)
def injRsc(top_node, target_node, level=0, indent=None, logFile=None):
""" Creates a Transaction """
trans_attrs=top_node.getAttrs()
verbose('UserTransaction Creating.', level=level, ifLevel=4, indent=indent, logFile=logFile)
attrs={}
# transrsc node
transrsc_node=top_node.getNode('transrsc')[0]
transrsc_attrs=transrsc_node.getAttrs()
attrs['factory']=trans_attrs.factory
attrs['type']='javax.transaction.UserTransaction'
# properties node
if transrsc_node.hasNode('properties'):
properties_node=transrsc_node.getNode('properties')[0]
if properties_node.hasNode('property'):
property_nodes=properties_node.getNode('property')
for property_node in property_nodes:
property_attrs=property_node.getAttrs()
attrs[property_attrs.name]=property_attrs.value
# creates
target_node.newNode('Transaction', **attrs)
verbose('UserTransaction 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]
# Integrity check
if self_action.getTop().hasNode('link') and not scope.type.startswith('context'):
raise xception.kikonfActionSystemException(self_action, 'inject', 'Bad Scope:' + scope.type + ', When using Tag "link" A Scope "context" is required for this Action !')
if scope.type!='resources.global' and not scope.type.startswith('context'):
raise xception.kikonfActionSystemException(self_action, 'inject', 'Bad Scope:' + scope.type + ',Either a Scope "context" or "resource.global" is required for this Action !')
if not scope_attrs['resources.global']=='true' and self_action.getTop().hasNode('link'):
raise xception.kikonfActionSystemException(self_action, 'inject', 'Bad Scope:' + scope.type + ', When an entry link is used, "resources.global" equal true is required for the Scope !')
trans_attrs=self_action.getTop().getAttrs()
## Creates the ResourceLink
print
print '## Creates the Transaction'
if self_action.getTop().hasNode('link'):
rmvLink(level=self_action.getVerbose(), indent=indent, logFile=self_action.getLogFile())
injLink(self_action.getTop(), target_node, level=self_action.getVerbose(), indent=indent, logFile=self_action.getLogFile())
## Creates the Transaction
if self_action.getTop().hasNode('transrsc'):
print
print '## Creates the Transaction'
if scope_attrs['resources.global']=='true' and scope.type.startswith('context') and scope.type!= 'context.global': # Changes the target scope to the global resource scope
print '# Changes the target scope to the global resource scope'
var target_root_scope_alias=scope.root_pc_ro['alias']
:mount $target_root_scope_alias
:ls
target_node=ro[0]
# Creates GlobalNamingResources if not exists
if target_node.hasNode('GlobalNamingResources'):target_node=target_node.getNode('GlobalNamingResources')[0]
else:target_node=target_node.newNode('GlobalNamingResources')
:cd GlobalNamingResources
rmvTrans(trans_attrs.factory, level=self_action.getVerbose(), indent=indent, logFile=self_action.getLogFile())
injRsc(self_action.getTop(), target_node, level=self_action.getVerbose(), indent=indent, logFile=self_action.getLogFile())
else: # target_scope is the rigth target for resource
:cd /
:ls
target_node=ro[0]
# Creates GlobalNamingResources if not exists
if scope_attrs['resources.global']=='true':
if target_node.hasNode('GlobalNamingResources'):target_node=target_node.getNode('GlobalNamingResources')[0]
else:target_node=target_node.newNode('GlobalNamingResources')
:cd GlobalNamingResources
rmvTrans(trans_attrs.factory, level=self_action.getVerbose(), indent=indent, logFile=self_action.getLogFile())
injRsc(self_action.getTop(), target_node, 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 !
Trademarks :
|