Preferencias en Oracle Service Bus mediante funciones XPath personalizadas

A lo largo del desarrollo de un proyecto de Oracle Service Bus, en algún momento, siempre surge la cuestión de las variables de contexto en función del entorno de ejecución. Algunas de estas variables, como endpoints, claves de servicio, etc. se pueden modificar entre entornos mediante un Buscar y Sustituir o mediante un Fichero de Personalización en Oracle Service Bus. Pero podemos tener la necesidad de variables de contexto necesarias para nuestros servicios, como por ejemplo, constantes por entorno, flags, etc. que no pueden ser modificadas entre entornos mediante estos mecanismos de Oracle Service Bus.

A partir de esta situación, en los distintos desarrollos, siempre se ha tratado de dar diversas soluciones personalizadas para poder facilitar la utilización de variables de entorno en los servicios de Oracle Service Bus, como por ejemplo:

  • Xquery con las variables de entorno. Esta es la solución más sencilla. Consiste en almacenar un XML con las variables de entorno en una Xquery, de tal forma que cualquier Proxy Service puede utilizar esta Xquery para recuperar las variables de entorno. Modificando la Xquery entre entornos, se proporcionan las variables adecuadas para cada entorno sin modificar los servicios. Pero en este caso hay que modificar un componente del proyecto de Oracle Service Bus.
  • Servicios que recuperan las variables de entorno. Esta solución consiste en recuperar las variables de contexto a través de un servicio. Este servicio se encargaría de devolver las variables de entorno, pudiendo obtenerlas de una Base de Datos, de archivos de propiedades, etc.  Al cambiar de entorno, sólo debería cambiarse la Base de Datos, el archivo de propiedades, etc. para así obtener las variables adecuadas para cada entorno.

A continuación vamos a añadir una nueva solución aprovechando la personalización de funciones XPath/Xquery que proporciona Oracle Service Bus. La solución consiste en la creación de una función XPath personalizada que recupere las variables de entorno. Esta función se podría utilizar en cualquier expresión, transformación, asignación, etc. de cualquier proxy service. Su comportamiento sería similar al que realiza la función getPreferences que sí que incluye BPEL en la SOA Suite.

Para la creación de la función XPath personalizada, en primer lugar, debemos crear la clase Java que será utilizada por la función XPath.  En esta clase se puede implementar cualquier mecanismo de acceso a las variables de contexto, como por ejemplo, en un archivo de propiedades, en una base de datos, en un servicio, etc.  En nuestro ejemplo, utilizaremos un archivo de propiedades.

En nuestra clase Java, denominada EnvironmentVariables, implementamos la función getEnvironmentVariable, que recibirá como parámetro el nombre de una variable de entorno que se quiere buscar. La función buscará la variable de entorno en un archivo de propiedades y retornará el valor de dicha variable.

Clase que implementa la función getEnvironmentVariables

Tras implementar la clase Java, la empaquetamos en un JAR que dejamos en la ruta $OSB_ORACLE_HOME/config/xpath-functions. El siguiente paso es registrar la nueva función XPath en Oracle Service Bus para que pueda ser utilizada. Para registrar la función hay que definir un documento xml con la información de la nueva función XPath. El documento debe guardarse en la misma ubicación que el paquete que contiene la clase Java. Para la función getEnvironmentVariables, tenemos la siguiente configuración:

Descriptor de la función XPath

Las variables %AVT_FUNCTIONS% y %FUNC_GEV_COMMENT% se definen en archivos de propiedades para la internacionalización. Estos archivos se dejan también en la misma ubicación.

Tras reiniciar WebLogic y Oracle Enterprise Pack For Eclipse, la nueva función personalizada ya estará disponible para todos los proyectos y servicios de la instalación de Oracle Service Bus, ya que no está limitada a un dominio concreto. En OEPE, ya se puede utilizar la función para incluirla en cualquier expresión, asignación, transformación, etc. como cualquier función XPath predefinida:

Función XPath desde Oracle Enterprise Pack For Eclipse

En la consola de administración de Oracle Service Bus también podemos utilizar la nueva función XPath tras reiniciar WebLogic.

Función XPath personalizada en la Consola de Administración de Oracle Service Bus

Como conclusión, mediante esta funcionalidad proporcionada por Oracle Service Bus, podemos acceder a las variables de entorno utilizando una función XPath personalizada. De esta forma se consigue tener integrada la búsqueda de variables de contexto en el propio XPath sin necesidad de incluir acciones adicionales en los proxy services como los java callouts o los service callouts. Por otro lado, la personalización de las variables de entorno se independiza del proyecto y recursos de Oracle Service Bus, ya que sólo hay que modificar los archivos de propiedades para adecuar las variables al entorno. Además, al disponer de la funcionalidad en una clase Java se puede optimizar todo lo que se quiera en aspectos como el rendimiento, cacheo, resfresco, etc. Por último, también podría suceder que se decidiera cambiar de ubicación las variables de entorno, por ejemplo de archivos de propiedades a Base de Datos. En este caso, sólo sería necesario cambiar la clase Java sin necesidad de modificar los proyectos de Bus.

Twitter
LinkedIn
Evolución, innovación y transformación
37 Service Expertise avalados por Oracle 
Nuestra propuesta de valor
Posts 100% Oracle
Sigue nuestro día a día