WebLogic Scripting Tool allows easy management of many Weblogic Server based products. Oracle has strategically implemented WLST in many products to make provisioning and configuring of environments easy and reproducible. This among other things enables tools like Chef and Puppet to do their magic. WLST is based on Jython. Jython is an implementation of Python running on the Java VM. Both Python and the Java VM provide many options for extending WLST functionality beyond what is commonly done. This will be elaborated and demonstrated with several advanced use cases and their implementations. This technical presentation will provide you with the knowledge to get most out of your investment in Oracle products!
2. Introduction
• About AMIS
– Located in the Netherlands
– Oracle Award winning partner
• Maarten Smeets
– Senior Oracle Integration Consultant
– Experience with Oracle SOA Suite since 2007
– Well certified (SOA, BPM, Java, SQL,
PL/SQL among others)
– Author of 100+ blog articles (http://javaoraclesoa.blogspot.com)
– Working @ AMIS since 2014
@MaartenSmeetsNL
https://nl.linkedin.com/in/smeetsm
6. Introduction
Based on popular languages
• WLST is based on Jython. Jython is an implementation of the Python
language for the Java platform
Python ranks as 5th most
popular programming
languageJava ranks as most popular
programming language
TIOBE index 2015
8. Introduction
Mbean trees
• domainConfig
– configuration hierarchy of the entire domain; represents the configuration MBeans in
RuntimeMBeanServer
– read only
• serverConfig
– configuration hierarchy (configuration MBeans) of the server your are connected to
– read only
• domainRuntime
– hierarchy of runtime MBeans for the entire domain
– read only
• serverRuntime
– hierarchy of runtime MBeans for the server you are connected to
– read only
• edit
– writable domain configuration with pending changes; represents the configuration MBeans in the
EditMBeanServer
• jndi
– read-only JNDI tree for the server you are connected to
• custom
– list of custom MBeans
– can be hierarchical/grouped if MBeans use namespaces appropriately
http://www.slideshare.net/jambay/weblogic-scripting-tool-overview
15. Using Java within WLST
Why?
• Extend WLST with Java API’s
– Unleash the power of Java API’s on your WLST scripts!
• Rewrite Java as WLST
– WLST can easily be executed by operations on an application server
16. Using Java with WLST
Some differences
Import ArrayMethodInstance
17. Using Java with WLST
Imports
Java WLST
import java.util.Hashtable; from java.util import Hashtable
18. Using Java with WLST
Creating instances
Java WLST
Hashtable jndiProps = new Hashtable(); jndiProps = Hashtable()
Types are determined by inference
19. Using Java with WLST
Methods
Java WLST
private String
getDNToUndeploy(CompositeData[]
compositeData) throws Exception
def getDNToUndeploy(compositeData):
Python has no true private methods
Exceptions are determined by inference
20. Using Java with WLST
Arrays
Java WLST
int[] intArray = { 1, 2, 3};
from jarray import array
intArray = array ([1, 2, 3],’i’)
Java primitives arrays can be created
in Jython with the jarray module
21. Using Java with WLST
Example: Java
http://javaoraclesoa.blogspot.co.uk/2015/05/unleash-power-of-java-apis-on-your-wlst.html
24. Using WLST as Jython module
Why?
• WLST uses Jython 2.2.1 (2007)
• Current version of Jython is 2.7 (2015)
• Jython 2.7 has many nice things, for example;
– Package management: pip install logging
– XML API’s: ElementTree
– Easy multithreading: multiprocessing
– Easy argument parsing: argparse
25. Using WLST as Jython module
Argument parsing in WLST
import getopt
url = None
user = None
password = None
opts, args =
getopt.getopt(sys.argv[1:], "e:u:p:")
for opt, arg in opts:
print opt, arg
if opt in "-e":
env = arg
if opt in "-p":
password = arg
if opt in "-u":
user = arg
print "URL: "+url
print "Username: "+username
print "Password: "+password
import sys;
print "URL: "+sys.argv[1]
print "Username: "+sys.argv[2]
print "Password: "+sys.argv[3]
Manual argument checking
and processing!
26. Using WLST as Jython module
Argument parsing in Jython 2.7
import argparse
parser = argparse.ArgumentParser()
parser.add_argument("username", type=string, help="username")
parser.add_argument("password", type=string, help="password")
parser.add_argument("url", type=string, help="url")
args = parser.parse_args()
print "URL: "+args.url
print "Username: "+args.username
print "Password: "+args.password
Type checking
Optional/required arguments
Help generation
Minimal coding
27. Using WLST as Jython module
Module installation
WLST (Jython 2.2.1) Jython 2.7
Find and download a
Jython 2.2.1 compatible module
Copy the module to
WL_HOME/common/wlst/modules
pip install <module name>
28. Using WLST as Jython module
How?
• You need the classpath
• You need the Jython module path
• You need a WLST Jython module
29. Using WLST as Jython module
How?
• You need the classpath
• You need the Jython module path
• You need a WLST Jython module
30. Using WLST as Jython module
Classpath
• Start wlst.sh / wlst.cmd
– import os
– print os.environ[‘CLASSPATH’]
• Add the wlfullclient.jar and <WLS_HOME>/oracle_common/modules/*
• Done
31. Using WLST as Jython module
How?
• You need the classpath
• You need the Jython module path
• You need a WLST Jython module
32. Using WLST as Jython module
Jython module path
• Start wlst.sh or wlst.cmd
– print sys.path
• Done
33. Using WLST as Jython module
How?
• You need the classpath
• You need the Jython module path
• You need a WLST Jython module
34. Using WLST as Jython module
• Start wlst.sh or wlst.cmd
– writeIniFile("wl.py")
• Replace ‘origPrompt = sys.ps1’ with ‘origPrompt = ">>>“’
• Done
35. Using WLST as Jython module
• Create a startjython.sh script to set the CLASSPATH and JYTHONPATH
• Ready to roll!
import wl
wl.connect("weblogic","Welcome01", "t3://localhost:7101")
mbServers= wl.getMBean("Servers")
servers= mbServers.getServers()
for server in servers :
print( "Server Name: " + server.getName() )
print( "Done." )
37. A look into the future
Cloud Application Foundation
38. A look into the future
New WLST features in 12c
• WLST 12c introduces Jline integration
– use up and down arrows to browse command history
• WebLogic Server 12c provides a Maven plugin to allow execution of
WLST scripts in for example Continuous Delivery pipelines
– https://docs.oracle.com/cd/E24329_01/web.1211/e24368/maven.htm#WLPRG700
• SOA Suite 12.2.1 instance patching only supported with WLST (not Ant or
Maven)
• WLST 12.2.1 offline mode does not support partitions (yet?) . WLST
12.2.1 online does support partitions (multitenancy)
39. A look into the future
However…
• wlfullclient.jar is deprecated since 12.2.1 (related to multitenancy?)
– http://docs.oracle.com/middleware/1221/wls/NOTES/whatsnew.htm#NOTES155
• RESTful Management Services replacing WLST in the cloud?
– http://docs.oracle.com/middleware/1221/wls/NOTES/whatsnew.htm#NOTES353
• WLST has not seen a new Jython version since 11g
41. Summary
• WebLogic Scripting Tool is based on popular programming languages
• WebLogic Scripting Tool has many uses
• WebLogic Scripting Tool is very flexible
– can be extended with Java API’s
– can be used as Jython module
• WebLogic Server is changing because of Oracle Cloud requirements
Recent awards: Oracle EMEA Middleware Partner of the Year, 3 times Oracle Netherlands Middleware partner of the year. One of the rare moments in the Netherlands when it isn’t raining.
In interactive mode, the shell managed a persistent connection to the server
A script can be executed setWLSEnv.sh and “java weblogic.WLST <script>” or wlst.sh / wlst.cmd. java –cp wlfullclient.jar weblogic.WLST
Embedded mode allows running WLST directly from Java using an Interpreter (weblogic.management.scripting.utils.WLSTInterpreter)
http://www.qualogy.com/starting-wlst-scripts/ and http://www.slideshare.net/jambay/weblogic-scripting-tool-overview have useful suggestions
Configuration wizard uses this
Interactive and script are not called separate interaction patterns for nothing.
Notice differences between 11g, 12.1.3 and 12.2.1. 12.2.1 includes a single JAR which contains a manifest file containing the classpath (WLS_HOME\wlserver\modules\features\wlst.wls.classpath)