lunes, 7 de diciembre de 2015

WSO2 BRS: Uso de tablas de decisión en reglas de negocio.

image

La herramienta WSO2 BRS usa Drool como motor de reglas, lo que nos permite usar las funcionalidades de tablas de decisión basadas en documentos Excel en aquellos casos en que esta sea la mejor variante para implementar un servicio de reglas.

En una entrada de Chathurika Erandi aborda este escenario a partir de un documento excel que usa las mismas reglas descritas en la documentación de la herramienta. La entrada se puede consultar aquí.

Para probar el ejemplo de la entrada cree un documento excel a partir de la imagen plasmada en la entrada y que muestro a continuación.

newdtable

En este excel se definieron las siguientes reglas:
  • Una orden de la compañía A es aceptada si la cantidad es mayor que 10.
  • Una orden de la compañía B es aceptada si la cantidad es mayor que 200 y el precio es mayor que 50.
  • Una orden de la compañía C es aceptada si el precio es mayor que 100.
  • Una orden de la compañía A no es aceptada si la cantidad es menor o igual que 10.
  • Una orden de la compañía B no es aceptada si la cantidad es menor o igual que 200 y el precio es igual o menor que 50.
  • Una orden de la compañía C no es aceptada si el precio es menor o igual que 100.

El siguiente paso fue crear un proyecto en el WSO2 Developer Studio, muestro a continuación como se hace:

Se abre el WSO2 Dashboard y se selecciona la opción Business Rules Service Project.

image

Se selecciona la opción de crear un nuevo proyecto:

image


Y se llenan los datos solicitados del proyecto:

image


Al dar clic en Finish se crea un proyecto con la siguiente estructura. Tengan en cuenta que ya he creado un paquete y agregado las clases necesarias para representar los datos a manejar y las posibles respuestas a devolver por el servicio.


image


Cuando el proyecto es creado se abre automáticamente el fichero service.rsl tal como se muestra a continuación:

image


A continuación debemos proceder al llenado de la sección de Reglas, dando clic en el botón Add. Aquí debemos tener en cuenta que usaremos un fichero excel para definir las reglas, en forma de una tabla de decisión.

image

En la pestaña file damos clic en Browse y cargamos el excel que previamente debió haberse guardado en <Project>/src/main/ruleservice/conf, quedando como sigue:

image


Luego procedemos a crear la operación dando clic en el botón Add. Debe quedar como sigue:

image


Y eso es todo. De esa manera podemos tener ya listo nuestro servicio.

Para terminar esta parte solo resta ir a la raíz del proyecto y ejecutar el siguiente comando maven:
mvn clean install y con eso en la carpeta target tendremos creado el fichero .aar que se debe desplegar en el WSO2 BRS.

Una vez realizado el proyecto procedí a desplegarlo en el WSO2 BRS y me encontré con varios errores:

Error 1:
org.wso2.carbon.rule.common.exception.RuleConfigurationException: Error during creating rule set: [8,34]: [ERR 101] Line 8:34 no viable alternative at input '")
  
        quantity > 10

  
    then

  
        OrderAccept orderAccept = new OrderAccept(); orderAccept.setMessage("Accepted order for: " + placeOrder.getQuantity() + "stock of " + placeOrder.getSymbol() + " at$ " + placeOrder.getPrice()); insertLogical(orderAccept);

  
end 



// rule values at C11, header at C5



Error 2:


[18,11]: [ERR 102] Line 18:11 mismatched input '>' in rule "'AcceptRules' dialect 'mvel'_11"
  
[28,8]: [ERR 102] Line 28:8 mismatched input '>' in rule "'AcceptRules' dialect 'mvel'_12"

  
[37,11]: [ERR 102] Line 37:11 mismatched input '<=' in rule "'Rejectrules'_19"

  
[46,11]: [ERR 102] Line 46:11 mismatched input '<=' in rule "'Rejectrules'_20"

  
[56,8]: [ERR 102] Line 56:8 mismatched input '<=' in rule "'Rejectrules'_21"

  
[0,0]: Parser returned a null Package


Los problemas encontrados se pueden detallar como sigue:
  1. No hace falta que los símbolos estén entre comillas simples. Al inicio pensé que ese era el error y probé sin las comillas o con las comillas dobles y no fue la solución.

  2. Falta la definición del objeto que contiene a los atributos quantity y price.

  3. En el action de la tabla que contiene las reglas de rechazo se muestra una línea de codigo con el siguiente texto: “retract($placeOrder);” Fue necesario removerla para que se mostrada el mensaje de respuesta.

