Uso de WebLogic Scripting Tool. CLI para todos. Parte 1.

Por Isaac Ruiz
Publicado en Julio 2017


Alcance.

El presente documento da una introducción a WLST, la herramienta que WLS trae para realizar operaciones sobre un dominio utilizando un lenguaje de programación interpretado (jython).

Este documento está basado en el contenido de estos dos documentos, los cuales forman parte de la documentación de Oracle Fusion Middleware 12c:

  • Fusion Middleware Understanding the WebLogic Scripting Tool.
    • http://docs.oracle.com/middleware/12212/lcm/WLSTG/toc.htm
  • Fusion Middleware WLST Command Reference for Oracle WebLogic Server.
    • http://docs.oracle.com/middleware/1221/wls/WLSTC/toc.htm

En este documento se menciona como activar la consola de WLST, como conectarse a un dominio WLS 12c y cómo recuperar el estado de cada servidor que forma parte del dominio. El objetivo es proporcionar los conocimientos necesarios para comenzar a utilizar WLST incluyendo el uso de la ayuda.

Requerimientos.

El presente documento asume que se tiene cierta experiencia construyendo aplicaciones usando el lenguaje de programación java y/o pyhton, asume también que el lector tiene experiencia como desarrollador de aplicaciones y conoce en ese nivel un sistema operativo, por ende, sabe ejecutar tareas a nivel CLI.

El documento también asume que se tiene experiencia creando dominios con WLS en alguna de sus versiones más recientes.

Si quieres ver información sobre cómo crear dominios puedes revisar alguno de estos artículos:

  • Weblogic 12.2.1 Instalación y creación de Dominio en Windows 10.
    • https://community.oracle.com/blogs/rugi/2016/05/11/weblogic-1221-instalaci%C3%B3n-en-windows-10
  • Guía de instalación para Oracle SOA Suite 12c.
    • http://www.oracle.com/technetwork/es/articles/soa/instalacion-oracle-soa-suite-12c-2360582-esa.html
  • Instalación de Oracle SOA Suite 12c sobre Exalogic
    • http://www.oracle.com/technetwork/es/articles/soa/instalacion-soa-suite-12c-exalogic-2548201-esa.html

WLST se basa en JMX, así que apreciarás mejor este documento si repasas la serie: JMX la guía perdida.

  • Parte 1. JMX. Java Management Extensions. Los fundamentos.
    • http://www.oracle.com/technetwork/es/articles/java/java-management-extensions-3403127-esa.html
  • Parte 2. JMX. La guía perdida. Weblogic y sus MBeans Servers.
    • http://www.oracle.com/technetwork/es/articles/java/jmx-weblogic-mbeans-servers-3500259-esa.html
  • Parte 3. JMX. La guía perdida. JMX, Weblogic y Multitenant.
    • http://www.oracle.com/technetwork/es/articles/java/jmx-weblogic-multitenant-p3-3703521-esa.html

Introducción.

Seguramente es algo que ya hemos leído con frecuencia en otros artículos; la administración y monitoreo de recursos no es una tarea sencilla; en ocasiones es mucho más laboriosa que la instalación y/o despliegue de componentes.

En el caso de WLS 12c, la consola web de administración es un muy buen punto de acceso para realizar estas tareas.

Si bien la consola web de administración nos proporciona todo lo necesario para administrar y monitorear un dominio, en ocasiones es mucho más sencillo realizar este tipo de tareas desde línea de comandos. Además de que, en ocasiones es necesario buscar el agrupamiento y automatización de algunas tareas. Temas como la integración continua (CI) hacen que este último punto, la automatización de operaciones se vuelva cada día más importante.

Todo esto es parte de los motivadores para realizar esta serie de artículos.

WLST.

WebLogic Scripting Tool (WLST) es el nombre de esta herramienta que proporciona una interface en línea de comandos, dicha interface proporciona un entorno que permite crear, administrar y monitorear dominios WLS.

El entorno que ofrece WLST permite ejecutar instrucciones de alto nivel usando el lenguaje de programación Jython (la implementación de pyhton sobre la JVM); esto incluye creación de variables y uso de sentencias de control. La sintaxis de Jython es similar a la de Python, permitiendo adicionalmente ejecutar métodos de clases java cargadas previamente.

