You could read a property file like described here. The basics are to use in fact Java to create a properties object and a FileInputStream to read it:
#Script to load properties file. from java.io import File from java.io import FileInputStream from java.util import Properties #Load properties file in java.util.Properties def loadPropsFil(propsFil): inStream = FileInputStream(propsFil) propFil = Properties() propFil.load(inStream) return propFil
I think the main disadvantage is that it clutters the script-code and you need to call 'myPorpFil.getProperty(key)' to get the property value.
Following the documentation you can use the commandline option '-loadProperties propertyFilename' to explicitly provide a property file. I found this actually quite clean. Every property in the file becomes automatically available as a variable in your script.
Besides that I found a teriffic blog-post on error handling in wlst. It states that with ' except NameError, e:' you can handle the reference to a variable that is not declared earlier.
I combined these two sources to come up with a script template that alows me to provide property files for different target environments as a commandline option, while detecting if properties are provided. So let's assume you create a porpererty file named for instance 'localhost.properties' like:
############################################################################# # Properties voor localhost Integrated Weblogic # # @author Martien van den Akker, Darwin-IT Professionals # @version 1.0, 2016-04-06 # ############################################################################# # # Properties voor localhost adminUrl=localhost:7101 adminUser=weblogic adminPwd=welcome1 clustername=LocalCluster # Generieke properties voor het creeeren van JMS componenten #jmsFileStoresBaseDir=/app/oracle/config/cluster_shared/filestore/ jmsFileStoresBaseDir=c:/Data/JDeveloper/SOA/filestore #Filestore 01 ...
Then you can use that with the following script, named for instance 'createJMSServersWithFileStoreV2.py':
#############################################################################
# Create FileStores and JMS Servers
#
# @author Martien van den Akker, Darwin-IT Professionals
# @version 1.0, 2016-04-06
#
#############################################################################
# Modify these values as necessary
import sys, traceback
scriptName = 'createJMSServersWithFileStoreV2.py'
#
#
def usage():
print 'Call script as: '
print 'Windows: wlst.cmd'+scriptName+' -loadProperties localhost.properties'
print 'Linux: wlst.sh'+scriptName+' -loadProperties environment.properties'
print 'Property file should contain the following properties: '
print "adminUrl='localhost:7101'"
print "adminUser='weblogic'"
print "adminPwd='welcome1'"
def main():
try:
#Connect to administration server
print '\nConnect to AdminServer via '+adminUrl+' with user '+adminUser
connect(adminUser, adminPwd, adminUrl)
...
except NameError, e:
print 'Apparently properties not set.'
print "Please check the property: ", sys.exc_info()[0], sys.exc_info()[1]
usage()
except:
apply(traceback.print_exception, sys.exc_info())
stopEdit('y')
exit(exitcode=1)
#call main()
main()
exit()
You can call it like 'wlst createJMSServersWithFileStoreV2.py -loadProperties localhost.properties'. If you don't provide a property file you'll get:
e:\wls>wlst createJMSServersWithFileStoreV2.py Initializing WebLogic Scripting Tool (WLST) ... Welcome to WebLogic Server Administration Scripting Shell Type help() for help on available commands Apparently properties not set. Please check the properties: exceptions.NameError adminUrl Call script as: Windows: wlst.cmdcreateJMSServersWithFileStoreV2.py -loadProperties localhost.properties Linux: wlst.shcreateJMSServersWithFileStoreV2.py -loadProperties environment.properties Property file should contain the following properties: adminUrl='localhost:7101' adminUser='weblogic' adminPwd='welcome1' Exiting WebLogic Scripting Tool. e:\wls>
Pretty clean. You could even use the 'except NameError, e:' construct to conditionally execute code when properties are set by ignoring/handling the situation when particular properties are intentionally not provided.
No comments:
Post a Comment