Integrar WebSphere Message Broker con WebSphere Process Server

Exponer un flujo de Message Broker como WebService y consumirlo desde un proceso en WebSphere Process Server

Este tutorial pretende mostrar una manera en la que se puede consumir un flujo de WebSphere Message Broker (WMB de aquí en adelante) expuesto como WebService, desde un proceso ejecutándose en WebSphere Process Server (WPS de aquí en adelante) desarrollado en WebSphere Integration Developer (WID), cuando se presente el caso, por ejemplo, de un cliente que ya cuenta con WMB y tiene su backend bien integrado, pero quiere habilitar sus flujos como servicios web y orquestarlos a manera de procesos con WPS.

Juan Montalvo Godina, WebSphere IT Specialist, IBM

Juan Montalvo GodinaEgresado de Sistemas Computacionales del ITESM en el año 2007.
Actualmente trabajo en temas de BPM con los productos de IBM. Además de ver temas como WebSphere MQ, Message Broker, DataPower y WebSphere Application Server. Experiencia en desarrollo con Java y C# y lenguajes Web como PHP, JSP y ASP.

IBM Certified System Administrator - WebSphere Application Server, Network Deployment V6.1
IBM Certified Business Process Analyst - WebSphere Business Modeler Advanced V6.1



29-07-2011

Este tutorial pretende mostrar una manera en la que se puede consumir un flujo de WebSphere Message Broker (WMB de aquí en adelante) expuesto como WebService, desde un proceso ejecutándose en WebSphere Process Server (WPS de aquí en adelante) desarrollado en WebSphere Integration Developer (WID), cuando se presente el caso, por ejemplo, de un cliente que ya cuenta con WMB y tiene su backend bien integrado, pero quiere habilitar sus flujos como servicios web y orquestarlos a manera de procesos con WPS.

Vamos a empezar creando un nuevo Message Set desde el WMB Toolkit. Clic derecho en el Project Tree > New > Message Set. Dar los valores al nombre del Message Set y del proyecto y dar clic en Next.

En la segunda ventana, seleccionar la opción de WebServices SOAP, en la sección de tipo de mensaje con el que vamos a trabajar mas seguido, esto nos ayudará en el momento de generar el WSDL del WebService que representará al flujo de WMB. Dar clic en Next.

Se muestra el sumario de las operaciones a realizar y se da clic en Finish.

En caso de que aparezca un tip del toolkit dar clic en el botón OK.

Una vez que tenemos el proyecto del Message Set, es momento de crear una nueva definición de mensaje para lo que necesitaremos dar clic en la carpeta del proyecto en el Project Tree > Message Definitions > New > Message Definition File From > XML Schema File.

El wizard para la creación del Message Definition aparecerá. En este caso ya se cuenta con un esquema de XML basado en nuestro Business Object del proceso de WPS, por lo que seleccionaré la opción de Select file from outside workspace, dar clic en Browse... y seleccionar la ubicación del esquema, en este caso Solicitud.xsd.

Seleccionar el esquema y dar clic en Next.

En la siguiente pantalla, seleccionar todos los tipos de datos que vienen definidos en el esquema XML y dar clic en Finish.

Al finalizar, debemos tener la representación mostrada a continuación.

Una vez contando con la definición del mensaje y del conjunto, podemos generar el WSDL que nos servirá para conocer la manera en la que el flujo de WMB será llamado y si regresará o no alguna respuesta. Para esto hay que dar clic derecho en Project Tree seleccionar Generate > WSDL Definition.

El wizard de la definición del WSDL aparecerá. En la primer pantalla selecciona Generate a new WSDL definition from existing message definitions. Dar clic en Next.

En la siguiente pantalla habrá que seleccionar el Message Set en el cual nos basaremos para generar la definición del WSDL además del directorio en donde se generará el WSDL. En este caso dejaremos los demás datos con su valor por defecto y daremos clic en Next.

En la siguiente pantalla definiremos la manera en la que se generará el WSDL, en este caso como un solo archivo, en Style dejaremos el valor por defecto, cambiaremos el namespace del WSDL al seleccionado en este caso el valor del esquema XML. Dejamos el nombre con el valor por defecto y damos clic en Next.

La siguiente pantalla define el número de operaciones que tendrá el WebService además de la manera en la que serán llamadas y regresarán información. En este caso modificaremos la definición por defecto de la operación, cambiando el tipo de operación.