Administrar o configurar.

Una manera fácil de entender el potencial de WLST es pensar en alguna tarea que realizamos con la consola web del WLS; esta tarea puede ser: crear, levantar o apagar un servidor, crear o detener un dataSource, monitorear el estado de los servidores del dominio, etc. Todo eso se puede hacer en línea de comandos con WLST.

Online.

Para realizar estas tareas, requerimos que el dominio esté en funcionamiento, es decir que esté online. Todas estas tareas y todas las que se puedan realizar con la consola web del WLS, lo podemos realizar con WLST. La ejecución de alguna de estas tareas (las que requieren que el dominio esté funcionado) las conoceremos como tareas WLST online.

Offline

Por otro lado, para crear el dominio, seguramente utilizaste el configuration Wizard.

Esta tarea no requiere que exista un dominio, a este tipo de tareas (las que no requieren conectarse a un dominio) las conoceremos como WLST offline. Otra tarea que se puede realizar de manera offline es la creación de templates.

Ya sabemos que hay tareas online y offline, ahora veamos los modos de uso. Es decir, la manera en que podemos ejecutar dichas tareas.

Modos de uso.

En ambos casos, ya sea online y offline, existen 3 modos de uso de WLST.

  • Modo interactivo
  • Modo script
  • Modo embebido.

El modo interactivo es el más común y es el que conoceremos en este artículo.

El modo script implica que ya tenemos más experiencia con WLST y podemos agrupar instrucciones en un archivo externo (el cual deberá tener la extención .py) y ejecutarlas en batch.

El modo embebido se refiere a invocar desde código java instrucciones propias de WLST, el código en Python se incluye dentro del código java, de ahí su nombre.

Manos a la obra.

Este modo es el que nos permite interactuar con la consola WLST a través de instrucciones expresadas en Jython, la consola funciona como interprete por lo que obtendremos resultados al mismo tiempo que ejecutamos las instrucciones.

Si has trabajado con lenguajes como Ruby o Python, seguramente ya sabes de que se trata. Java 9 traerá esta funcionalidad conocida formalmente como REPL.

El primer paso es entonces, invocar esta consola, para ello requerimos acceder al ORACLE_HOME de nuestra instalación.

Esta carpeta debe tener el siguiente contenido:

Mode                LastWriteTime     Length Name
----                -------------     ------ ----
d----     31/08/2016  10:42 p. m.            .patch_storage
d----     31/08/2016  10:41 p. m.            cfgtoollogs
d----     31/08/2016  10:37 p. m.            coherence
d----     31/08/2016  10:38 p. m.            em
d----     31/08/2016  10:40 p. m.            install
d----     31/08/2016  10:41 p. m.            inventory
d----     31/08/2016  10:39 p. m.            OPatch
d----     31/08/2016  10:39 p. m.            oracle_common
d----     31/08/2016  10:40 p. m.            oui
d----     31/08/2016  10:48 p. m.            user_projects
d----     31/08/2016  10:38 p. m.            wlserver
-a---     03/03/2017  10:52 a. m.        402 domain-registry.xml

La carpeta que nos interesa es oracle_common/

Cargando la consola interactiva.

Veamos ahora como arrancar la consola interactiva de WLST, navegaremos hasta la carpeta:

$ORACLE_HOME\oracle_common\common\bin

En esa carpeta debemos localizar el siguiente ejecutable.

Si tienes un equipo con linux

%> .\wlst.sh

Si tienes windows:
%> .\wlst.cmd

Lo ejecutamos y, deberá mostrar en la pantalla la siguiente salida:

Initializing WebLogic Scripting Tool (WLST) ...
Jython scans all the jar files it can find at first startup. 
Depending on the system, this process may take a few minutes 
to complete, and WLST may not return a prompt right away.
Welcome to WebLogic Server Administration Scripting Shell
Type help() for help on available commands

wls:/offline>

Listo.

Nuestra consola está cargada y nos presenta un prompt que indica que estamos en modo .

Python/Jython

