domingo, 17 de noviembre de 2013

WSO2. CEP. II - Input Event Adaptors

Hola buenas,

  Ya que este es mi primer post me voy a presentar primero, me llamo Andrés Gómez Ferrer y soy estudiante de ingeniería de telecomunicación en la Universidad de Sevilla, España.

    Introducción

  Como ya os advirtió Jorge en el último post acerca de WSO2-CEP, vamos a hablar para comenzar de la primera parte de CEP, ya que podemos decir que esta separada en módulos como se puede ver en la figura1.

Figura1. Modulos de CEP.

  En este post nos vamos a centrar concretamente en el modulo de entrada o también conocido como "Input Event Adaptor". El software de CEP trae por defecto en su paquete los siguientes adaptadores:

  1. email
  2. jms
  3. ws-event
  4. ws-event-local
  5. wso2event
  Donde podemos encontrar más información acerca de ellos en el siguiente enlace: Input Event Adaptors

  Aparte de estos adaptadores, también podemos crear los nuestros personalizados que posteriormente se integran en el sistema con bastante comodidad. Esto quizás pueda ser más interesante y ya que la información es algo más escasa en la web nos detendremos algo más, de todas formas aquí os dejo el enlace al manual: Custom Event Adaptors .

  Comenzar mencionando que hay dos tipos de Custom Event Adaptors, los de entrada y los de salida en este post vamos a analizar únicamente los de entrada, y posteriormente en otro post comentaremos los de salida.

    Preparación del entorno.

  Mi recomendación para trabajar con los custom event adaptors es utilizar un IDE como puede ser ECLIPSE o NETBEANS ambos software libre y fácil de encontrar. El adaptor de entrada se crea a partir de un OGSI Bundle, por lo que debemos empezar creando un proyecto de este tipo. Personalmente trabajo con netbeans y es fácilmente crear un proyecto MAVEN del tipo OGSI Bundle, si usamos MAVEN deberemos incluir en el pom.xml el siguiente repositorio:

<repositories> 
     <repository> 
          <id>wso2-maven2-repository</id> 
          <name>WSO2 Maven2 Repository</name> 
          <url>http://dist.wso2.org/maven2</url> 
     </repository> 
</repositories>

y las siguiente dependencia:

<dependency>
         <groupId>org.wso2.carbon</groupId>
         <artifactId>org.wso2.carbon.event.input.adaptor.core</artifactId>
         <version>1.0.0</version>
 </dependency>

  Que sera necesario para acceder a las librerías que usa el adaptor, por otro lado si preferimos incluir las librerías como jar, también las podemos encontrar en <CEP_HOME>/repository/components/plugins/org.wso2.carbon.event.input.adaptor.core_1.X.X.jar

    Profundizando en el código

Tenemos que crear una clase que extienda de la clase "AbstractInputEventAdaptor", la cual contiene los siguientes métodos:

-> Metodo que devuelve un string con el nombre que se mostrada en la web de gestión de CEP.
String getName()

-> Devuelve una lista con los tipos de mensajes soportados para el event builder, pueden ser:
       * JSON
       * MAP
       * TEXT
       * XML
       * WSO2EVENT 
List<String> getSupportedInputMessageTypes()

-> Metodo que se llama a la hora de ejecutar. Normalmente se usa para indicar las Propiedades.
void init()

-> Se definen la características configurables desde la web para tu custom adaptar.
List<Property> getInputAdaptorProperties()

-> Se definen la características configurables desde el eventBuilder.
List<Property> getInputMessageProperties()

-> Es el metodo que se va a ejecutar y el cuerpo de nuestro custom adaptor, se llama al instanciarlo.
 String subscribe(
            InputEventAdaptorMessageConfiguration inputEventAdaptorMessageConfiguration,
            InputEventAdaptorListener inputEventAdaptorListener,
            InputEventAdaptorConfiguration inputEventAdaptorConfiguration,
            AxisConfiguration axisConfiguration)

-> Es el metodo que se va a ejecutar cuando se cierre el wso2-CEP.
void unsubscribe(
            InputEventAdaptorMessageConfiguration inputEventAdaptorMessageConfiguration,
            InputEventAdaptorConfiguration inputEventAdaptorConfiguration,
            AxisConfiguration axisConfiguration, String s)

  Vamos a centrarnos algo más en el metodo suscribe donde ya que es el corazón de nuestro adaptor, comenzamos mencionando algunos de los parámetros que tienen mayor intereses.

  * inputEventAdaptorMessageConfiguration: Obtenemos la configuración introducida en la ventada de eventBuilder para ello usamos el metodo getInputMessageProperties().

  * inputEventAdaptorListener: Podemos considerarlo la puerta de enlace entre nuestro adaptador y CEP, ya que mediante su metido .onEvent() se envían los mensajes a CEP.

  * inputEventAdaptorConfiguration: Obtenemos la configuración introducida en la ventada de eventBuilder para ello usamos el metodo getInputProperties().

  Después de configurar a nuestro gusto el adaptor, tenemos que crear una clase que implemente "InputEventAdaptorFactory" la cual solo contiene un metodo llamado: AbstractInputEventAdaptor getEventAdaptor() el cual devuelve una instancia creada de la clase de nuestro adaptor "AbstractInputEventAdaptor".

En el próximo post, seguiremos hablando de los Input Event Adaptors y analizaremos a fondo un Custom Adaptors para apache-Kafka-0.8.1 con zookeeper.

Un saludo,

Andrés Gómez

1 comentario:

  1. Excelente aporte...creo que el mayor potencial del CEP de WSO2 está en su uso a través de los "custom event adaptors"...Si el tuyo será opensources pues esperamos el código cuando lo termines para revisarlo.

    ResponderEliminar