Integrando aplicaciones .NET con Websphere Message Broker V8.0

Ejecución de DLLs y uso de las colas de mensajería de Microsoft (MSMQ)

Este artículo muestra las nuevas funcionalidades de Websphere Message Broker v8.0 para integración con .NET a través de dos ejemplos prácticos: 1- La ejecución de librerías de enlace dinámico (dll). 2- La escritura y lectura de mensajes en las colas de mensajería de Microsoft (MSMQ).

Eduardo A. Miranda, Especialista de IT. WW Websphere Business Partners-Technical Professionals Latin America, IBM

Eduardo Miranda cuenta con una amplia experiencia como desarrollador y arquitecto en proyectos de construcción e integración de software, especialmente para el sector financiero. Se unió a IBM en 2011 y desde entonces ha trabajado en la habilitación técnica de Business Partners en temas de conectividad y gestión de procesos. Es graduado de Ingeniería de Sistemas y Computación de la Universidad de los Andes, y tiene una MBA de la Escuela de Negocios de Manchester.



Leonardo Rodriguez, Especialista de IT en Websphere Connectivity para Latinoamérica, IBM

Leonardo Rodriguez es especialista Técnico Certificado con foco en Soluciones de Middleware e Integración en la brand de WebSphere, pertenece al Laboratorio de Soluciones del grupo de Software y asiste a business partners, especialistas en IT y clientes en la región de Latinoamérica.



18-06-2012

Introducción