Como se mencionaba anteriormente, la manera para interactuar con el prompt es con el lenguaje jython, jython es la implementación de Python para la JVM, esto permite codificar con la sintaxis de Python además de poder cargar clases java.

Jython es un lenguaje de script; no es estricto con los tipos de datos. Esto hace que sea mucho más dinámico su uso. Veamos algunos ejemplos de sentencias.

La sentencia que manda a imprimir a consola es print.

wls:/offline> print "hola mundo"
hola mundo

Podemos realizar operaciones directamente obteniendo el resultado de manera inmediata.

wls:/offline> a=1
wls:/offline> b=2
wls:/offline> print a+b
3

También es posible ejecutar sentencias de flujo como for’s, respetando la sintaxis del lenguaje.

Python usa el espaciado como mecanismo de indentación.

wls:/offline> for x in range(0, 3):
...    print "Esta es la iteracion %d" % (x)
...
Esta es la iteracion 0
Esta es la iteracion 1
Esta es la iteracion 2

Ahora que ya estamos en modo interactivo, sigamos conociéndolo.

Accediendo a la ayuda.

Uno de los comandos más comunes una vez que estamos en la consola de WLST es el de ayuda.

La ayuda en WLST está muy bien redactada y es muy útil cuando queremos conocer la mejor manera de ejecutar algún comando.

Para invocar la ayuda, solo es necesario escribir:

wls:/offline> help()

WLST is a command line scripting tool to configure and administer WebLogic Server. Try:

help('ADFMadmin')        List Commands for ADF Model Management.
help('ADFURLConnectionadmin')List Commands for managing ADF Based URL Connections
help('ADFWSConnection')  List of commands for managing ADF Based WebServiceConnection
help('all')              List all WLST commands available.
help('audit')            Lists commands for Common Audit Framework
help('browse')           List commands for browsing the hierarchy.
help('common')           List the most commonly used commands.
help('control')          List commands for controlling the domain/server.
help('deployment')       List commands for deploying applications.
help('diagnostics')      List commands for performing diagnostics.
help('editing')          List commands for editing the configuration.
help('fmw diagnostics')  Lists commands for performing FMW diagnostics.
help('idsconfig')        List commands for managing IDS configuration
help('igfconfig')        List commands for managing IGF configuration
help('information')      List commands for displaying information.
help('JarsVersion')      List Commands to export/print Jars Version.
help('jrf-config-help')  No resource found for jrf-config-help, key: jrf-config-help_shortDescription
help('lifecycle')        List commands for managing life cycle.
help('MDSrepositoryadmin')List Commands for Metadata Repository Management.
help('nodemanager')      List commands for using Node Manager.
help('oamap')            Lists commands for OAM Authentication and Identity Assertion Provider.
help('oamapsso')         No resource found for oamapsso, key: oamapsso_shortDescription
help('offline')          List all offline commands available.
help('online')           List all online commands available.
help('opss')             Oracle platform security services Commands.
help('OracleLibOVDConfig')List commands for managing libOVD configuration
help('portlet')          Commands supported for Portlets.
help('storeadmin')       List all store admin commands.
help('trees')            List commands use to navigate MBean hierarchy.
help('ums')              Lists commands for User Messaging Service (UMS).
help('upgradeADFMetadataCmds')List Commands for upgrade ADF metadata.
help('variables')        List all global variables available.
help('WebServices')      Muestra los comandos de Oracle WebServices Management.
help('wsmManage')        Lists commands for Oracle WSM Policy Management.

WLST para la versión 12c de WLS tiene ya una buena cantidad de comandos por lo que, lo primero que observamos al invocar help() es que se nos muestra la manera de acceder a la ayuda de manera organizada. Así, si queremos conocer la ayuda sobre los comandos relacionados con el proceso de despliegue (deployment) debemos ejecutar: help(‘deployment’).

Otro ejemplo, si queremos obtener la ayuda relacionada con los comandos de control debemos teclear: help(‘control’) Y, si ejecutamos esa sentencia veremos algo como lo siguiente:

wls:/offline> help('control')