Seleccionamos la operación de tipo One Way, ya que el flujo solo recibirá información y la procesará, pero sin generar información de regreso.

Automáticamente se elimina la salida y nos quedará la siguiente pantalla, en donde se destaca que el nombre de la operación es Operation1, el valor por defecto, y que la información que espera la operación es de tipo Solicitud. Una vez realizado esto, damos clic en Next.

La siguiente pantalla define el tipo de binding que va a representar al WebService, en este caso SOAP/HTTP. Asociamos un Soap Action, en este caso RegistrarSolicitud y podemos dejar el resto de los valores con su valor por defecto. Dar clic en Next.

Revisar el sumario y dar clic en Finish.

Al terminar su ejecución el wizard, añadirá un par de definiciones de mensaje y una nueva carpeta llamada Deployable WSDL en donde se encuentra el WSDL que necesitamos para empezar a trabajar.

El siguiente es el flujo con el que se cuenta, es un flujo simple el cual se dispara al detectar la presencia de un archivo en un directorio dado, para después escribir su contenido en un nodo Trace, ser mapeado a un Message Object diferente y escribirlo a DB2 y dejarlo en una cola de MQ.

Lo que haremos es arrastrar el WSDL hacia el flujo, para poder exponerlo como WebService.

Al hacer esto, se abrirá un wizard que nos pregunta si lo que haremos es consumir o exponer un WebService, en este caso seleccionamos la opción de exponer un WebService y mantenemos los valores por defecto, y dar clic en Next.

La siguiente pantalla pregunta el nombre del flujo en donde se crearán los cambios, damos clic en Finish.

Automáticamente se generan 3 nodos en el flujo principal, un SOAP Input, un subflujo y un SOAP Reply, en este caso solo utilizaremos el Input y el subflujo, ya que el WebService no regresa nada, no necesitamos el SOAP Reply.

El contenido del subflujo es el que se muestra a continuación, en donde lo que se realiza, básicamente, es sacar el objeto de negocio Solicitud para poder trabajar con el en el flujo de WMB.

Lo que haremos es utilizar este subflujo para que a su salida podamos insertar los datos de la llamada del mensaje enviado por WPS en DB2 y depositarlo en una cola de MQ. A continuación se muestra el flujo final.

Ahora trabajaremos en WID, para preparar el proceso de negocio que hará uso del flujo de WMB.

Este es el flujo que ya se tiene implementado, en donde se cuenta con 5 tareas humanas para la aprobación de un crédito. Lo que se quiere hacer, es agregar una actividad al final del flujo que pueda llamar al flujo de WMB para registrar la solicitud en DB2.

El Project Tree se vería de la siguiente manera, lo que tenemos que hacer es definir una interfaz para la nueva actividad, además de importar el WSDL que recién acabamos de generar.

Para generar la nueva interfaz, hay que dar clic derecho en el Project Tree > BancoBPM_lib > Interfaces > New > Interface.

Al abrirse el wizard, daremos nombre a la interfaz, en este caso RegistrarSolicitud y clic en Finish.

Al abrirse la pantalla de definición de operaciones de la interfase, lo que haremos es agregar una operación de una sola vía, para que haga match con la llamada al WebService que recién generamos.

Modificamos el nombre de la operación, y el tipo de el objeto de negocio que estará esperando como entrada la operación.

Vamos a agregar una nueva actividad de tipo Invoke para poder referenciarla a la interfase que acabamos de generar, para lo que es necesario ir al editor del proceso y arrastrar y soltar en el proceso la actividad.

Modificamos el nombre de la actividad por la de Registrar Solicitud.

Ahora necesitamos agregar un partner de referencia para la actividad. En la parte derecha de la pantalla, damos clic en el signo de + para agregar el partner.

Nombramos RegistrarSolicitudPartner y seleccionamos la interfase que creamos hace unos minutos.

Esto generará la siguiente estructura en nuestro entorno.

Ahora conectamos el flujo de modo que nos quede de la siguiente manera, para que la última actividad sea la llamada al flujo de WMB.

Lo que hay que hacer ahora es asignar el partner que acabamos de crear a la actividad RegistrarSolicitud lo cual se hace en las propiedades de la actividad en la pestaña de Details y dando clic en el botón Browse...