En el excel que muestro a continuación, solo una imagen parcial, ya estos problemas fueron resueltos. Pueden comparar el excel de la imagen del blog contra esta imagen o el excel que les comparto en el proyecto para que vean los ajustes a realizar.


image


 Para terminar les comparto el proyecto en la siguiente ubicación para que ustedes mismo creen el .aar y lo desplieguen en el WSO2 BRS.


En las pruebas que realicé luego de desplegar el proyecto pude apreciar que cuando se cumplía solo una de las condiciones de la regla para la compañía B no se devolvía un resultado y esto se debía a que en las reglas para devolver un resultado de no cumplimiento no se contemplaba esta posibilidad, solo devolvía resultado cuando se cumplían ambas reglas.


Para resolver este problema agregué 2 reglas y 2 condiciones nuevas como se puede apreciar a continuación.


image


De esta manera se puede de manera muy fácil manejar tablas de decisión usando en excel y la suite de WSO2.


Quisiera comentar que me fue de mucha utilidad durante el desarrollo modificar el excel en caliente con los cambios necesarios, esto llevaba a un redespliegue del servicio automáticamente y podía seguir probando.


Espero les sea de utilidad.

jueves, 12 de noviembre de 2015

La seguridad en WSO2 ESB 4.9.0

image

En esta entrada estaré mostrando la manera correcta de hacer seguros los servicios en la suite de WSO2 partiendo del uso de la nueva versión de WSO2 ESB 4.9.0 y del WSO2 Developer Studio 3.8.0.

Como ya se ha explicado las facilidad de asignarle la seguridad a un servicio proxy desde la consola web del WSO2 ESB ha desaparecido y ahora se debe realizar desde el Developer Studio.
Comenzaremos a partir de un servicio proxy sencillo creado en el DVS, como pueden observar en la imagen inicial de esta entrada. Contiene 2 mediadores logs, uno en la sencuencia de entrada y otro en la de salida y un endpoint apuntando a un servicio desplegado en el WSO2 Application Server.

En este enlace  les dejo el proyecto del Synapse y un proyecto que contiene el recurso usado hasta el momento, el WSDL del servicio desplegado en el WSO2 AS, junto con el .aar a desplegar.

A partir de aquí el servicio sin seguridad se encuentra desplegado en el WSO2 ESB y es completamente funcional. Queda agregarle la seguridad. Los pasos son los siguientes:

Paso 1: Crear la política de seguridad.
Crearemos un recurso del registro a partir de un template tal como se muestra en la siguiente imagen.

image

Seleccionen el template de WS-Policy y definan el proyecto de Resources donde van a guardar este nuevo recurso.

image

Una vez que se da clic en Finish se visualiza la siguiente pantalla:

image

Se aprecian los 2 artefactos existentes, el WSDL del servicio backend y la política recién creada a partir del template. Procedemos a abrir esta política dando doble clic en el fichero generado en el proyecto.


image

Verán que se abre una ventana para seleccionar la política de seguridad a aplicar, en nuestro caso es la de UserNameToken.

image

De manera curiosa pueden dar clic en User Roles y si tienen el WSO2 ESB Online cargar los roles existentes y seleccionar aquellos roles a los que le quieran dar acceso a este servicio.

image

Una vez realizado esta selección ya la política está creada y lista para ser usada.


Paso 2: Asignar la política de seguridad al servicio.
Este paso es muy simple. Debemos ir a las propiedades del servicio proxy y marcar como “true” la que indica en la sección de Security, la propiedad Security Enabled como se muestra en la imagen más abajo.

image

Luego en la misma sección vamos a Service Policies y buscamos en el proyecto del registro la política recién creada.

image
OJO: a la hora de realizar el despliegue tengan presente que en el proyecto deben marcar que esta nueva política se despliegue en el ESB, no en el GREG como se crea por defecto.

Una vez desplegado el servicio SecurityTest lo veremos en el DashBoard:

image


Paso 3: Pruebas.

Podemos probar el servicio usando la funcionalidad del TryIt.

image

Y también usando el SOAPUI:

image
En este caso al no especificar el header de seguridad(timestamp + user/name token) la invocación falla.

Procedemos a incluir el header de seguridad en el SOAPUI:

image


Y al invocar al servicio obtenemos una respuesta exitosa.

image

Les dejo a continuación un adjunto con los proyectos actualizados.

Espero les sea de utilidad.

martes, 20 de octubre de 2015

WSO2 Developer Studio: nueva versión 3.8.0.

image

Hola a todos.

Hoy les traigo una buena nueva.

Acaba de ser liberada la versión 3.8.0 del WSO2 Developer Studio.

Pueden encontrar información de este release aquí y su página de descarga aquí.

jueves, 24 de septiembre de 2015

WSO2 IDE Developer Studio. Ejemplo de uso.

image

En esta entrada quiero como se dice por acá, “matar 2 pájaros de un tiro” así que aprovecho un ejemplo de los muchos que están definidos en el WSO2 ESB y explico como desarrollarlo usando el IDE de WSO2, el Developer Studio.

Para este caso en particular, usaré el ejemplo 751, que nos permite adentrarnos en como usar los templates para definir secuencias y usarlas en un servicio proxy que implementa el patrón Split/Aggregate. El ejemplo 751 se deriva del ejemplo 400 sin templates

La idea es muy sencilla, queremos enviar un mensaje que en su payload contiene varios elementos similares en cuanto a su estructura pero con diferente contenido. Por cada uno de estos elementos queremos iterar y hacer la invocación a un servicio, las respuestas a dichas peticiones deben ser recuperadas por el ESB y agregadas hasta obtener un mensaje que contenga todas las respuestas recibidas.

Un ejemplo de mensaje de entrada es el siguiente:
<?xml version='1.0' encoding='UTF-8'?>
   <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
      <soapenv:Header xmlns:wsa="http://www.w3.org/2005/08/addressing">
         <wsa:To>http://localhost:5555/services/SplitAggregateProxy</wsa:To>
         <wsa:MessageID>urn:uuid:a234aff3-c645-4bac-8557-4372e9363963</wsa:MessageID>
         <wsa:Action>urn:getQuote</wsa:Action>
      </soapenv:Header>
      <soapenv:Body>
         <m0:getQuote xmlns:m0="http://services.samples">
            <m0:request>
               <m0:symbol>IBM</m0:symbol>
            </m0:request>
            <m0:request>
               <m0:symbol>IBM</m0:symbol>
            </m0:request>
            <m0:request>
               <m0:symbol>IBM</m0:symbol>
            </m0:request>
            <m0:request>
               <m0:symbol>IBM</m0:symbol>
            </m0:request>
         </m0:getQuote>
      </soapenv:Body>
   </soapenv:Envelope>

Y el mensaje de salida debe tener una estructura como la siguiente:

