Upload
eproseed-veriton
View
919
Download
4
Embed Size (px)
Citation preview
WLST: WebLogic’s
Swiss Army Knife
Simon Haslam
Consultant/founder of Veriton & co-founder O-box FMW infra: high availability, security, performance
Chair of UKOUG Middleware SIG
Middleware focus, but interested from hardware upwards
What is WLST?
WLST & Management Beans Overview
Language Features
WLST Overview
Jython = Python running on JVM JMX are management APIs for
Java (implemented as Mbeans) WLST provides front-end to JMX ◦ a little like ‘SQL*Plus for WebLogic’
Since 12c admin functions possible over RESTful interface
WebLogic
MBeans
Jython
WebLogic extensions WLST
REST
Getting started
Usually connect to Admin Server ‘online’
Run wlst.sh [.cmd] or use Windows short-cut ◦ connect(<username>,<password>,<url>)
What is WLST?
WLST & Management Beans Overview
Language Features
Management Beans Overview
All WebLogic servers ◦ Runtime WebLogic MBeans
◦ JVM MBeans
Admin Server only ◦ Domain Runtime MBeans
◦ “edit” MBeans
System Change Management
edit() startEdit()
save() activate() <= prod. mode releases lock
◦ or undo()
Configuration lock held by user (not tool) so WLST startEdit will show that the domain is being edited in the WLS console
MBean Access
cd()
ls()
easeSyntax()
find(‘ListenAddress’);
wls:/wls1213test1/serverConfig/Machines/think-x220> find('listenAddress')
Finding "listenAddress" in all registered MBean instances ...
/Servers/AdminServer ListenAddress
/Servers/AdminServer/CoherenceMemberConfig/AdminServer UnicastListenAddress null
/Machines/think-x220/NodeManager/think-x220 ListenAddress localhost
/Servers/ms1 ListenAddress
/Servers/ms1/CoherenceMemberConfig/ms1 UnicastListenAddress null
Online & Offline
Online – connecting to Admin Server over JMX which in turn updates config.xml etc
Offline – using WLST libraries that updates config.xml directly Never connect offline if
the Admin Server is running!
Online vs Offline
Pros & Cons: ◦ Offline can do before domain is running, against shared dir from a different server etc
◦ Online has more features available
If you’re doing a full build you’re probably best doing the base domain offline to give you enough to start up a secure AdminServer then do the rest online (IMO!)
You may want to use WLST scripts/libraries after the domain is live too, hence good to write for online usage
edit() startEdit() PREFIX='WCCPDEV' NOTE=‘…' def update_user(DS, SCHEMA, NOTE): cd('/JDBCSystemResources/'+DS) cmo.setNotes(NOTE) cd('JDBCResource/'+DS+'/JDBCDriverParams/'+DS+'/Properties/'+DS+'/Properties/user') cmo.setValue(SCHEMA) update_user('mds-CustomPortalDS', PREFIX+‘_MDS', NOTE) update_user('WebCenter-CustomPortalDS', PREFIX+‘_WEBCENTER', NOTE) update_user('Activities-CustomPortalDS', PREFIX+‘_ACTIVITIES', NOTE) activate()
What is WLST?
WLST & Management Beans Overview
Language Features
Print and Concatenation
print ‘Processing ’ + server + ‘...’
Procedures & Libraries
Order is important – procedures/functions must have been defined before use Indentation is used to show nesting (not {}) One approach for ‘libraries’ is: execfile('fmw_utilities.py')
Loops
for I in range(1, 100): print I ... While I = ‘something’: print J ...
Conditions
if <condition> == <value> : e.g. if server == ‘AdminServer’: print ‘Skipping’ else: print ‘Doing something’
Not a great example – you wouldn’t usually test based on name
Parameter Parsing (simple)
Use argv[n]
import sys # script takes a single parameter for properties file try: loadProperties(sys.argv[1]); except: sys.exit('ERROR! Usage: '+sys.argv[0]+' <properties-file>\n'); ...
Parameter Parsing (flexible)
Use getopt
import sys, getopt def usage(): print "Usage: setup_cluster.py -u adminuser -c password -t protocol -a adminserver -p port -s start_range -e number_of_ips_to_check"
Parameter Parsing (flexible – cont.)
try: opts, args = getopt.getopt(sys.argv[1:], "u:c:t:a:p:s:e:",["adminuser=", "credential=", "adminProtocol=", "adminServer=","adminserverPort=", "startRange=","endRange="]) except: print “Unknown argument passed" usage() sys.exit(2)
Parameter Parsing (flexible – cont.)
for opt, arg in opts: if opt == "-u": adminUser = arg elif opt == "-c": adminCred = arg elif opt == "-t": adminProtocol = arg ...
Passwords / encryption
When you record you’ll get: setEncrypted('Password', 'Password_456…', ‘…/Script456…Config', ‘…/Script456…Secret')
You probably want something more visible, e.g. cmo.setPassword( encrypt(APP_PASS, DOMAIN_BASE+'/'+DOMAIN_NAME) ) cmo.setCustomIdentityKeyStorePassPhraseEncrypted( encrypt(SSL_IDENTITY_PASS, DOMAIN_BASE+'/'+DOMAIN_NAME) )
Invocation
CLASS_PATH, esp some layered products
Slower first time
Maybe write a cleaner wrapper script of your own
(If you’re clever you might embed WLST in Java progs)
Tools
Text editors ◦ vi (of course) ◦ Notepad++ has syntax highlighting for .py by default ◦ Sublime Text has syntax highlighting for .py
Recently discovered: WLST plug-in with tab/code completion: https://github.com/Joelith/sublime-wlst
WLS Console recording function Oracle Enterprise Pack for Eclipse ◦ Modern IDE supporting WLST project etc
Questions?
@simon_haslam
My blog: http://simonhaslam.co.uk
http://veriton.com
http://o-box.com