Control domains or servers.
help('addStartupGroup')     Add a new server startup group.
help('addTemplate')         (Deprecated) Extend the current domain.
help('clone')               Clone the server object.
help('closeDomain')         Close the current domain.
help('closeTemplate')       Close the current domain template.
help('connect')             Connect WLST to a WebLogic Server instance.
help('consolidateDatasources')   Consolidate serveral original Data 
Sources to one consolidated Data Source.

help('createDomain')        Create a new domain.
help('deleteStartupGroup')   Delete the server startup group.
help('disconnect')          Disconnect WLST.
help('exit')                Exit WLST from the user session.
help('exportPartition')     Exports a domain partition into a partition 
archive.

help('getDatabaseDefaults')   Connect to the database to retrieve schema 
information.

help('getFEHostURL')        Retrieves the URL for the domain Frontend Host.
help('getNodeManagerHome')   Gets the Node Manager home.
help('getNodeManagerType')   Gets the Node Manager type.
help('getNodeManagerUpgradeOverwriteDefault')   Gets the value of the Node Manager upgrade overwrite default flag.
help('getNodeManagerUpgradeType')   Gets the Node Manager upgrade type used for Node Manager upgrade.
help('getOldNodeManagerHome')   Gets the old Node Manager home used for Node Manager upgrade.
help('getServerGroups')     Retrieves a list of the server groups which the specified server is a member.
help('getStartupGroup')     Retrieve the server startup group.
help('importPartition')     Imports a domain partition from a partition archive
help('listServerGroups')    Retrieves a map of the config-groups server groups which are user expandable.
help('loadTemplates')       Loads all the selected templates using select template.
help('readDomain')          Open an existing domain for updating.
help('readDomainForUpgrade')   Open an existing domain for reconfiguration
help('readTemplate')        (Deprecated) Open an existing domain template.
help('readTemplateForUpdate')   Opens an existing domain template for template update.
help('rollingRestart')      Restarts the targeted servers one at a time without interrupting service
help('rolloutApplications')   Rollout changes to deployed applications on the targeted servers without interrupting service
help('rolloutJavaHome')     Rollout a new JavaHome location for targeted servers without interrupting service
help('rolloutOracleHome')   Rollout changes to the OracleHome bits of targeted servers without interrupting service
help('rolloutUpdate')       Rollout changes to targeted servers without interrupting service
help('selectCustomTemplate')   Selects an existing custom domain template or application template.
help('selectTemplate')      Selects an existing domain template or application template.
help('setDistDestType')     Sets the distributed destination type.
help('setFEHostURL')        Sets the domain Frontend Host URLs.
help('setServerGroups')     Sets the server groups for the specified server.
help('setSharedSecretStoreWithPassword')   set the shared secret store and password.
help('setStartupGroup')     Set the server startup group.
help('setTopologyProfile')   Sets the topology profile.
help('showAvailableTemplates')   Display all currently available templates for loading.
help('showTemplates')       Display all currently selected and loaded templates.
help('unselectCustomTemplate')   Unselect the existing selected custom domain template or application template.
help('unselectTemplate')    Unselect the existing selected domain template or application template.
help('updateDomain')        Update and save the current domain.
help('validateConfig')      Validate a Domain configuration.
help('writeDomain')         Write the domain configuration information.
help('writeTemplate')       Write the domain template.

El listado muestra todos los comandos relacionados con el control de un dominio, y los servidores que lo conforman.

Por ejemplo, si queremos conectarnos con un servidor, el comando que requerimos es: connect

Veamos ahora la ayuda de este comando.

wls:/offline> help('connect')

Cada que accedamos a la ayuda de un comando veremos 3 secciones:

Descripción, sintaxis y ejemplos.

Si bien la parte de ejemplos es de gran utilidad cuando vamos empezando a conocer WLST, es importante que leamos la descripción y sintaxis de cada comando, sobre todo para conocer cuáles son los parámetros obligatorios y cuáles son los efectos de usar o no alguno de ellos.

Este es un resumen de la ayuda para el comando: connect.

wls:/offline> help('connect')
Description:

Connects WLST to a WebLogic Server instance.

Syntax:

connect([username, password], [url], [adminServerName], [timeout], [idd])

connect([userConfigFile, userKeyFile], [adminServerName], [url], [timeout], [idd])
connect([url], [adminServerName], [timeout])

