04 febrero, 2012

BAM - Busines Activity Monitoring

BAM puede proporcionar análisis en tiempo real de la información de negocio de fuentes transaccionales incluyendo servicios web, colas de mensajes, etc. permite correlacionar eventos heterogéneos y obtener patrones de comportamiento. 

Proporciona una plataforma que permite optimizar los procesos de negocio, a través de BAM se pretende incrementar la competitividad y la toma rápida de decisiones, donde la visualización de la información juega un papel fundamental. 

En el mundo empresarial continuamente se produce información acerca de las ventas, la producción, la logística...y desafortunadamente en muchos casos situaciones anómalas o críticas no son conocidas hasta que es demasiado tarde para actuar.

La solución a esta problemática pasa por disponer de indicadores apropiados (Indicadores Clave de Rendimiento  - KPI) a la actividad de negocio, capturar dichos datos que los componen en tiempo real e integrarlos para su visualización.

Como en un proceso de negocio normalmente se suele manejar gran número de indicadores, tratar toda esa información de forma numérica puede ser poco trivial, se suele representar gráficamente en forma de cuadro de mandos o dashboard, que son una interfaz gráfica de usuario que permite dar una visión global y en detalle de los indicadores de negocio más importantes a tiempo real.
La visualización de la información ayuda a identificar patrones de comportamiento de negocio y relaciones de causa-efecto que de otra forma sería difícil de identificar.

El cálculo de los indicadores se complementa con un conjunto de reglas que permiten lanzar alarmas cuando muestran una tendencia anómala. 

BAM se compone de:
  • Integración de aplicaciones y datos: servicios de gestión de sucesos, repositorio de mensajes, etc
  • Procesamiento de datos en tiempo real
  • Entorno de visualización
Para los casos en los que se desee detectar excepciones de negocio de manera proactiva, ya sea antes o justo después de producirse, no podemos basarnos únicamente en sistemas tradiciones de Business Intelligence (BI). BAM puede utilizar potencialmente datos analizados a partir de un sistema de BI para obtener los umbrales de los datos que analiza. 
También se puede integrar con sistemas de minería de datos y herramientas OLAP para proporcionar capacidades de vigilancia. Por ejemplo, si una herramienta de minería de datos informa de una lista de cuentas de presunto fraude, esta información puede ser alimentada en una herramienta de BAM y el sistema se asegurará de que las cuentas sean congelada y se lancen las alarmas pertinentes.

Los procesos de negocio pueden ser muy complejos, pueden requerir comunicación entre múltiples actores y sistemas. Para supervisar estos sistemas se necesita de una tecnologías que controle esa complejidad en tiempo real y de manera inteligente. CEP - Complex Event Processing permite tratar esa complejidad. Dispone de capacidades de alto rendimiento, baja latencia, cálculos complejos y escalabilidad. El motor CEP es el componente ideal para dar sentido a los diferentes eventos que se generan .

Podemos decir que BAM es una capa intermedia entre los responsables del negocio y el flujo de información en el proceso de negocio. El usuario no sólo ve la información si no que además es capaz de reaccionar y ejecutar acciones en caso de ser necesarias.

Además de un motor CEP, son necesarios más componentes:
  • Decision Support - Un soporte para la toma de decisiones, que a través de reglas sea capaz de interpretar y reconocer situaciones. 
  • Action-ready Dashboard - Cuadros de mando Action-Ready. Las decisiones generadas se transforman en acciones y se integran en el cuadro de mando. 
  • Respuestas / Acciones - Las respuestas o acciones indicadas por el usuario son capturadas dentro del sistema BAM y se envían a los sistemas pertinentes para su ejecución en forma de alarmas.
  • Adaptación - Las respuestas o acciones indicadas por el usuario son integradas de nuevo en el sistema de decisión para mejorar el soporte en la toma de decisiones y en la generación de la "respuesta - acción" en el cuadro de mando. 
Dejo aquí una primera visión de qué es un sistema BAM.

Usando OXM de Spring 3.0 con JAXB

OXM (Object to XML Mapping) permite convertir un documento XML desde/hacia un objeto.  Este proceso de conversión también se conoce como serialización XML o enlace de datos.  Un marshaller serializa un objeto a XML, y un unmarshaller deserializa un XML a un objeto.

Características que presenta:
  • Fácil de utilizar
  • Interfaces consistentes
  • Jerarquía de excepciones consistentes
Spring ofrece una abstracción consistente para los marcos más populares de Java, permitiendo cambiar fácilmente de uno a otro. Soporta JaxB, Castor, XMLBean, JiBX y XStream.


JAXB es un framework de mapeo objeto / XML compatible con el esquema XML de W3C. Spring proporciona Jaxb2Marshaller que utiliza JAXB 2.0 API.


La configuración para el uso de Jaxb2Marshaller es:

<beans>
    <bean id="jaxb2Marshaller" class="org.springframework.oxm.jaxb.Jaxb2Marshaller">
        <property name="classesToBeBound">
            <list>
                <value>myapp.springrest.domain.Movie</value>                
            </list>
        </property>
    </bean>
</beans>
 

Los pasos para utilizar OXM serían
  • Crear un proyecto y modificar el pom.xml para incluir la siguiente dependencia:
        <dependency>           
            <groupId>org.codehaus.castor</groupId>
            <artifactId>castor</artifactId>
            <version>1.2</version>
        </dependency>
        <dependency>
            <groupId>xerces</groupId>
            <artifactId>xercesImpl</artifactId>
            <version>2.9.1</version>
        </dependency>
 

  • Crear la clase a serializar, para utilizarlo con JaxB, es necesario incluir la anotación @XmlRootElement(name="example")
  • Crear interfaz O/X Mapper
  • Crear la clase de implementación para la interfaz
  • Incluir el bean con la clase de implementación en el fichero applicationContext.xml , de esta forma podremos utilizar nuestros propios métodos de marshaller y unmarshaller
<?xml version="1.0" encoding="UTF-8"?>
<beans>
    <context:component-scan base-package="com.unitedcoders.examples.spring.oxm.beans" />
    <bean id="oxMapper" class="com.unitedcoders.examples.spring.oxm.mapper.OxMapperImpl">
        <property name="marshaller" ref="jaxbMarshaller" />
        <property name="unmarshaller" ref="jaxbMarshaller" />
    </bean>
    <oxm:jaxb2-marshaller id="jaxbMarshaller">
        <oxm:class-to-be-bound name="com.unitedcoders.examples.spring.oxm.beans.Person" />
    </oxm:jaxb2-marshaller>
</beans>

  • Creamos una clase Main para comprobar
Podéis encontrar más información en este post