Seleccionamos el partner que acabamos de crear.

Ahora asignamos la variable que será pasada a la operación de la interfase que acabamos de definir.

Regresando a la vista de Assembly Diagram necesitamos actualizar las referencias del proceso.

Para actualizar las referencias, damos clic derecho en el proceso SolicituddeCredito y seleccionamos sincronizar interfases y referencias desde implementación.

Esto agregará una referencia en el proceso el cual tenemos que configurar y conectar a continuación.

Esta referencia será la llamada al WebService, para lo cual tenemos que importar el WSDL que generamos en WMB, para lo que tenemos que dar clic en Project Tree > Import.

En el wizard seleccionamos WSDL en la sección de Business Integration.

En la siguiente pantalla definimos que se trata de un WSDL Local.

Buscamos la ubicación del WSDL, en este caso la ubicación del espacio de trabajo del proyecto de Message Set de WMB

Seleccionamos el WSDL que necesitamos y damos clic en Finish.

Esto generará 3 cosas, los objetos de negocio, dependencias del WSDL, la interfase del WSDL y el binding del WebService, mostrado como WebService Port, lo que proveerá la especificación para transmitir mensajes al WebService.

El siguiente paso es conectar la referencia del proceso con la definición del WebService que acabamos de importar, para lo cual necesitamos arrastrar y soltar el componente SOAP_HTTP_Port al diagrama de ensamblado.

El wizard nos pregunta que protocolo de transporte utilizaremos, en este caso seleccionamos el siguiente.

Esto nos genera un nuevo componente en el diagrama, el cual conectaremos con el proceso.

Sin embargo, el objeto de salida de la referencia no es el mismo que el objeto de entrada de la interfase, por lo que WID buscará generar un mapeo entre estos objetos.

Automáticamente se genera otro componente en donde se implementará el mapeo entre objetos.

Para esto necesitamos relacionar las operaciones entre las interfases.

Y definir que la operación entre los objetos de negocio será un Map.

En las propiedades de la relación, en la pestaña de Details necesitamos crear un nuevo mapeo de objeto de negocio, por lo que seleccionamos la opción de New...

Asignamos nombre al nuevo mapeo.

Y seleccionamos los objetos de negocio que participarán en el mapeo.

La siguiente pantalla nos muestra ambos objetos de negocio, listos para ser mapeados. El mapeo lo podemos hacer uno a uno, o dando clic derecho en el objeto de negocio de la derecha y seleccionar Map similar fields.

Así es como se debería ver nuestro mapeo al final de la operación.

Lo siguiente es seleccionar este mapeo como implementación de la relación que acabamos de definir.

Si guardamos todos los cambios, debemos tener algo similar a la siguiente representación. Sin ningún error y listo para ser instalado y probado en nuestro WPS.

Comentarios

developerWorks: Ingrese

Los campos obligatorios están marcados con un asterisco (*).


¿Necesita un IBM ID?
¿Olvidó su IBM ID?


¿Olvidó su Password?
Cambie su Password

Al hacer clic en Enviar, usted está de acuerdo con los términos y condiciones de developerWorks.

 


La primera vez que inicie sesión en developerWorks, se creará un perfil para usted. La información en su propio perfil (nombre, país/región y nombre de la empresa) se muestra al público y acompañará a cualquier contenido que publique, a menos que opte por la opción de ocultar el nombre de su empresa. Puede actualizar su cuenta de IBM en cualquier momento.

Toda la información enviada es segura.

Elija su nombre para mostrar



La primera vez que inicia sesión en developerWorks se crea un perfil para usted, teniendo que elegir un nombre para mostrar en el mismo. Este nombre acompañará el contenido que usted publique en developerWorks.

Por favor elija un nombre de 3 - 31 caracteres. Su nombre de usuario debe ser único en la comunidad developerWorks y debe ser distinto a su dirección de email por motivos de privacidad.

Los campos obligatorios están marcados con un asterisco (*).

(Por favor elija un nombre de 3 - 31 caracteres.)

Al hacer clic en Enviar, usted está de acuerdo con los términos y condiciones de developerWorks.

 


Toda la información enviada es segura.


static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=90
Zone=WebSphere
ArticleID=486401
ArticleTitle=Integrar WebSphere Message Broker con WebSphere Process Server
publish-date=07292011