<?xml version='1.0' encoding='UTF-8'?>
   <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
      <soapenv:Body>
         <ns:getQuoteResponse xmlns:ns="http://services.samples">
            <ns:return xmlns:ax21="http://services.samples/xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="ax21:GetQuoteResponse">
               <ax21:change>4.012088542808684</ax21:change>
               <ax21:earnings>13.46795609831801</ax21:earnings>
               <ax21:high>-178.2453541108561</ax21:high>
               <ax21:last>181.0176201634284</ax21:last>
               <ax21:lastTradeTimestamp>Tue Sep 22 22:57:00 EDT 2015</ax21:lastTradeTimestamp>
               <ax21:low>-179.93913725956736</ax21:low>
               <ax21:marketCap>-8620998.350687156</ax21:marketCap>
               <ax21:name>IBM Company</ax21:name>
               <ax21:open>-176.56347085172354</ax21:open>
               <ax21:peRatio>-17.917903631277916</ax21:peRatio>
               <ax21:percentageChange>-2.2808226783817926</ax21:percentageChange>
               <ax21:prevClose>-175.90532490036432</ax21:prevClose>
               <ax21:symbol>IBM</ax21:symbol>
               <ax21:volume>7194</ax21:volume>
            </ns:return>
         </ns:getQuoteResponse>
         <ns:getQuoteResponse xmlns:ns="http://services.samples">
            <ns:return xmlns:ax21="http://services.samples/xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="ax21:GetQuoteResponse">
               <ax21:change>-2.450131414478575</ax21:change>
               <ax21:earnings>12.077240152328338</ax21:earnings>
               <ax21:high>189.43591761923946</ax21:high>
               <ax21:last>184.23135540409237</ax21:last>
               <ax21:lastTradeTimestamp>Tue Sep 22 22:57:00 EDT 2015</ax21:lastTradeTimestamp>
               <ax21:low>190.25599396746426</ax21:low>
               <ax21:marketCap>-4659673.483194811</ax21:marketCap>
               <ax21:name>IBM Company</ax21:name>
               <ax21:open>189.4323001114281</ax21:open>
               <ax21:peRatio>-19.076556985138353</ax21:peRatio>
               <ax21:percentageChange>1.3385382641199597</ax21:percentageChange>
               <ax21:prevClose>-183.04530248819202</ax21:prevClose>
               <ax21:symbol>IBM</ax21:symbol>
               <ax21:volume>17825</ax21:volume>
            </ns:return>
         </ns:getQuoteResponse>
         <ns:getQuoteResponse xmlns:ns="http://services.samples">
            <ns:return xmlns:ax21="http://services.samples/xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="ax21:GetQuoteResponse">
               <ax21:change>-2.7759188649691673</ax21:change>
               <ax21:earnings>-8.64434464779646</ax21:earnings>
               <ax21:high>-155.45059265458414</ax21:high>
               <ax21:last>159.0026910255047</ax21:last>
               <ax21:lastTradeTimestamp>Tue Sep 22 22:57:00 EDT 2015</ax21:lastTradeTimestamp>
               <ax21:low>-158.61618247180033</ax21:low>
               <ax21:marketCap>4.113991018136966E7</ax21:marketCap>
               <ax21:name>IBM Company</ax21:name>
               <ax21:open>-156.0220318241818</ax21:open>
               <ax21:peRatio>23.020000568172797</ax21:peRatio>
               <ax21:percentageChange>1.7496688693602924</ax21:percentageChange>
               <ax21:prevClose>-158.65395524720563</ax21:prevClose>
               <ax21:symbol>IBM</ax21:symbol>
               <ax21:volume>18187</ax21:volume>
            </ns:return>
         </ns:getQuoteResponse>
         <ns:getQuoteResponse x372mlns:ns="http://services.samples">
            <ns:return xmlns:ax21="http://services.samples/xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="ax21:GetQuoteResponse">
               <ax21:change>-2.9541965411380096</ax21:change>
               <ax21:earnings>12.143751209259607</ax21:earnings>
               <ax21:high>69.9594258475836</ax21:high>
               <ax21:last>68.14101070190179</ax21:last>
               <ax21:lastTradeTimestamp>Tue Sep 22 22:57:00 EDT 2015</ax21:lastTradeTimestamp>
               <ax21:low>70.62760392392916</ax21:low>
               <ax21:marketCap>-303514.44638798386</ax21:marketCap>
               <ax21:name>IBM Company</ax21:name>
               <ax21:open>-67.33049800682211</ax21:open>
               <ax21:peRatio>24.510801203367894</ax21:peRatio>
               <ax21:percentageChange>4.591238624436207</ax21:percentageChange>
               <ax21:prevClose>-64.34421694866225</ax21:prevClose>
               <ax21:symbol>IBM</ax21:symbol>
               <ax21:volume>5049</ax21:volume>
            </ns:return>
         </ns:getQuoteResponse>
      </soapenv:Body>
   </soapenv:Envelope>


Veamos como se hace, manos a la obra!!!!


Paso 1: Crear el proyecto en el IDE.


Una vez iniciado el IDE, basado en Eclipse, debemos ir al Dashboard de WSO2.


image


En este dashboard veremos varias facilidades, la que nos interesa ahora es “ESB Config Project”


image


Damos clic y creamos un proyecto nuevo.


image


Definimos un nombre, en mi caso fue “ESB4.9.0SynapseConfig” y al dar clic en Finish tendremos lo siguiente:


image


Como pueden ver tenemos las estructuras para definir los principales artefactos del WSO2 ESB.


Paso 2: Inicio de la creación del proxy.


Guiándonos por el ejemplo procedemos a crear el proxy, al menos su cascaron.


Damos clic derecho encima de “proxy-service” y realizamos las acciones que aparecen en la siguiente imagen.


image


Llegaremos a la siguiente ventana donde definimos el nombre del proxy y el tipo, luego damos clie en Finish.


image


Llegado a este punto ya el proxy está creado en el IDE.


image


Como las secuencias de entrada y salida usan el mediador “call-template” dejaremos el proxy así por el momento y crearemos los template de las secuencias que usaremos.


