Cómo ver las sesiones de Oracle Forms 12c usando WLST

En la versión 11 de Forms existía un pequeño script en Python que nos permitía ver la información de las sesiones de Forms sin tener que entrar en el Enterprise Manager. Este script se puede encontrar en la página de soporte de Oracle, nota 1580517.1Personalmente, encontraba este script muy útil, a la hora de buscar información de las sesiones activas, de las secciones de configuración de forms, las sesiones de base de datos relacionadas, ip’s,… sin tener que entrar en el EM, navegar hasta la sección de sesiones de Forms, etc. El problema es que esta utilidad dejó de funcionar con la nueva release 12c de Forms.

 

Buscando un poco por internet, encontré una entrada en un blog en la que actualizan a la versión 12c de forms,  así que me decidí a probarla y ajustarla a mis necesidades actuales.

Para poder usar este script, es necesario usar WLST (Weblogic Scripting Tool), un interfaz de comandos basado en Jython, muy útil para diferentes tareas de administración y de desarrollo.

 

En este ejemplo, lo estamos ejecutando desde un entorno Windows, así que localizamos el ejecutable (%ORACLE_HOME%\Middleware\oracle_common\common\bin\wlst.cmd ) y lo lanzamos desde una ventana “cmd.exe”:

 

c:\app>C:\Oracle\Middleware\oracle_common\common\bin\wlst

Initializing WebLogic Scripting Tool (WLST) …

Welcome to WebLogic Server Administration Scripting Shell

Type help() for help on available commands

Nos conectamos al AdminServer:

 

wls:/offline> connect(‘weblogic’,’passwordsecreto’,’t3://opcntwldes01.ges.com:7001′)

Connecting to t3://opcntwldes01.ges.com:7001 with userid weblogic …

Successfully connected to Admin Server “AdminServer” that belongs to domain “FRDomain”.

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.

Ejecutamos el “UpdateDMSEventRoute” para convertir los NOUN’s a Mbean. Es necesario realizarlo en el AdminServer y en el servidor manejado WLS_FORMS:

 

wls:/FRDomain/serverConfig/> updateDMSEventRoute(destinationid=”mbeanCreationDestination”, enable=”true”, server=”AdminServer”)

Location changed to domainRuntime tree. This is a read-only tree with DomainMBean as the root MBean.

For more help, use help(‘domainRuntime’)

 

Event-route for filter “null”, destination “mbeanCreationDestination” updated for server

“AdminServer”.

 

wls:/FRDomain/serverConfig/> updateDMSEventRoute(destinationid=”mbeanCreationDestination”, enable=”true”, server=”WLS_FORMS”)

Event-route for filter “null”, destination “mbeanCreationDestination” updated for server

“WLS_FORMS”.

 

wls:/FRDomain/serverConfig/> exit()

Exiting WebLogic Scripting Tool.

 

Reiniciamos los servicios del AdminServer y WLS_FORMS:

 

 

A partir de aquí, crearemos dos ficheros de texto. Uno para contener las propiedades de conexión como el nombre del Managed Server, el usuario, el password y la localización de los logs. A este fichero lo llamaremos, por ejemplo, “domain.properties”:

 

 

Es importante recalcar que el servidor manejado al que queremos acceder para ver las sesiones es el correspondiente a forms.

Una vez creado el fichero de propiedades, crearemos el programa listfrmsessions.py con el siguiente código:

 

import sys

import re

import os

from datetime import datetime

from java.io import File

from java.io import FileOutputStream

from java.io import FileInputStream



# Load Connection Properties

propInputStream = FileInputStream("domain.properties")

configProps = Properties()

configProps.load(propInputStream)

adminURL=configProps.get("admin.url")

adminPassword=configProps.get("admin.password")

adminUser=configProps.get("admin.username")

logFileLocation=configProps.get("logfile.location")



# Construct the Logfile with Timestamp

LogFileName = logFileLocation +'mon_frm_sessions-%s.log'%datetime.now().strftime('%Y_%m_%d_%H_%M_%S')



redirect('/dev/null', 'false')

# Perform connection to Managed Server hosting Forms App

connect(adminUser,adminPassword,adminURL)

custom()

cd ('oracle.dms')

children = ls()

childList = children.split("\n");

f = open(LogFileName, 'a')

f.write("\n" + datetime.now().strftime("%Y-%m-%d %H:%M:%S") + "\n")

f.write("Config\tDBName\tDBSessID\tClientIP\tPID\tUser\n")

# Printout for stdout

print "Config\tDBName\tDBSessID\tClientIP\tPID\tUser"

for child in childList:

  childInfo = child.split(' ');

  length = len(childInfo);

  if (len(childInfo) > 2 and re.match('oracle.dms:type=FormsRuntimeInfo,name=/frmDMS/\d',childInfo[3])):

     cd(childInfo[3]);

     attrs = ls();

     attrList = attrs.split("\n");

     for attr in attrList:

       if (attr.find("config_value") != -1 or attr.find("dbname_value") != -1 or attr.find("dbsessid_value") != -1 or attr.find("ip_value") != -1 or attr.find("pid_value") != -1 or attr.find("user_value") != -1):

          try:

            vl = attr.split()[2]+'\t'

          except IndexError:

            vl = '\t'

          f.write(vl)

          sys.stdout.write(vl)

     f.write("\n")

     print

     cd ('..')

print " "

print "Logfile are generated: " + LogFileName

disconnect()



En nuestro caso, hemos tenido que añadir un control a este programa, ya que intentaba hacer un “ls ()” de una sesión que nos estaba dando error:

 

oracle.dms:type=FormsRuntimeInfo,name=/frmDMS/-1

 

También hemos modificado la siguiente línea, ya que estamos en un entorno Windows:

 

redirect(‘/dev/null’, ‘false’)

 

Una vez controlado el error y corregido el directorio, ya podemos invocar normalmente nuestro script:

 

c:\app>C:\Oracle\Middleware\oracle_common\common\bin\wlst listfrmsessions.py

 

Initializing WebLogic Scripting Tool (WLST) …

Welcome to WebLogic Server Administration Scripting Shell

Type help() for help on available commands

 

Este sería un ejemplo del fichero generado en el WebLogic de pruebas:

 

Evolución, innovación y transformación
41 especializaciones avaladas por Oracle
Oportunidades ilimitadas
Posts 100% Oracle
Sigue nuestro día a día