Ruteo de Servicios Web con Oracle Service Bus (Parte 4)

Por Deiby Gómez Robles
Publicado en agosto 2013

Índice de contenidos

1. Ruteo de Servicios Web con Oracle Service Bus (Parte 1)
2. Ruteo de Servicios Web con Oracle Service Bus (Parte 2)
3. Ruteo de Servicios Web con Oracle Service Bus (Parte 3)
4. Ruteo de Servicios Web con Oracle Service Bus (Parte 4)

Estimados colegas de Oracle reciban un cordial saludo, hasta aquí se ha visto los elementos básicos dentro del Bus de Servicios siendo estos el "Proxy Service" y el "Business Service", luego se dieron los primeros pasos de ruteo de servicios web utilizando la función "Operational Branch", útil cuando se quiere exponer un servicio web con varias operaciones, siendo posible redireccionar cada operación a un diferente servicio web, después se utilizó la función "Conditional Branch" para tomar decisiones simples del tipo "if-else-then", muy utilizada cuando hay reglas del negocio que deben ser satisfechas. En esta última parte del articulo se verá la función "Pipeline Pair" la cual es muy útil cuando el mensaje de solicitud (request) es armado por varios procesos, operaciones yo/ transformaciones, de igual manera con el mensaje de respuesta (response).

El "Pipeline Pair" crea dos ramas de orquestamiento una para armar el mensaje de solicitud y otra para armar el mensaje de respuesta, en cada rama puede ocurrir varias operaciones, transformaciones, ruteos, etc. La segunda rama, como la primera, provee la capacidad de realizar varias operaciones previas a retornar el mensaje de respuesta. El Pipeline es muy utilizado en las actualizaciones virtuales de servicios Web donde a los clientes se les expone una interfaz por ejemplo de servicios web versión 10g, luego por un "Pipeline Pair" es construido el mensaje XML de solicitud y finalmente enviado al servicio en versión 11g, una vez consumido el servicio se procede a construir el mensaje XML de respuesta de versión 10g para después ser retornado al cliente.

Pipeline Pair

A continuación se mostrará un ejemplo utilizando esta funcionalidad, recuerde que este ejemplo es una continuación de las partes anteriores de este articulo, por lo que si necesita saber cómo se creó el "Proxy Service" y el "Business Service" puede dirigirse a la "Parte 1", si necesita saber cómo se creó el "Operational Branch" puede dirigirse a la "Parte 2" o si lo desea la "Parte 3" contiene la información de la función "Conditional Branch".

Ejemplo: Creación de un "Pipeline Pair"

1. Hacer "Login" en la consola web del OSB

Login

2. Crear una sesión

Crear una sesión

3. Seleccionar el "Proxy Service" creado en la Parte 1 del artículo

Proxy Service

4. Dar clic en el icono

5. Seleccionar la rama de la operación "resta":

resta

6. Crear un "Conditional Branch"

Conditional Branch

7. Agregar un elemento de tipo "Stage" en la rama del "Request"

Agregar un elemento

8. Editar el elemento "Stage"

Editar el elemento

9. Agregar un elemento "Assign"

Agregar un elemento

10. Clic en "Expression"

Expression

11. Ingresar la dirección del primer parámetro:
a. En la sessión "Variable Structures" selección el parametro "arg0"
b. Copiar la dirección que aparece en el "Property Inspector" y pegarla en el "Xquery/XSLT Expression Editor".
c. Guardar

Variable Structures

Se le agrega la función "text()" al final para extraer el valor que trae el nodo XML del parametro "arg0", recuerde que el valor original viene de la siguiente forma:

<arg0>valor<arg1>
 

Para extraer únicamente el valor y no los elementos XML, se utiliza la función "text()"

12. Agregar el nombre "parametro0" a la variable

parametro0

Esto hará que el valor que traiga el parámetro "arg0" sea copiado a la variable "parametro0". Para hacer referencia a esta variable se usará el símbolo "$", por ejemplo "$parametro0". Usar variable facilita el proceso de ruteo.

13. Agregar otro elemento "Assign"

Assign

14. Repetir los pasos 10, 11 y 12 para el segundo parámetro "arg1"

Assign

15. Agregar un tercer elemento "Assign"

Assign

16. Ingresar "Solicitud" al nombre de la variable

Solicitud

17. Editar la Expresión

18. Ingresar el XML de Solicitud. Note que en el mensaje XML se envía el valor que tienen las variables anteriormente creadas (parametro0 y parametro1)

Ingresar el XML de Solicitud

19. Guardar los cambios

20. Agregar otro elemento "Stage"

Agregar otro elemento

21. Editar el segundo elemento "Stage"

Editar el segundo elemento

22. Crear un elemento "Service Callout"

Service Callout

23. Seleccionar el servicio de negocio "operacionesWS"

operacionesWS

24. Seleccionar la operación "resta"

Seleccionar la operación

25. Ingresar el nombre de la variable para la solicitud, la cual deberá tener todo el XML necesario. Ingresar el nombre de la variable de respuesta en la cual el servicio dejará el resultado en formato XML.

Ingresar el nombre de la variable para la solicitud

26. Guardar los cambios

27. Agregar un elemento "Stage" en la rama de respuesta

Agregar un elemento

28. Editar el elemento "Stage"

Editar el elemento

29. Agregar un elemento "Replace"

Agregar un elemento

30. Ingresar "." en el "XpathExpression Editor" para hacer referencia al nodo de respuesta (response).

XpathExpression Editor

31. Guardar el cambio

32. Seleccionar la opción "Replace node contents" para reemplazar únicamente el contenido del nodo de respuesta y escribir "body" en el campo variable.

Replace node contents

33. Modificar la Expresión

34. Ingresar "$respuesta" en el "XQuery/XSLT Expression Editor" para enviar como resultado el contenido de la variable "$Respuesta", ¿Recuerda qué contenía esta variable? Si no lo recuerda, puede regresar al "Paso 25"

XQuery/XSLT Expression Editor

35. Guardar Cambios

36. El "Pipeline Pair" debería verse de la siguiente forma:

Pipeline Pair

37. Activar la sesión

Activar la sesión

38. Realizar una prueba de la operación "resta" para comprobar que todo el trabajo haya quedado realizado correctamente

Realizar una prueba de la operación

39. Comprobar resultados:

Comprobar resultados

Este articulo dividido en sus cuatro partes conforman los primeros pasos en el amplio camino del orquestamiento utilizando "Oracle Service Bus", existen muchos elementos más que pueden ser utilizados para mejorar las operaciones realizadas, algunas funciones se muestran en las siguientes imágenes:

Oracle Service Bus

 


Deiby Gómez es un DBA, con experiencia en administración de dominios “WebLogic” e implementaciones de Arquitecturas Orientadas a Servicios (SOA). De forma frecuente es conferencista en diversos eventos Oracle en Guatemala, entre ellos OTN LAD Tour 2013 y otros. Ha brindado consultoría en implementaciones de SOA y Bases de datos en diversas empresas de su país de residencia ( Guatemala ), actualmente es Consultor en Datum S.A. de Guatemala. Deiby es OCP11g y Oracle SOA Implementation Certified Expert.