Paso 3: Creación de las secuencias.


Para crear los template damos clic derecho en “templates” y realizamos las acciones que aparecen en la siguiente imagen.


image


Definimos un nombre, usando lo especificado en el ejemplo y llegamos a la siguiente configuración inicial para el template “aggr_func”


image


Los siguientes pasos involucran agregar los mediadores, para lo cual los invito a hacer uso de la Paleta de componentes que aparece en la imagen de arriba a la izquierda. Deben de tener algo como lo siguiente al terminar.


image

El XML de este template debe ser el siguiente
<template xmlns="http://ws.apache.org/ns/synapse" name="aggr_func">
        <parameter name="aggr_expr"/>
        <sequence>
            <log level="full"/>
            <aggregate>
                <completeCondition>
                    <messageCount min="-1" max="-1"/>
                </completeCondition>
                <onComplete expression="$func:aggr_expr">
                    <log level="full" />
                    <send/>
                </onComplete>
            </aggregate>
        </sequence>
    </template>


Ahora procedemos a crear el template de la secuencia encargada de realizar la iteración. Que nos debe quedar como sigue.


image


El XML de la misma será el siguiente

<template xmlns="http://ws.apache.org/ns/synapse" name="iter_func">
        <parameter name="iter_expr"/>
        <parameter name="attach_path"/>
        <sequence>
            <iterate  xmlns:m0="http://services.samples" preservePayload="true" attachPath="$func:attach_path" expression="$func:iter_expr">
                <target>
                    <sequence>
                        <send>
                            <endpoint>
                                <address uri="http://localhost:9000/services/SimpleStockQuoteService"/>
                            </endpoint>
                        </send>
                    </sequence>
                </target>
            </iterate>
        </sequence>
    </template>


Paso 4: Ajustes finales en el proxy.


Una vez creados los 2 templates ya podemos actualizar nuestro proxy, quedandonos de la siguiente manera.


image


Su XML es el siguiente:

<proxy name="SplitAggregateProxy">
        <target>
            <inSequence>
                <call-template target="iter_func">
                        <with-param xmlns:m0="http://services.samples" name="iter_expr" value="{{//m0:getQuote/m0:request}}"/>
    <with-param xmlns:m0="http://services.samples" name="attach_path" value="{{//m0:getQuote}}"/>
                </call-template>
            </inSequence>
            <outSequence>
                <call-template target="aggr_func">
                        <with-param xmlns:m0="http://services.samples" name="aggr_expr" value="{{//m0:getQuoteResponse}}"/>
                </call-template>
            </outSequence>
        </target>
    </proxy> 


Para probar el proxy debemos seguir las indicaciones descritas en el ejemplo. Pero antes se debe desplegar en el ESB.


Paso 5: Despliegue del servicio.


Debemos crear un nuevo proyecto del tipo “Composite Application Project” haciendo uso del Dashboard del Developer Studio.


image


Seleccionamos la opción “Composite Application Project”


image


Definimos un nombre, y seleccionamos la dependencia de nuestro proyecto del ESB.

Una vez creado este proyecto se nos muestra lo siguiente.


image


Esto nos indica que tanto el proxy como los 2 templates generados serán desplegados en un servidor con el rol de EnterpriseServiceBus.


Ahora procedemos a generar el fichero que contendrá dichos artefactos. Damos clic derecho en el proyecto de “Composite Application Project” y seleccionamos la opción “Export Composite Application Project”.


image 


En la imagen verán que definí la ruta donde se despliegan las aplicaciones de carbon en el ESB, de esta manera tan pronto guarde el proyecto ahí se desplegarán los artefactos si todo ha ido bien.

Damos clic en Next.


image


Esto se queda como está y damos clic en Finish.


Si nos vamos al ESB y listamos los servicios veremos el servicio recién desplegado.


image


Y también comprobamos los templates para las secuencias.


image


De esta manera logramos realizar el despliegue de nuestros artefactos generados en el IDE en el servidor del WSO2 ESB.


Paso 6: Prueba del servicio.

Para probar el servicio primero debemos generar el backend a utilizar. Así que nos vamos a la ubicación [ESB_HOME]\samples\axis2Server\src\SimpleStockQuoteService\, levantamos un terminal y corremos el comando ant.


image


