sábado, 4 de junio de 2011

Integrando JMS y Dinámica

Cuando estuve en Lima en julio del año pasado, durante una presentación en la SUNAT (el organismo recaudador de impuestos), alguien me preguntó como se hacía para interactuar con un servidor de colas de mensajería, yo le explique que bastaba con extender una clase base del framework para lógica de negocios y añadir el código para hacer las llamadas al API de mensajería estándar de Java JMS. No he tenido necesidad de usar JMS en ningún proyecto, pero se que en algunas telefónicas en Venezuela usaban fuertemente un producto de IBM para tal fin.

Luego en febrero de este año, durante un curso de Dinámica Deluxe en Caracas, me vuelven a hacer la misma pregunta... así que me pareció una señal: hay que integrar esto en Dinámica, aunque no lo usemos, de manera transparente al programador, siguiendo los principios del framework, para que se pueda usar de forma declarativa sin escribir ni una línea de código.

Los servicios de mensajería que ataca JMS se refieren específicamente a comunicación entre aplicaciones o componentes, y de forma asíncrona, no es como enviar email. Estos servicios están pensados para intercambiar data entre procesos, pero de forma desacoplada, a través de una cola de mensajes, donde uno envía y el otro recibe, sin estar conectados entre sí.

Para mayor información sobre JMS leer este tutorial.

De manera que procedimos a bajar el servidor de mensajería más simple que conseguimos: OpenJMS, nos gustó mucho para las pruebas por lo fácil que fue ponerlo a andar sin saber nada del tema, aunque el producto lamentablemente está descontinuado, pero disponible en open source sin embargo.

Extendimos el framework con una clase genérica, que al heredar de GenericTableManager puede ejecutar todo tipo de tareas de lógica de negocios contra una base de datos SQL sin necesidad de programar, pero además con una simple configuración adicional también puede enviar un mensaje a una cola en un servidor JMS:


El nuevo módulo o plugin quedó integrado de manera natural dentro de la arquitectura MVC de Dinámica, permitiendo su uso de forma declarativa:


Todos los parámetros de entrada que recibe un proceso server-side, una vez validados pueden ser inyectados automáticamente en la plantilla de texto del mensaje y luego enviado a la cola, justo después de haber ejecutado la lógica de negocios contra el servidor SQL.

Todo el asunto fue incorporado como un aporte para los suscriptores de Dinámica Deluxe, incluyendo un documento que registra de forma estructurada el conocimiento adquirido:


Bueno, con esto finalizamos nuestra aventura con las colas, por ahora. Sirvió también para demostrar la extensibilidad de Dinámica para incorporar APIs específicos dentro de la lógica de negocios, y si se le pone un poquito de inteligencia, puede ser un plugin genérico, configurable y reutilizable sin programar.

Saludos,
El Team Dinámica

No hay comentarios: