Procesador Inteligente de Eventos (IEP) con OpenESB

1
13140

Procesador Inteligente de Eventos (IEP) con OpenESB

Indice

  1. Procesador Inteligente de Eventos (IEP) con OpenESB
    1. Introducción
    2. Ejemplo: caso de uso de estadísticas de venta
    3. Implementación con IEP – Intelligent Event Processor de OpenESB
      1. Fase 1: entrada de eventos
      2. Fase 2: fitrar eventos
      3. Fase 3: correlación de eventos
      4. Fase 4: almacenar resultados
    4. Desplegar y probar el proyecto en el ESB
    5. Análisis de los resultados
    6. Conclusión

Introducción

En la actualidad los sistemas empresariales se caracterizan por el manejo intensivo de información procedentes de sistemas internos y externos. La gestión de toda esa misma información ha de ser automatizada en lo posible con infraestructuras adecuadas. SOA tiene presente este aspecto, introduciendo lo que se conoce como la Gestión Compleja de Eventos, y que trata de procesar la información en base a eventos de negocio mediante la implantación de las soluciones IT adecuadas.

OpenESB ofrece esta gestión mediante el Procesador Inteligente de Eventos (IEP, Intelligent Event Processor), y en este tutorial vamos a conocer su funcionamiento de manera práctica. Los requisitos para realizar el ejemplo están descritos en el tutorial: OpenESB 2.1. Instalación e introducción al entorno.

Ejemplo: caso de uso de estadísticas de venta

Supongamos que una empresa quiere obtener en todo momento indicadores del estado de su negocio. En concreto le interesa controlar las ventas no rentables del último mes: aquellos productos cuyo importe es menor de 60 euros y han sido devueltos en las dos primeras semanas de garantía. Las partes de la empresa que generan los eventos son:

  • Eventos de venta: venta online mediante página web
  • Eventos de devolución: centro de atención al cliente

El código fuente del ejemplo desarrollado en NetBeans puede descargarse aquí: IEP-OpenESB-adictosaltrabajo.zip, y el proyecto de prueba con soapUI aquí: Prueba Procesador Eventos Ventas.zip

Implementación con IEP – Intelligent Event Processor de OpenESB

OpenESB permite, a través de su editor visual en NetBeans, modelar un diagrama para el manejo de los eventos. Una vez preparado, se despliega en GlassFish ESB y se pone en ejecución, volcando la información procesada en una base de datos que podemos consultar.

En NetBeans creamos un nuevo proyecto IEP desde File | New Project | SOA | Intelligent Event Processing Module:

Intelligent Event Processing Module de OpenESB
Intelligent Event Processing Module de OpenESB

El nombre del proyecto será ProcesadorEventosVentas. Creamos un nuevo procesador, pulsando con el botón derecho sobre el nombre del proyecto | New | Intelligent Event Processor:

Creamos un procesador de eventos
Creamos un procesador de eventos

y lo denominamos AnalisisVentasRentables. Veremos que se nos abre el editor IEP con una paleta de operadores que permitirán manipular los eventos: filtrar, agregar, componer, interseccionar, almacenar,etc. Su utilización dotará al procesador de la inteligencia que reza su nombre:

Paleta de operadores de eventos
Paleta de operadores de eventos

Fase 1: entrada de eventos

Todo procesador tiene que tener al menos un punto de entrada de los eventos. De sección Input de la paleta arrastramos al editor dos operadores Stream Input, Hacemos doble click para editar cada uno de ellos. En el primero recogeremos los eventos de venta mediante página web:

Input de eventos de venta Online
Input de eventos de venta Online

El segundo servirá de entrada de eventos de devolución:

Entrada de los eventos de devolucion
Entrada de los eventos de devolución

Fase 2: fitrar eventos

A continuación filtramos los eventos por ventanas de tiempo. Para ello arrastramos de la paleta dos operadores Stream Converter de tipo Time Based Window. Enlazamos cada Input con su filtro de tiempo, pulsando sobre la fecha de cada icono y arrastrándola al operador de tiempo:

Filtrado de eventos por ventanas de tiempo
Filtrado de eventos por ventanas de tiempo

Editamos el filtro asociado a EventosVentaOnline y cambiamos el nombre y el periodo de tiempo:

Eventos en el ultimo mes
Eventos de venta en el ultimo mes

Y el filtro de devoluciones:

Devoluciones en periodo de garantia
Devoluciones en periodo de garantía

Fase 3: correlación de eventos

Ahora tenemos que correlacionar los eventos que proceden de las ventas y reclamaciones, pues lo harán cada uno en un orden y frecuencia imprevisibles, que dependerá únicamente del mercado. Arrastramos un operador Relation Map de la categoría Correlation And Filter, y lo enlzamos con las ventanas de tiempo:

Correlamos los eventos de distinto origen
Correlamos los eventos de distinto origen

Editamos el operador RelationMap0. Las variables que aparecen en la sección SELECT y WHERE pueden introducirse fácilmente arrastrando su nombre desde el panel izquierdo y soltándolo en la zona de texto destino.

Correlacion de eventos de distinto origen
Correlación de eventos de distinto origen

Fase 4: almacenar resultados

Finalmente vamos a almacenar los resultados en base de datos (utilizaremos Java DB, que ya está con OpenESB y configurada con IEP). Introducimos en el editor un operador Table Output, de la categoría Output y enlazamos el de correlación:

Almacenamos los resultados procesados en base de datos
Almacenamos los resultados procesados en base de datos

Editamos el operador enlazado a la correlación VentasNoRentables:

Tabla de base de datos de ventas no rentables
Tabla de base de datos de ventas no rentables

Guardamos los cambios en el editor. Compilamos todo pulsando con el botón derecho sobre el nombre del proyecto ProcesadorEventosVentas | Clean And Build. Se habrá generado un descriptor WSDL del procesador, como se aprecia en la imagen:

Estado final del proyecto IEP en OpenESB
Estado final del proyecto IEP

Desplegar y probar el proyecto

Tal como se explica en otros tutoriales (e.g. Tutorial de BPEL con OpenESB (II)), para probar un módulo SOA de OpenESB es necesario que pertenezca a una aplicación compuesta de JBI. Para ello creamos en NetBeans un proyecto Composite Application desde el menú File | New Project | SOA | Composite Application, y le damos el nombre AplicacionIEPVentas. Sobre la carpeta JBI Modules pulsamos botón derecho | Add JBI Module y en la ventana emergente seleccionamos el proyecto ProcesadorEventosVentas y pulsamos en Add Project JAR Files. Finalmente compilamos el proyecto, pulsando con botón derecho sobre su nombre AplicacionIEPVentas | Clean and Build. El aspecto final será:

Composite Application de SOA para desplegar el IEP
Composite Application de SOA para desplegar el IEP

Teniendo el servidor GlassFish V2 previamente arrancado, desplegamos el proyecto AplicacionIepVentas pulsando de nuevo botón derecho | Deploy. El proyecto se habrá desplegado en el contenedor JBI:

Procesador de eventos desplegado y listo para su uso
Procesador de eventos desplegado

En este momento los operadores de entrada que hemos editado antes (EventosVentaOnline y EventosDevolucionVenta) estarán expuestos como dos operaciones de un webservice, y podrán ser invocados como tales. Su WSDL se encuentra publicado en http://localhost:12100/service/AnalisisVentasRentables_iep?WSDL

Descriptor del servicio de invocacion al procesador de eventos
Descriptor del servicio de invocación al procesador de eventos

La explicación es que el ESB de GlassFish ESB no intercepta los eventos para dárselos al procesador de eventos, sino que tenemos que invocar al procesador nosotros de manera explícita (hay alguna excepción con BPEL que sí implementa la API). La intercepción de eventos a través del enrutador de mensajes de JBI se introducirá en la versión de OpenESB v3 (Fuji). Hay una demo interesante al respecto en el siguiente screencast de Sun: Fuji Interceptors.