Una de las características más importantes de la versión 8 de Websphere Message Broker es la posibilidad de ejecutar código Microsoft .NET dentro de los flujos de mediación. Esto abre la posibilidad no solo del uso de los lenguajes soportados por Microsoft .NET (ej. C#, VB.NET) para realizar transformaciones de mensajes sino que también permite nuevas formas de interacción con aplicaciones como lo son la ejecución de librerías de enlace dinámico (dll) y el uso de colas de mensajería de Microsoft (MSMQ).


Importancia de integrarse con Microsoft .NET

.Net es uno de los ambientes de programación más populares entre desarrolladores {ref www.tiobe.com}. Adicionalmente, muchos clientes cuentan con grandes inversiones en Microsoft.NET y sus tecnologías relacionadas. Algunos ejemplos son:

  • Microsoft Dynamics para CRM/ERP
  • SharePoint para colaboración
  • Visual Studio para desarrollo
  • Aplicaciones a la medida desarrolladas con .NET

Soporte para Microsoft .NET dentro de Websphere Message Broker v8.0

El .NET Common Language Runtime (CLR) provee un ambiente en el cual ejecutar código y provee varios servicios clave como la carga dinámica, recolección de basura y aspectos de seguridad, similares a los proveídos por la Máquina Virtual de Java (JVM).

Websphere Message Broker puede ser integrado con cualquier lenguaje CLR a través del nodo .NETCompute. Esto permite escribir nodos de Broker en C#, VB, F#, C++/CLI y muchos otros, albergando un CLR por cada grupo de ejecución del Broker.

Adicionalmente, el toolkit de broker puede iniciar el Microsoft Visual Studio, estándar de la industria para desarrollo en .NET, e instalar un plug-in en el Visual Studio para simplificar el desarrollo de nodos.

El plug-in cuenta con plantillas de código para facilitar el desarrollo de transformaciones en Visual Studio. Las siguientes plantillas están disponibles en C#, Visual F# y Visual Basic:

  1. Crear un nuevo mensaje
  2. Filtrar un mensaje
  3. Modificar un mensaje

Para hacer uso de estas plantillas, simplemente se debe hacer doble-click en el nodo .NETCompute; esto abre Microsoft Visual Studio, y el desarrollador debe adicionar la clase más apropiada de las plantillas de Websphere Message Broker disponibles

Figura 1. Plantilla de filtro de mensaje en Visual Studio
Plantilla de filtro de mensaje en Visual Studio

El desarrollador solo tiene la tarea de implementar un único método Evaluate, para lo cual cuenta con acceso total a los árboles de mensajes del broker (Message, Local Environment, Environment y ExceptionList) y puede definir el número de terminales dinámicas que necesite. Adicionalmente, el desarrollador puede acceder al browser de objetos para visualizar los APIs de Broker en .NET y el depurador de Visual Studio puede ser utilizado para depurar los assemblies de .NET.


Ejemplo 1: Ejecución de Librerías de Enlace Dinámico (dll)

El siguiente ejemplo demuestra como utilizar una librería dll en Visual Studio a través de los plug-in de WebSphere Message Broker. Nuestra dll (RegistrarCliente.dll) contiene una clase llamada Registro con un método RegistrarCliente que simula el registro de un cliente a partir del nombre como dato de entrada, para ver el código consultar el archivo RegistrarCliente.cs dentro del archivo adjunto.

Dentro de Visual Studio

En nuestro ejemplo vamos a hacer uso de una clase compilada (RegistrarCliente.dll) siguiendo estos pasos:

  1. Seleccionar New Project en Visual Studio.
  2. Seleccionar Project to modify a Message Broker message del los plug-in del WebSphere Message Broker y cambiar el nombre del proyecto por BrokerDLL como indica la figura 2:
Figura 2. Creando un Nuevo Proyecto en Visual Studio
Creando un Nuevo Proyecto en Visual Studio
  1. Automáticamente se genera un esqueleto de código gracias al plug-in de WebSphere Message Broker. Para hacer referencia a la dll seleccionar Add Reference del menú Project, como lo indica la figura 3:
Figura 3. Añadiendo referencias en Visual Studio
Añadiendo referencias en Visual Studio
  1. Navegar en el filesystem, seleccionar la dll RegistroCliente.dll y seleccionar OK
Figura 4. Panel para agregar archivos de referencia en Visual Studio
Panel para agregar archivos de referencia en Visual Studio
  1. Luego para hacer uso de la clase dentro del código debemos importar la dll escribiendo el código que aparece en la figura 5:
Figura 5. Importando las referencias de RegistroCliente.dll
Importando las referencias de RegistroCliente.dll
  1. El código auto-generado propaga el mensaje de entrada al terminal de salida, haciendo una concatenación de ambos mensajes (el de entrada y el de salida) para evitar esto debemos eliminar el inputMessage en la siguiente línea de código:
Figura 6. Eliminando inputMessage
Eliminando inputMessage

Código resultante:

Figura 7. inputMessage eliminado
inputMessage eliminado
  1. En el código auto-generado, dentro de la región UserCode debemos escribir las siguientes líneas de código que hacen referencia a la clase y al método dentro de la dll (RegistrarCliente.dll):
Figura 8. Código para invocar la dll RegistroCliente.dll
Código para invocar la dll RegistroCliente.dll
  1. Seguidamente salvar el código como BrokerDLLNodo.cs
  1. Compilar el proyecto haciendo click en Build Solution dentro del menú Build o presionando la tecla F6 como indica la figura 9:
Figura 9. Compilando el proyecto en Visual Studio
Compilando el proyecto en Visual Studio
  1. Revisar que no hayan habido errores y que se haya compilado exitosamente. Para obtener este código consultar el archivo BrokerDLLNodo.cs dentro del archivo adjunto.
Figura 10. Resultado de la compilación
Resultado de la compilación

Dentro de WebSphere Message Broker Toolkit

Una vez de haber generado y compilado el código dentro del Visual Studio se pasará a trabajar con el Toolkit de WebSphere Message Broker. En el mismo se construirá un flujo que recibirá vía HTTP una petición XML el cual contiene el nombre del cliente, este mensaje XML lo recibirá la dll previamente creada (BrokerDLL.dll) la cual toma el nombre del cliente e invoca el registro, generando como respuesta final otro mensaje XML que será devuelto vía HTTP, para construir el flujo procederemos de la siguiente manera:

  1. Crear una nueva Aplicación y llamarla BrokerDLL.
  2. Crear un nuevo Message Flow y llamarlo registrarCliente.
  3. Arrastrar un nodo .NETCompute dentro de la carpeta Transformation y cambiar el nombre a RegistrarCliente como indica la figura 11:
Figura 11. Nodo .NETCompute
Nodo .NETCompute
  1. Con el nodo .NETCompute seleccionado ir al tab de Basic dentro de las propiedades y navegar hasta el archivo BrokerDLL.dll en el campo Assembly name.
Figura 12. Utilizando BrokerDLL.dll
Utilizando BrokerDLL.dll
  1. Seguidamente arrastrar un nodo HTTP Input y un nodo HTTP Reply conectando los terminales de la forma que indica la figura 13:
Figura 13. Nodos HTTP Input y HTTP Reply
Nodos HTTP Input y HTTP Reply
  1. Con el nodo HTTP Input seleccionado dentro del tab Basic en las propiedades escribir el siguiente URI /registrar dentro del campo Path suffix for URL como indica la figura 14:
Figura 14. Configurando el URI en el nodo HTTP Input
Configurando el URI en el nodo HTTP Input
  1. En el tab de Input Message Parsing seleccionar XMLNSC como el parser para el Message Domain como indica la figura 15:
Figura 15. Utilizando el parser XMLNSC en el nodo HTTP Input
Utilizando el parser XMLNSC en el nodo HTTP Input
  1. Salvar todos los cambios y hacer el despliegue del flujo en el Broker.
  1. Enviar el mensaje XML de entrada al flujo en el Broker haciendo uso de cualquier herramienta para solicitudes HTTP como por ejemplo curl, nettool, entre otras. El URL a invocar sería el siguiente: http://localhost:7080/registrar
Mensaje XML de entrada
<Registrar><nombreCliente>IBM</nombreCliente></Registrar>
Mensaje XML de respuesta
<Respuesta>
   <Mensaje>El cliente IBM fue registrado exitosamente en nuestra base
		de datos</Mensaje>
</Respuesta>

Este ejemplo demuestra como invocar librerías dll dentro de WebSphere Message Broker v8 de una forma fácil y sencilla.


Ej 2. Lectura y escritura en colas de mensajería de Microsoft (MSMQ)

Existen casos donde se tiene la necesidad de integrarse con sistemas de mensajería distintos a WebSphere MQ o FTP como por ejemplo Microsoft MQ (MSMQ). WebSphere Message Broker no posee un nodo o adaptador específico para integrarse con MSMQ, sin embargo existen diversas formas para integrarse a este sistema de mensajería. Podemos poner el caso de crear un adaptador con algún código en particular que sirva de intermediario entre WebSphere Message Broker y MSMQ, si bien es una opción estaríamos creando un componente adicional al cual configurar y administrar, además que el desempeño de la transacción se vería afectado negativamente. Para esta integración podemos aprovechar las ventajas del nodo .NETCompute e invocar una librería dll que contenga el código para comunicarse con la mensajería de Microsoft.

En nuestro segundo ejemplo vamos a simplificar los pasos que ya fueron mostrados en el ejemplo anterior y nos iremos directo al código utilizado para invocar colas de MSMQ a través de WebSphere Message Broker.

Dentro de Visual Studio

  1. En la máquina donde está corriendo el Broker debe estar instalado e inicializado el servicio Message Queuing para poder establecer la comunicación con colas remotas de Microsoft en otro servidor:
Figura 16. Habilitando el servicio de Windows Message Queuing
Habilitando el servicio de Windows Message Queuing
  1. Dentro de Visual Studio podemos crear un proyecto seleccionando el plug-in Project to modify a Message Broker message.
  2. Agregar el paquete System.Messaging en el tab .NET para poder utilizar las clases para la mensajería Microsoft:
Figura 17. Panel para agregar paquetes .NET de referencia en Visual Studio
Panel para agregar paquetes .NET de referencia en Visual Studio
  1. Hacer referencia al paquete System.Messaging en el código con la siguiente línea de código using System.Messaging;
Figura 18. Implementando el paquete System.Messaging
Implementando el paquete System.Messaging
  1. Repetir el paso 6 del ejemplo anterior para eliminar la propagación del mensaje de entrada en la salida del código.
  1. En el código auto-generado, dentro de la región UserCode debemos escribir las siguientes líneas de código como indica la figura 19, las cuales permitirán la comunicación con las colas de MSMQ donde estaremos enviando el nombre del cliente a una cola remota llamada Queue:

Figura 19. Código para escribir en colas remotas de Microsoft

  1. Salvamos y compilamos el proyecto fijándonos que no existan errores y que se haya compilado exitosamente.

Dentro de WebSphere Message Broker Toolkit

Una vez terminados los pasos para crear la dll en Visual Studio pasaremos a construir un flujo de la misma manera que lo hicimos en el ejemplo anterior pero esta vez haciendo referencia a la dll que acabamos de crear dentro del nodo .NETCompute. En el nodo HTTP Input colocaremos el URI con el valor de /enviarCola, salvamos los cambios, hacemos el despliegue del flujo en el Broker y enviamos el mismo mensaje XML pero esta vez al URL http://localhost:7080/enviarCola. Luego de enviar el mensaje XML al flujo debemos revisar que haya llegado el mensaje a la cola remota Queue con el nombre del cliente, en nuestro caso IBM.


Conclusión y Consideraciones especiales

Existen ciertas consideraciones a tener en cuenta en cuanto al soporte de .NET dentro de Websphere Message Broker v8.0.

En primer lugar, el soporte para .NET solo está disponible para plataformas Windows. Esta es una restricción heredada de las plataformas soportadas por .NET. Sobre esta plataforma, Message Broker está disponible en todas las ediciones del producto: Express, Standard y Advanced. Message Broker soporta únicamente desde la versión 4.0 del Framework de .NET.

Adicionalmente, hay que tener ciertas precauciones al utilizar el nodo .NETCompute, en especial, el que solo una instancia del nodo es creada sin importar el número de hilos que estén corriendo el flujo de mensajes, por lo que es importante que todo el código .NET que se implemente sea seguro para múltiples hilos de ejecución. También hay que considerar que las actualizaciones que se hagan utilizando los lenguajes .NET no participan en las transacciones de Websphere Message Broker.


Recursos

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=821248
ArticleTitle=Integrando aplicaciones .NET con Websphere Message Broker V8.0
publish-date=06182012