Luego nos vamos a la ubicación [ESB_HOME]\samples\axis2Server y levantamos el servidor de axis2 con el comando: axis2server.bat si estás en Windows, axis2server.sh si estás en Linux.


Para comprobar que el servicio esté corriendo pueden ver su wsdl en la siguiente URL: http://localhost:9000/services/SimpleStockQuoteService?wsdl


Ahora para terminar procedemos a la invocación del proxy. Para esto nos vamos a la ubicación [ESB_HOME]\samples\axis2Client y ejecutamos el siguiente comando:


ant stockquote -Daddurl=http://localhost:8280/services/SplitAggregateProxy -Ditr=4


En este caso no verán mucho que sea de fácil entender, por ese motivo he levantado un TCPMON, y configurado en escucha el puerto 5555 redireccionando para el puerto 8281, que en mi caso es por donde está escuchando el WSO2 ESB, al sumarle 1 a todos los puertos.


ant stockquote -Daddurl=http://localhost:5555/services/SplitAggregateProxy -Ditr=4


image


De esta manera es más fácil visualizar tanto el request como el response. Otra variante es usar el SOAPUI creando el request y especificando el SOAPAction correspondiente “urn:getQuote”


Si algo no les funciona o tienen dudas sobre el trabajo con los mediadores en el IDE me pueden dejar su comentario.

martes, 22 de septiembre de 2015

WSO2 Complex Event Processor: Nueva versión liberada


Como estamos en días de liberaciones de nuevas versiones de las herramientas pertenecientes a la suite de WSO2 aquí les vengo con otra más, bien fresquita.

La versión 4.0.0 del WSO2 Complex Event Processor fue liberada en el día de hoy al igual que su documentación actualizada.


Sus detalles son los siguientes:

New Features

  • [CEP-635] - Integrate Apache Storm into CEP
  • [CEP-852] - Event Simulator with sending multiple events using uploaded files
  • [CEP-879] - MQTT input Event Adapter for CEP
  • [CEP-880] - MQTT output Event Adapter for CEP
  • [CEP-881] - Input Websocket adapter for CEP
  • [CEP-885] - Time Series Regression Extension to Siddhi
  • [CEP-886] - Time Series Forecaster for Siddhi
  • [CEP-887] - Outlier Detection Extension for Siddhi
  • [CEP-888] - Initial storm solution for CEP
  • [CEP-903] - Siddhi - Remove callback from stream functionality
  • [CEP-909] - Input Websocket (with local websocket server) Adapter for CEP
  • [CEP-910] - Output Websocket Adapter for CEP
  • [CEP-911] - Output Websocket Adapter (using local websocket server) for CEP
  • [CEP-942] - Siddhi partition implementation
  • [CEP-945] - Improved Siddhi Query API and Compiler
  • [CEP-958] - Siddhi-core adding support for aggregated attributes
  • [CEP-959] - Siddhi-core supporting extensions
  • [CEP-985] - Stationery Alert is one of the Geo Dashboard features which enable users to recieve alerts if a spatial object stayes in a specified area for a given specified time.
  • [CEP-993] - Exchangeable views between form view and source view when creating event streams
  • [CEP-1017] - cApp support for CEP components
  • [CEP-1018] - Encrypting password fields of Input and Output Adapters
  • [CEP-1028] - File Based Stream Definition Store
  • [CEP-1029] - String Extension for Siddhi
  • [CEP-1030] - Math Extension for Siddhi
  • [CEP-1032] - Integrating Siddhi 3.0.0
  • [CEP-1033] - Adding annotation,partitioning and query grouping support in Storm
  • [CEP-1062] - Cron TimeWindow for Siddhi
  • [CEP-1095] - Domain Specific Execution Manager
  • [CEP-1132] - Improving HA support
  • [CEP-1141] - Geo Dashboard Integration
  • [CEP-1355] - Analytics Dashboard
  • [CEP-1356] - Siddhi Try It Feature
  • [CEP-1357] - JMX monitoring support for CEP
  • [CEP-1358] - Adding Metrics support for CEP