- username = Optional. Username of the operator who is connecting WLST
 to the server. If not specified on the command line, WLST processes the
 command as described above.

- password = Optional. Password of the operator who is connecting WLST
 to the server. If not specified on the command line, WLST processes the
 command as described above.

- url = Optional. Listen address and listen port of the server instance,
specified using the following format:
 [protocol://]listen-address:listen-port. If not specified, this
 argument defaults to t3://localhost:7001.

- userConfigFile = Name and location of a user configuration file which
 contains an encrypted username and password. When you create a user
 configuration file, the storeUserConfig command uses a key file to
 encrypt the username and password. Only the key file that encrypts a
 user configuration file can decrypt the username and password. See
 help('storeUserConfig').

- userKeyFile = Name and location of the key file that is associated
 with the specified user configuration file and is used to decrypt it.
 See help('storeUserConfig').

- adminServerName = Optional. Name of the Administration Server.
 This value is used when WLST is invoked from a domain directory.
 This argument defaults to myserver.

- timeout = Optional. A name/value pair that specifies the number
 of milliseconds that WLST waits for online commands to complete (return).
 For example, timeout=10000
 When you invoke a WLST online command, WLST connects to an MBean
 server, invokes an MBean server method, and returns the results of
 the invocation. If the MBean server method does not return within
 the timeout period, WLST abandons its invocation attempt.
 The default value is 0, which indicates that the operation will not
 time out. Note, however, that a timeout of 5 minutes may occur at a
 different layer.

- idd = Optional. A name/value pair that specifies the Identity Domain 
of the user. For example, idd=dbUsers
 This arguments defaults to None.

Example:

wls:/offline> connect('adminusrname','adminpassword','t3://localhost:8001')
Connecting to weblogic server instance running at t3://localhost:8001 as
username weblogic...

Lo primero que nos llama la atención es que todos los parámetros son opcionales, esto se debe a que es posible ejecutar únicamente: connect().

Veamos qué ocurre si ejecutamos sin parámetros el comando connect().

wls:/offline> connect()
Please enter your username :

Si ejecutamos connect() sin parámetros, el comando nos va ir solicitando la información para conectarnos con un dominio.

Da doble ENTER para interrumpir el comando. Usaremos una versión con parámetros para conectarnos.

wls:/offline> connect()
Please enter your username :

Please enter your password :
Traceback (innermost last):
  File "", line 1, in ?   File "", line 19, in connect   File "", line 553, in raiseWLSTException WLSTException: Error occurred while performing connect : "The username is empty." wls:/offline> 

Vamos a volver a intentar conectarnos, pero ahora usando una versión de connect con 3 parámetros:

  • Username
  • Password
  • URL de conexión.

Esto es (asumiendo que tu usuario es weblogic y el password es welcome1):

connect('weblogic','welcome1','t3://localhost:7001')

La URL de conexión inicia con t3://, y he colocado localhost ya que ahí se encuentra mi dominio.

T3 es un protocolo propietario y és el que WLST utiliza por default para realizar la conexión con el servidor.

Si tienes duda del puerto, puedes validarlo accediendo a tu consola web, validando con esto que tu dominio está funcionando.

01

Figura 1. Pantalla de login de WLS 12c.

Conectándose a un dominio.

Tenemos el comando ya listo, al ejecutarlo veremos una salida similar a la siguiente:

wls:/offline> connect('weblogic','welcome1','t3://localhost:7001')
Connecting to t3://localhost:7001 with userid weblogic ...
Successfully connected to Admin Server "AdminServer" that belongs to domain "base_domain".

Warning: An insecure protocol was used to connect to the server.
To ensure on-the-wire security, the SSL port or Admin port should be used instead.

wls:/base_domain/serverConfig/>

Una vez conectados, veremos que el prompt cambia, indicándonos el nombre del dominio al cual nos estamos conectados.

wls:/base_domain/serverConfig/>

Ok, ya estamos conectados. ¿Qué sigue?

Variables de ambiente disponibles.

Ya conectamos lo que sigue es comenzar a interactuar con el dominio, pero, antes de hacer esto, es importante saber que existen ciertas variables que están disponibles desde que accedemos a la consola.

Estas variables nos ayudan a recuperar cierta información del entorno y como veremos en unos momentos, a interactuar con el dominio al cual nos hemos conectado.

Variable Descripción Ejemplo
Connected Valor booleano que indica si WLST está conectado a un servidor en ejecución.
True si esto es cierto, falso en otro caso.
wls:/mydomain/serverConfig> print connected
false
domainName Nombre del dominio al cual estamos conectados. wls:/mydomain/serverConfig> print domainName
mydomain
isAdminServer Valor booleano que indica si WLST está conectado al servidor administrador.
True si esto es cierto, falso en otro caso.
wls:/mydomain/serverConfig> print isAdminServer
true
serverName Nombre del servidor al cual WLST está conectado. wls:/mydomain/serverConfig> print serverName
myserver
userName Nombre del usuario con el cual se realizó la conexión. wls:/mydomain/serverConfig> print username
weblogic
domainRuntimeService Referencia al MBean DomainRuntimeServiceMBean.

Esta variable está disponible únicamente cuando WLST está conectado al servidor administrador.
wls:/mydomain/serverConfig> domainRuntimeService.getServerName()
'myserver'
Tabla 1. Variables disponibles en WLST

Son solo algunas, la lista completa la puedes ver aquí:

  • Fusion Middleware WLST Command Reference for Oracle WebLogic Server. WLST Variable Reference.
    • https://docs.oracle.com/middleware/1221/wls/WLSTC/reference.htm#WLSTC562

Probemos el valor que estas variables tienen en nuestra conexión.

wls:/base_domain/serverConfig/> print 'Connected', connected
Connected true
wls:/base_domain/serverConfig/> print 'Domain Name:', domainName
Domain Name: base_domain
wls:/base_domain/serverConfig/> print 'Is Admin Server:', isAdminServer
Is Admin Server: true
wls:/base_domain/serverConfig/> print 'Server Name:', serverName
Server Name: AdminServer

De todas las variables disponibles, la que más nos llama la atención es:

  • domainRuntimeService

La documentación nos dice que es una referencia directa al MBean: DomainRuntimeServiceMBean

Es decir:

weblogic.management.mbeanservers.domainruntime.DomainRuntimeServiceMBean

Recordemos lo que dice la documentación de esta clase:

Proporciona un punto de acceso común para navegar a todos los MBeans: los de configuración del dominio y los que existen en tiempo de ejecución, así como a los MBeans que proporcionan servicios de todo el dominio.

Documentación de la clase:

https://docs.oracle.com/middleware/1221/wls/WLAPI/weblogic/management/mbeanservers/domainruntime/DomainRuntimeServiceMBean.html

Esto quiere decir que, al igual que con JMX tenemos acceso al método getServerRuntimes();

ServerRuntimes
Contiene un arreglo de MBeans ServerRuntimeMBean, cada uno representa un servidor de nuestro dominio.

Con esto tenemos todo lo necesario para conocer el estado de cada servidor de nuestro dominio.

Dado que tenemos acceso a la variable domainRuntimeService, podemos ejecutar sus métodos directamente:

wls:/base_domain/serverConfig/> domainRuntimeService.getServerName()
'AdminServer'

Mostrar estado del dominio.

Dado que ya sabemos cómo conectarnos y sabemos cómo obtener una referencia al MBean domainRuntimeService podemos realizar el ejercicio de conectarnos a un dominio y conocer el estado de cada servidor.

Conectarse.

Con lo que hemos visto ya podemos conectarnos con la siguiente línea:

connect('weblogic','welcome1','t3://localhost:7001')

Recuperar el estado de cada servidor.

Recordemos un poco como está internamente la clase DomainRuntimeService.

02

Figura 2. Composición parcial de la clase DomainRuntimeServiceMBean.

A partir de la clase podemos recuperar el arreglo de objetos ServerRuntime, y cada objeto ServerRuntime nos da información de cada servidor; entre esta información están el nombre y el estado.

Una vez que nos hemos conectado, lo que sigue es hacer uso de la variable domainRuntimeService, invocaremos el método getServerRuntimes .

allServers=domainRuntimeService.getServerRuntimes();

Con esto obtenemos el arreglo de servidores disponibles en el dominio, esto se lo asignamos a una variable llamada allServers. Para evitar sorpresas, y quizá muy a la defensiva, validaremos que el resultado tenga al menos un valor.

if (len(allServers) > 0):

Después, iteraremos la variable usando un for y asignándole a tempServer el valor de cada elemento del arreglo.

  for tempServer in allServers:

Por ultimo recuperamos las propiedades name y state de cada servidor, concatenamos y mandamos la salida a la consola.

print 'Server name:', tempServer.getName() , 
'  Server state:' , tempServer.getState()

El código junto queda así:

allServers=domainRuntimeService.getServerRuntimes();

if (len(allServers) > 0):
  for tempServer in allServers:
       print 'Server name:', tempServer.getName() , '  
       Server state:' , tempServer.getState()

Y, aquí un ejemplo de la ejecución:

wls:/base_domain/serverConfig/> 
allServers=domainRuntimeService.getServerRuntimes();
wls:/base_domain/serverConfig/>
wls:/base_domain/serverConfig/> if (len(allServers) > 0):
...  for tempServer in allServers:
...       print 'Server name:', tempServer.getName() , '  
Server state:' , tempServer.getState()

...
Server name: AdminServer   Server state: RUNNING
wls:/base_domain/serverConfig/>

Y listo, hemos utilizado WLST de manera interactiva para conectarnos y conocer el estado de cada servidor de nuestro dominio.

El mismo ejemplo que realizamos anteriormente con JMX en “Parte 2. JMX. La guía perdida. Weblogic y sus MBeans Servers.” lo hemos realizado con WLST con menos líneas y de una manera interactiva.

Para finalizar, como te habrás imaginado, el comando para salir del modo interactivo en WLST es:

exit()

wls:/base_domain/serverConfig> exit()
Exiting WebLogic Scripting Tool.
%>

JMX o WLST.

Quizá en estos momentos te estés preguntando que opción es mejor, JMX directo o WLST.

¿La respuesta? Depende del escenario y (creo) de los gustos. En ocasiones sólo tenemos acceso a clases java y JMX es lo mejor, o quizá preferimos java sobre Python, o a la inversa, Python sobre java.

Toma en cuenta que con JMX sólo requerimos dos jars para poder realizar la conexión, con WLST asumimos que tenemos un ORACLE_HOME a nuestra disposición (generalmente el mismo ORACLE_HOME del dominio que queremos inspeccionar).

Otro factor es saber si vamos a integrar lo que estemos ejecutando con alguna otra pieza o si solo es una ejecución en aislado.

En cualquier caso, debemos ver WLST como una herramienta más para nuestra caja, es mejor tenerla lista para cuando la requiramos.

Conclusión.

WLST explota las bondades de JMX y ofrece una interfaz basada en Python un lenguaje interpretado que permite ejecutar código de una manera más dinámica.

En el caso de WLST el código es mucho más dinámico y con la consola de línea de comandos es mucho más rápido realizar consultas a los MBeans de nuestro dominio.

Esto abre la posibilidad de crear scripts que realicen prácticamente cualquier tarea de configuración, es decir, llegar a la tan anhelada automatización de tareas.

De eso trataran los siguientes artículos de esta serie.

Enlaces.

  • Fusion Middleware Understanding the WebLogic Scripting Tool.
    • http://docs.oracle.com/middleware/12212/lcm/WLSTG/toc.htm
  • Fusion Middleware WLST Command Reference for Oracle WebLogic Server.
    • http://docs.oracle.com/middleware/1221/wls/WLSTC/toc.htm
  • Repositorio con el código usado en esta serie de artículos.
    • https://github.com/rugi/wlst


Isaac Ruiz Guerra (@rugi), es programador Java y Consultor TI. Especializado en integración de sistemas, fundamentalmente relacionados con el sector financiero. Actualmente forma parte del equipo de S&P Solutions. Escribe en su blog personal xhubacubi.blogspot.com, pero también participa y pertenece a www.javahispano.org y a www.javamexico.org

Este artículo ha sido revisado por el equipo de productos Oracle y se encuentra en cumplimiento de las normas y prácticas para el uso de los productos Oracle.