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

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)

Reciban un cordial saludo tecnólogos Oracle de Latinoamérica, en esta tercera parte del artículo de Ruteos de Servicios Web se tratará la función "Conditional Branch", la cual se comporta como el ya conocido "if-else-then", esto implica que aporta cierto nivel de dinamismo en el ruteo ya que es capaz de tomar decisiones en tiempo real y redireccionar solicitudes de datos a diferentes Servicios Web, según sea el caso. Esta característica es muy útil para un Arquitecto de servicios web pues le permite filtrar solicitudes, tomar decisiones del negocio en tiempo real antes de consumir los servicios web finales, agregar dinámicamente más reglas de negocio e incluso rechazar las que no se requieran.

En la siguiente imagen se puede observar que una solicitud de datos es recibida por el "Proxy Service", es gestionada a través de un "Conditional Branch", y dependiendo de las reglas del negocio, es redireccionado al "Business Service #1" o al "Business Service #2".

Proxy Service

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" o si necesita saber cómo se creó el "Operational Branch" puede dirigirse a la "Parte 2".

Ejemplo: Creación de un "Conditional Branch"

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 "division"

Proxy Service

6. Crear un "Conditional Branch"

Conditional Branch

7. Editar el nodo

Editar el nodo

8. Editar la ruta

Editar la ruta

9. Seleccionar el nodo dentro del "request" de la operacion "división"
a. Ir a la sección "Variables Structures"
b. Seleccionar el nodo de la variable dividendo "arg1"
c. Copiar la dirección que aparece en el "Property Inspector" en el "XPath Expression Editor"
d. Guardar los cambios

Seleccionar el nodo

10. Ingresar "body" en el campo "variable" para indicar que nuestro dividendo se encuentra dentro del cuerpo del mensaje XML. Opcionalmente se puede seguir agregando más decisiones. usando el icono

Ingresar body

11. Guardar los cambios

12. Editar la rama que se acaba de crear con la decisión que agregamos anteriormente "Si el dividendo es 0".

Ingresar body

13. Agregar una ruta

Agregar una ruta

14. Editar la Ruta

Editar la Ruta

15. Agregar una ruta hacia un servicio web

Agregar una ruta hacia un servicio web

1. Seleccionar el Servicio de Negocio "operacionesWS":

operacionesWS

16. Seleccionar la operación "division"

division

17. Agregar un elemento "Reeplace", para reemplazar el valor "0" por el valor "1" cuando venga en el dividendo

Agregar un elemento Reeplace

18. Modificar la ruta de la variable que queremos reemplazar

Modificar la ruta de la variable

19. Seleccionar el nodo dentro del "request" de la operación "división"
a. Ir a la sección "Variables Structures"
b. Seleccionar el nodo de la variable dividendo "arg1"
c. Copiar la dirección que aparece en el "Property Inspector" en el "XPath Expression Editor"
d. Guardar los cambios

Seleccionar el nodo

20. Ingresar "body" en el campo "varible" para indicar que nuestro dato esta incluido en el cuerpo del mensaje XML. Luego seleccionar "Expression" para indicar el valor por el cual será sustituido el dividendo.

Ingresar body en el campo varible

Se selecciona la opción "Replace node contents" porque el nodo tiene el siguiente valor:

<arg1>valor</arg1>

Al seleccionar "Replace node contents" unicamente estamos reemplazando el valor del nodo, más no los los elementos XML de apertura y cerrado.

21. Ingresar el valor de 1 en el "XQuery/XSLT Expression Editor"

Ingresar el valor de 1

22. Guardar Todos los cambios

23. Opcionalmente se puede modificar la rama por defecto del "Conditional Branch", la cual será ejecutada cuando ninguna de las condiciones son cumplidas. Haciendo la analogía con "if-else-then" sería el elemento "else". Para este ejemplo no se modificará pues el objetivo es unicamente enseñar a utilizar la función "Conditional Branch".

Conditional Branch

24. Guardar todos los cambios

25. Activar la sesión

Conditional Branch

26. Realizar una prueba del servicio para comprobar resultados

comprobar resultados

27. Aprobar los resultados

Aprobar los resultados

En la próxima parte de este artículo se tratará la función "Pipeline Pair", la cual permite crear una rama de solicitud "request" y otra rama de respuesta "response", esto es útil cuando se necesita realizar muchas transformaciones y/o ruteos antes de completar un mensaje XML de solicitud (request) y de igual manera realizar una o más tareas antes de formar el mesaje XML de respuesta (response).

 


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.