Improvements

  • [CEP-209] - Cleanup SQL & Hazelcast query creation logic
  • [CEP-216] - Optimize Siddhi partitions by chaining per queries together
  • [CEP-391] - Better to specify different email subjects rather than specifying with SOAPAction
  • [CEP-392] - Better if the passwords shown on xml on edit mode be hidden
  • [CEP-537] - Sample with MB (As jms) with CEP
  • [CEP-821] - the way CEP handles if the specified BAM user does not exist needs to improve
  • [CEP-858] - CEP Input/Output Adapter runtime queue,batch size, etc defaults has to go to a config file
  • [CEP-863] - Databases types needs to extensible for event tables like siddhi extension
  • [CEP-872] - Implementing different stream clustering logics to siddhi event processor
  • [CEP-884] - Improve jms input adaptor to pass advanced jms configs
  • [CEP-889] - Blooms Filter for siddhi event tables
  • [CEP-891] - Ability to create event stream based on event structure
  • [CEP-892] - On Fly validation to fields if possible
  • [CEP-965] - Make MySQL Output event adaptor generic for all RDBMS
  • [CEP-969] - issue in validating the parameter count passed
  • [CEP-1010] - Enabling event simulating via data in database
  • [CEP-1011] - Extended Regex Functionality Support for Siddhi
  • [CEP-1021] - Sort Execution Plans and Event Streams in alphabetical order
  • [CEP-1036] - Important Improvements for CEP 4.0.0 (Siddhi)
  • [CEP-1037] - Email Output Event Adapter
  • [CEP-1038] - HTTP Output Event Adapter
  • [CEP-1039] - SOAP Output Event Adapter
  • [CEP-1040] - JMS Output Event Adapter
  • [CEP-1045] - [Event tables] Event tables should support Oracle DBMS
  • [CEP-1046] - JMS Input Event Adapter
  • [CEP-1047] - MQTT Output Event Adapter
  • [CEP-1048] - MQTT Input Event Adapter
  • [CEP-1049] - Email Input Event Adapter
  • [CEP-1051] - Create features for Event Output Adapters
  • [CEP-1052] - Websocket & Websocket-Local Event Output Adapters
  • [CEP-1053] - http input event adapter feature
  • [CEP-1054] - Websocket & Websocket-Local Input Event Adapter
  • [CEP-1055] - SMS Output Event Adapter
  • [CEP-1059] - adding input event adapter features for event receiver
  • [CEP-1060] - Adding cassandra output adapter feature for event publisher
  • [CEP-1063] - Event Flow Improvement
  • [CEP-1065] - Aligning Event Flow with the receiver/publisher architecture
  • [CEP-1071] - Adding event definition pop-up for event receiver and publisher
  • [CEP-1072] - Improve execution plan editor to incorporate new features
  • [CEP-1079] - Adding auto-completion to Siddhi Query Editor
  • [CEP-1080] - Improvements to code mirror syntax highlighting functionality
  • [CEP-1084] - Fixes and improvements for Application Deployer
  • [CEP-1088] - Improve Event Receivers' WSO2 Event mapping to add Stream Name and Version
  • [CEP-1110] - Improve the SOAP Output Adapter to handle advanced config properties
  • [CEP-1139] - Adding samples and integration tests for event publishers and receivers
  • [CEP-1144] - Adding RegEx Support fot Siddhi
  • [CEP-1159] - Add description to the Adapters
  • [CEP-1195] - Connection pooling for JMS publisher
  • [CEP-1197] - Add a cleanup method to remove all artefacts after a test case
  • [CEP-1198] - Default image when there are no data on real time charts
  • [CEP-1200] - Before deleting prompt for "Are you sure you want to delete ?" popup
  • [CEP-1207] - [CEP 4.0.0] - Put a Clear Button to the Event Simulator
  • [CEP-1209] - wso2event producer throughput reduces when increasing number of instances
  • [CEP-1214] - Tenant Loading does not happen for some event receivers when it receives event
  • [CEP-1227] - Scalability of CEP+Storm needs improvement
  • [CEP-1240] - WSO2Event - Performance Tuning Recommendations documentation
  • [CEP-1243] - Update lmax.distruptor to latest version
  • [CEP-1245] - Update nexus and CEP for latest disruptor 3.3.2
  • [CEP-1250] - Adding timestamp selection option for realtime gadget
  • [CEP-1261] - Monitoring distributed deployment status
  • [CEP-1265] - Add secure vault / cipher tool support to delivary manager password in event-broker.xml
  • [CEP-1266] - Add secure vault / cipher tool support to mail.smtp.password in output-event-adapters.xml
  • [CEP-1267] - Adding manipulation links when viewing artefacts
  • [CEP-1273] - Add Analytics JMX Data Agent to CEP