Para probar el procesador de eventos, creamos con soapUI una suite de pruebas funcionales (ejemplo de uso: Pruebas funcionales de servicios web con soapUI) que emita compras de cuatro clientes:

  • Cliente 1: Adquiere un teléfono (45 €), una televisión (120 €), una lámpara (34€) y un libro (18 €), pero luego devuelve todo en garantía menos el libro.
  • Cliente 2: Compra un libro (15 €) y un CD de música clásica (22 €). No devuelve nada
  • Cliente 3: Compra 2 peliculas distintas en DVD, cada una de 30 € y una videoconsola (340 €). Devuelve una de las dos películas.

Ejemplo de compra del cliente 1 de un teléfono:

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" 
  xmlns:anal="AnalisisVentasRentables_iep">
   <soapenv:Header/>
   <soapenv:Body>
      <anal:EventosVentaOnline_MsgObj>
         <producto>telefono</producto>
         <ingreso>45</ingreso>
         <idCliente>0001</idCliente>
         <fechaVenta>2009-12-12</fechaVenta>
      </anal:EventosVentaOnline_MsgObj>
   </soapenv:Body>
</soapenv:Envelope>

Ejemplo de devolución del cliente 1 del telefono:

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" 
  xmlns:anal="AnalisisVentasRentables_iep">
   <soapenv:Header/>
   <soapenv:Body>
      <anal:EventosDevolucionVenta_MsgObj>
         <producto>telefono</producto>
         <idCliente>0001</idCliente>
         <motivo>No hace juego con los muebles</motivo>
         <fechaDevolucion>2009-12-20</fechaDevolucion>
      </anal:EventosDevolucionVenta_MsgObj>
   </soapenv:Body>
</soapenv:Envelope>

Ejecutamos los casos de prueba:

Juego de pruebas de compras y  devoluciones ejecutadas
Juego de pruebas de compras y devoluciones ejecutadas

Análisis de los resultados

Desde la pestaña Services conectamos con el esquema de la base de datos de Java DB: iepseDB (IEP Service Engine DataBase). Para ello pulsamos con el botón derecho sobre Databases | New Connection:

Conexion a base de datos desde NetBeans
Conexión a base de datos desde NetBeans

Completamos el siguiente diálogo (contraseña iepseDB):

Datos de conexion a la base de datos de iepseDB
Datos de conexión a la base de datos de iepseDB

Seleccionamos el esquema iepseDB
Seleccionamos el esquema iepseDB

Explorando la nueva conexión vemos que existe la tabla VENTAS_NO_RENTABLES:

Tabla de ventas del procesador de eventos
Tabla creada por el procesador de eventos

Y el contenido es el esperado; las ventas del teléfono, la lámpara y el DVD de Titanic no han sido rentables:

Se han procesado los eventos de manera correcta
Se han procesado los eventos de manera correcta

Conclusión

En el tutorial hemos desarrollado un ejemplo sencillo pero que pretende ilustrar la lógica y mecanismos básicos en la gestión de eventos. Las empresas con un nivel de madurez elevado de SOA hacen un uso muy eficiente de la información de negocio que conllevan los eventos; de esta manera no sólo las decisiones de negocio sino también la propia infraestructura tecnológica son capaces de reconfigurarse conforme a determinadas políticas o lograr atender a demandas de mercado en menor tiempo.

Autentia colabora con importantes compañías aportando consultorías tecnológicas de calidad e impartiendo formación de SOA y arquitecturas empresariales. Si le interesa para su empresa, no dude en contactarnos: info@autentia.com

 

1 COMENTARIO

  1. El OpenESB está realmente bien pero la verdad es que me preocupa bastante su futuro… ahora que es Oracle quien lleva la sartén por el mango y dado que ellos tienen un ESB de pago ¿que crees que pasará con el OpenESB v3? ¿verá la luz o no? (ya lleva casi dos meses de retraso sobre la fecha… y no hay movimiento en el planning del proyecto desde hace mas de un mes)… no pinta bien el tema… ¿tu que crees?

DEJA UNA RESPUESTA

Por favor ingrese su comentario!

He leído y acepto la política de privacidad

Por favor ingrese su nombre aquí

Información básica acerca de la protección de datos

  • Responsable:
  • Finalidad:
  • Legitimación:
  • Destinatarios:
  • Derechos:
  • Más información: Puedes ampliar información acerca de la protección de datos en el siguiente enlace:política de privacidad