112
© 2015 Manexware S.A. Open Source workflow automation with BPMN 2.0, Java and camunda Manuel Vega [email protected] Skype: manuel.vega.ulloa

Camunda Wong

Embed Size (px)

DESCRIPTION

Presentación Camunda

Citation preview

PowerPoint Presentation

Open Source workflow automation with BPMN 2.0, Java and camundaManuel [email protected]: manuel.vega.ulloa 2015 Manexware S.A.1Camunda BPM 7.2Camunda BPM componentsEngineTasklistCustom ApplicationCockpitCycleEclipseModelerBusiness ModelerBusiness UserOperations (technical/business)Business AnalystDeveloperDatabaseFile RepositoryREST / Java APIRESTRESTREST / JavaDesign TimeRuntimeBPMN with camunda BPMAnalyst / DeveloperUserOperatorModelerTasklist / Your UICockpitEngineCamunda BPM platformWhy is this cool?Passion

Productivity

No Vendor-Lock-InBlack Box BPM-SuiteReal-Life @docs.camunda.orgExamplesCheck out githubAnd Tutorials and How-TosCamunda BPM 7.2TasklistConnectors / Data / Scripts / TemplatesCockpitCamunda BPM 7.2TasklistConnectors / Data / Scripts / TemplatesCockpitWhat is Tasklist?Tasklist 7.2The tasklist is the central point of contact for business users with the BPM platform and is therefore an essential component. The innovative implementation of the Camunda tasklist matches the DAB bank's web technology stack perfectly and saves extensive in-house development. The functionality is optimally aligned to the Camunda BPM platform and due to its flexible adaptability also fulfills the needs of a bank.

Karl Brandner, Chief ArchitectLive Demo123Technical ArchitectureCamunda BackendRESTCamunda JavaScript Forms SDKAngularJSTwitter BootstrapAngular JSAngularJS es un framework de JavaScript de cdigo abierto, mantenido por Google, que ayuda con la gestin de lo que se conoce como aplicaciones de una sola pgina. Su objetivo es aumentar las aplicaciones basadas en navegador con capacidad de Modelo Vista Controlador (MVC), en un esfuerzo para hacer que el desarrollo y las pruebas sean ms fciles.

La biblioteca lee el HTML que contiene atributos de las etiquetas personalizadas adicionales, entonces obedece a las directivas de los atributos personalizados, y une las piezas de entrada o salida de la pgina a un modelo representado por las variables estndar de JavaScript. Los valores de las variables de JavaScript se pueden configurar manualmente, o recuperados de los recursos JSON estticas o dinmicas.16Angular JS17

Twitter BootstrapTwitter Bootstrap es un conjunto de clases CSS que podemos usar para darle estilo a nuestro sitio Web. Bootstrap es una herramienta muy completa y personalizable, la cual hace que cientos o miles de pginas web la utilicen.18

Your own Setup?Camunda BackendRESTCamunda JavaScript Forms SDKYour very own HTML 5 User InterfaceCamunda JavaScript Forms SDKGreatly simplifies the implementation of task forms.You can directly bind Html form controls to process variables.The Forms SDK handles the fetching of the variable values from the process engine, type conversions and so on.The Forms SDK optionally integrates with AngularJS to take advantage ofAngularJS form validation and other AngularJS goodies.More: https://github.com/camunda/camunda-bpm-sdk-js

Camunda BPM 7.2TasklistConnectors / Data / Scripts / TemplatesCockpitThe paradigmDeveloper-FriendlySystem IntegrationDeath byProperty Panelvs.CamundaZero-Code BPM SuitesJava Object in XML or JSON serializeCamunda BPMDatabaseCustomer,AddressXML or JSONAdvantages:Anyone can directly inspect Java objects in the database and CockpitIt is easier to set up polyglot architectures (e.g. Java + Javascript)Live DemoImproved Handling of Data FormatsXML orJSONAdvantages:Directly access XML or JSON within the process via APIsNo need to convert XML or JSON into Java ObjectsAdvanced Support for ScriptingConnectorsConnectorsSimple API for implementing Connectors as reusable ComponentsIncluded with Camunda 7.2: SOAP and REST (both based on ApacheHTTP Client)Fundamentally different approach than Zero-Code Suites:Developer become more productive its not about empowering BusinessAnalystsHowever not every developer speaks JavaPrimary Target Group: IT divisions that want to provide a workflowinfrastructure for their organization (other IT teams)Focus on API instead of PropertiesConnectors can be used in different components, e.g. Java DelegatesA powerful combinationDataConnectorsScriptingExample: Do I have to work today?JSONRESTJavascriptCamunda BPM 7.2TasklistConnectors / Data / Scripts / TemplatesCockpitCockpit Pluginshttps://github.com/camunda/camunda-bpm-examples/Showing:RunningIncidentsStarted in last 2 hoursRunning longer than 24 hours

39

WildflyWildFly representa una actualizacin del proyecto y a la vez una renovacin de su visin de impulsar la prxima generacin de tecnologas de servidor de aplicaciones. Esta tecnologa continuar sirviendo como proyecto de desarrollo preliminar de JBoss Enterprise Application Platform de Red Hat y se centra en algunas de las principales fuerzas que plasman el middleware hoy en da, incluso el cambio hacia enfoques ms flexibles y modernos para el desarrollo de aplicaciones, la habilitacin de nubes hbridas abiertas y Java Enterprise Edition 7 (Java EE 7).40Wildfly 8concentra la atencin en la rpida obtencin de la especificacin Java EE 7 que aporta simplicidad, estandarizacin e integracin tanto para los escenarios de desarrollo de nubes como de dispositivos mviles. La especificacin Java EE7 incluye WebSockets y mejoras en Contextos e Inyeccin de Dependencia (CDI). 41DISTRIBUCIN DE CARPETAS DE NUESTRO SERVIDOR DE APLICACIONES

42Detalles sobre las carpetas :appclient: contains configuration files, deployment content, and writable areas used by the application client container run from this bin: contiene SCRIPTS, configuracion inicial de archivos y varios comandos de linea utiles el : vault.sh, add-user.sh.Las otras carpetas(service, init.d) son usadas respectivamente para instalar Wildfly tanto como un servicio de Windows y Linux.docs/schema: contiene el SCHEMA XML de definiciones.docs/examples/config: contiene algunas configuraciones en solitario (tal como standalone-minimalistic.xml).43Detalles sobre las carpetas :domain: contiene los archivos de configuracion del dominio, del servidor y area escribible usada por el dominio.modules: contiene todos los modulos ....standalone: Contiene el archivo de configuracion , contenido del despliegue,y areas escribibles usadas por el servidor en solitario corriendo para nuestra aplicacion..welcome-content: contains content related to the default (ROOT) web application.44REGLAS DE NEGOCIO45Parametrizacin?46Quizs. Todo el mundo quiere un sistema parametrizable.

Pero toda parametrizacin tiene un costo y parametrizar todo el sistema no es viable y mucho menos efectivo, porque tienen cosas que cambian tan poco que el retorno no pagara el esfuerzo, todava ms porque las cosas cambian.

Una vez que hayas encontrado "lo que" parametrizar te tienes que preocupar por el "cmo". Esta tampoco es una tarea fcil.

Muchas empresas han adoptado la solucin de la parametrizacin mas simple que es el de "Cada caso es un caso". En este modelo normalmente, algunas tablas se exponen por lo general a travs de pantallas de parametrizaciones. A veces se mezcla con CRUDs.Por qu no parametrizar con pantallas?47Puedes optar por este enfoque. En algunos casos ser suficiente, en otros no. Porque este tipo de enfoque tiene problemas con la flexibilidad. Y cualquier cambio por mas simple que sea puede generar una nueva demanda de desarrollo.Cul es el problema del desarrollo?En principio ninguno. Sin embargo, los desarrolladores son ms caros que un profesional que est en la lnea de produccin y que conoce mejor el negocio. Ciertas cosas que el usuario no tiene aunque el quisiese no podra resolver. Otras el podra resolver sin pasar por el equipo de desarrollo y, por tanto, ahorrar dinero para la organizacin y dejar que el equipo de desarrollo se enfoque en lo que realmente vale la pena!48Niveles de Decisin?Esa es una buena. Necesita proporcionar ciertos niveles de decisin al usuario. Un sistema mas parametrizable significa mas decisiones para el usuario. Esto no necesariamente significa ms complejidad. Porque la complejidad depender bsicamente de la complejidad inherente del problema y la complejidad que le das en la solucin.Debe dar al usuario ciertos niveles de decisin, es decir, no todo tiene que venir como una peticin de desarrollo. Bueno yo hago eso, tengo pantallas que el usuario escoge como van a ser ciertas cosas en el sistema. El problema es que este enfoque puede ser costoso y no siempre claro para el usuario49Por qu no exponer las reglas de negocio?Esto puede ser la solucin a sus problemas. Cul es el problema de eso? Los analistas sern despedidos? Los usuarios obtienen el control de IT? "No" para las dos preguntas!Para resolver este problema se utiliza otro modelo, el paradigma del que estoy hablando es BRMS.50Business Rules Management System?Consiste en desarrollar, mantener, versionar, probar, organizar y hacer el despliegue de reglas de negocio. As vamos a dar poder al usuario. Ese poder se puede obtener a travs de reglas escritas con los objetos de dominio por medio de DSLs escritos en un buen castellano con el lenguaje del usuario. O incluso con una buena hoja de clculo.51GeneralidadesDrools es un sistema de administracin de reglas de negocio (BRMS) con un motor de reglas basado en una adaptacin orientada a objetos del algoritmo Rete. Permite expresar de una forma ms natural las reglas de negocio interactuando con los objetos de negocio. Provee separacin de lgica (reglas) y datos (hechos).

Tambin provee soporte para la programacin declarativa, y es lo suficientemente flexible para expresar la semntica del problema con un lenguaje especfico de dominio (DSL).

Drools cuenta con la implementacin completa de la JSR-94 Rule Engine API.

52GeneralidadesTambin existe un plug-in de Eclipse para facilitar el desarrollo con esta herramienta.

Para especificar las reglas Drools utiliza el lenguaje de reglas de drools (DRL), para especificar las condiciones, acciones y funciones de las mismas, las cuales se puede expresar con distintos lenguajes, como Java. Entonces las reglas son guardadas en archivos de texto con la extensin drl.

Entre las opciones para definir las reglas aparte del DRL se pueden especificar lenguajes especficos de dominio (dsl), los cuales se asocian a un drl, y tambin existe la opcin de especificar las reglas en una planilla de clculo, como Excel.53DROOLS ~ CONCEPTOSBSICOSLa versin 6 de Drools/jBPM introduce el nombre KIE (Knowledge is Everything / El conocimiento es todo), el cual es el nombre que agrupa los siguientes sub-proyectos deDrools/jBPM:54

Reglas de negocioBsicamente una regla tiene dos secciones:Condicin: Cuando la miema se cumple, la regla queda disponible para ser ejecutada,Consecuencia: Acciones que se deben tomar cuando se ejecute la regla.Las condiciones pueden validar informacin de los objetos almacenados en laWorking Memorydel Motor de Reglas. Estos objetos en memoria tambin son llamados facts (hechos) y los mismos representan el estado de nuestro Motor de Reglas.5556

Restricciones de condicionesCuando se actualizan los datos de la Working Memory (inserciones, modificaciones, eliminaciones), los mismos son evaluados contra las condiciones definidas en las reglas, lo que conlleva a que las mismas puedan activarse o desactivarse.57Restricciones de condicionesHay dos tipos de restricciones que se pueden aplicar a las reglas:Tipo de Objeto:Para que un objeto de la Working Memory coincida con esta restriccin, el mismo debe ser una instancia del Tipo de Objeto definido (Clase Java). Por ejemplo, la siguiente restriccin:Orden() ser vlida para todos los objetos de la Working Memory que sean instancias de la Clase Orden.Campo: Aplicar para todos los objetos que presenten sus campos (atributos) con ciertos valores. Por ejemplo,Orden(estado==Nueva) aplicar para todos los objetos de laWorking Memory que sean una instancia de la clase Orden y tengan el atributo estado con el valor del String Nueva.58Pattern MatchingSe conoce como pattern (patrn) a la restriccin por Tipo de Objeto junto a cero o ms restricciones de Campo.Cuando algn objeto de la memoria satisface ambas restricciones, se dice que el objeto coincide(est matched). Cuando hay una coincidencia (match) paratodas las condiciones de una reglase crea una Rule Match.Las reglas y los hechos (facts) sern referenciados y aadidos a la Agenda de Drools.El proceso de buscar coincidencias de objetos en memoria con lospatrones de las condiciones se conoce como Pattern Matching.59Pattern Matching

60Pattern Matching61La siguiente ilustracin muestra el proceso de Pattern Matching para una regla que ser ejecutada por cada Orden que se encuentre en el estado Nueva.

AgendaLa Agenda de Drools es una coleccin de las reglas activas (se cumplen todas sus condiciones, por lo que su consecuencia est disponible para ser ejecutada) y es la responsable de gestionar el orden de ejecucin de las reglas.Cuando se disparan las reglas, Drools selecciona una de la Agenda y ejecuta su consequencia, lo que puede derivar en ms activaciones (o desactivaciones) de reglas. Esto sucede ya que la consecuencia de una regla puede modificar datos de la memoria y sto puede generar diferencias en el matcheode patrones. Este ciclo continuar hasta que se hayan disparado todas las reglas activas y la Agenda se encuentre vaca.El orden de ejecucin de las reglas puede ser modificado mediante una configuracin de atributos de reglas, los cuales se vern ms en la seccin Resolucin de Conflictos y posteriores publicaciones.62AgendaEl motor de reglas bsicamente itera sobre estas dos fases:Acciones en tiempo de ejecucin: Ejecuta consecuencias de reglas o el procesos main de Java.Evaluacin de Agenda: Selecciona la regla a ejecutar.63Agenda

64Resolucin de conflictosCuando hay Rule Matches en la Agenda se dice que hay un conflict set y suejecucin ser determinada por una Estrategia de Resolucin de Conflictos (Conflict Resolution Strategy). Hasta este momento se considera que el orden de ejecucin es arbitrario.El orden de ejecucin se determinar en base a la prioridad de cada regla a ser disparada. La prioridad se puede dar mediante el atributo salience, el cual es un valor entero (mayor valor, mayor prioridad). El valor predeterminado para este atributo es 0, por lo tanto si no se define un valor en particular, todas las reglas tendrn la misma prioridad (cero).65Resolucin de conflictosLas reglas deben pensarse de forma independiente y su lgica nunca deberaconocer que existen otras reglas o posibles flujos de ejecucin. Por lo tanto, no se recomienda escribir las reglas pensando en una secuencia de ejecucin ordenada por prioridad. Obviamente que hay excepciones, por ejemplo cuando se desea que las reglas de inicializacin se ejecuten antes que el resto.Existen otras formas de alterar la secuencia de ejecucin de reglas, como pueden ser Agenda Groups, Ruleflow Groups yActivation Groups.66InferenciaSegn la Real Academia Espaola, la accin de inferir es sacar una consecuencia o deducir algo de otra cosa..

En otras palabras, podemos decir que inferencia es la manera de generar nuevo conocimiento an base a conocimiento actual.

Desde el punto de vista de un Motor de Reglas, el razonamiento o inferencia se realiza a travs de las reglas de negocio. Las consecuencias de las reglas pueden llevar a modificacin de hechos actuales. Esta modificacin de hechos puede llevarnos a una nueva inferencia que incluya nuevas consecuencias. En el mbito de Motor de Reglas tambin se conoce a inferencia a este ciclo de modificacin de hechos que dispara nuevas inferencias y consecuencias.67Knowledge BaseSe conoce como Knowledge Base al repositorio de definiciones de conocimiento de la aplicacin (reglas, procesos, funciones, etc).No contiene informacin de tiempo de ejecucin.

68SessionLos datos de tiempo de ejecucun se almacenan en la sesin (Session), la cual puede crearse desde una Knowledge Base que contiene las definiciones de conocimiento.Stateful SessionUna sesin con estado (Stateful Session) es la manera ms comn de interactuar con el motor.Permite a la aplicacin establecer una conversacin iterativa con el motor, donde el estado de la sesin es conservado entre los distintos llamados. Cuando una conecuencia de una regla cambia el estado de la sesin puede provocar que se activen o desactiven distintas reglas.69SessionStateless SessionUna sesin sin estado (Stateless sessions) no permite llamados interactivos, por lo que el motor no proporciona inferencia (relacionada a modificacin de datos).Cada invocacin al motor tiene su propio estado (datos), el cual ser descartado al finalizar el llamado en curso. En realidad, una sesin sin estado es una encapsulamiento de una sesin con estado, el cual es descartado al finalizar la ejecucin. La sesin tiene el siguiente ciclo de vida:Se crea una Stateful sessionSe insertan datos en laStateful sessionSe disparan las reglasSe generan los resultadosSe descarta la Stateful Session70DROOLS ~ EJEMPLO DE REGLASSIMPLESConfiguracinEl proyecto se llama drools-examplesy es un proyecto de Maven con las siguientes dependencias:org.kie:kie-api:6.1.0.Finalorg.drools:drools-compiler:6.1.0.FinalAmbas dependencias estn definidas utilizando Drools BOM.Adems se incluyen dependencias de SLF4J y JUnit, las cuales se utilizan en los distintos Test Cases del proyecto.71DROOLS ~ EJEMPLO DE REGLASSIMPLESCaso de uso / Modelo de DatosLos ejemplos de este post se basan en diferentes reglas que se podran aplicar cuando se realiza una Compra.El modelo de datos a utilizar es bien simple, ya que el propsito es hacer foco en la definicin y ejecucin de reglas.PurchaseCustomer nameSubtotalPayment MethodDiscountPayment methodsCashCredit CardDebit CardPotential CustomerCustomer nameCredit Limit72DROOLS ~ EJEMPLO DE REGLASSIMPLES

73DROOLS ~ EJEMPLO DE REGLASSIMPLES74Reglas de negocioTrabajaremos en dos grupos de reglas, el primero para definir el descuento de una compra y el segundo para identificar potenciales clientes a los que se le ofrecern lneas de crditos de compra.DROOLS ~ EJEMPLO DE REGLASSIMPLES75Reglas de descuentoEfectivo: sin descuentoCuando el mtodo de pago es Efectivo, no hay descuentoTotal = SubtotalTarjeta de dbito:descuento del 5%Cuando la forma de pago es Tarjeta de Dbito, se aplica un 5% de descuento.Total = Subtotal (5% delSubtotal)Tarjeta de crdito:descuento del 10%Cuando la forma de pago es Tarjeta deCrdito, se aplica un 10% de descuento.Total = Subtotal (10% delSubtotal)DROOLS ~ EJEMPLO DE REGLASSIMPLES76Cliente PotencialIdentificar clientes potencialesUn Cliente Potencial es quien realiza una compra en Efectivo por un monto mayor a $300.Se le ofrece al cliente potencial una lnea de crdito equivalente al 80% del subtotal de la compra realizada.Se le desea enviar un email a los clientes potenciales cuya lnea de crdito sea menor o igual a $500.Para el ejemplo se utilizar un Servicio de Email ficticio, el cual ser invocado desde las reglas.Se desea llamar por telfono a los potenciales clientes cuya lnea de crdito sea superior a los $500.Para el ejemplo simplemente se loguear un mensaje cuando se ejecuta la regla. En un caso real se podra notificar al Servicio de Atencin al Cliente para que realice el llamado, o bien se podra crear una instancia de un Proceso de Negocio relacionado.DROOLS ~ EJEMPLO DE REGLASSIMPLES77

API de DroolsPara empezar, vamos a revisar algunos conceptos de Drools mediante la lectura de su Javadoc:KieBase:repositorio de todas las definiciones de conocimiento de la aplicacin. Contiene reglas, procesos, funciones y tipos de dato. No contiene datos asociados al tiempo de ejecucin, para eso se utilizan las sesiones, las cuales son creadas en base a una KieBase. A las sesiones se les puede insertar objetos y crear instancias de procesos.KieModule:contenedor de todos los recursos necesarios para definir una KieBase. Por ejemplo, un pom.xml para definir el ReleaseId, un kmodule.xml para declarar los nombre de las KieBases y configuraciones junto a la KieSession.KieContainer:un contenedor para todas las KieBases de un determinado KieModule.KieFileSystem: sistema de archivos en memoria, utilizado para definir programticamente los recursos que componen un KieModule.KieBuilder:un constructor de recursos contenidos en un KieModule.78KieContainerDe sta forma se crea programticamente un KieContainer en Drools 6:

KieServices ks = KieServices.Factory.get();// Create the in-memory File System and add the resources files to itKieFileSystem kfs = ks.newKieFileSystem();kfs.write(ResourceFactory.newClassPathResource(resourceFilePath));// Create the builder for the resources of the File SystemKieBuilder kbuilder = ks.newKieBuilder(kfs);// Build the KieBaseskbuilder.buildAll();// Check for errorsif (kbuilder.getResults().hasMessages(Level.ERROR)) {throw new IllegalArgumentException(kbuilder.getResults().toString());}// Get the Release ID (mvn style: groupId, artifactId,version)ReleaseId relId = kbuilder.getKieModule().getReleaseId();// Create the Container, wrapping the KieModule with the given ReleaseId KieContainer kcontainer = ks.newKieContainer(relId);

79KieBaseUna vez que se construy un KieContainer, podemos crear una KieBase:// Configure and create the KieBaseKieBaseConfiguration kbconf = ks.newKieBaseConfiguration();KieBase kbase = kcontainer.newKieBase(kbconf);80Stateless SessionUna vez creada la KieBase, creamos una StatelessKieSession:// Configure and create the StatelessKieSessionKieSessionConfiguration ksconf = ks.newKieSessionConfiguration();StatelessKieSession ksession = kbase.newStatelessKieSession(ksconf);81Stateful SessionUna vez creada la KieBase, creamos una KieSession (Stateful):// Configure and create the KieSessionKieSessionConfiguration ksconf = ks.newKieSessionConfiguration();KieSession ksession = kbase.newKieSession(ksconf, null);82Reglas de descuentoDefinicin de reglas

Las siguientes reglas pertencen al archivo discount.drl. Las mismas utilizan una variable global llamada logger, la cual referencia a una instancia de un Logger SLFJ.

831.-Las compras en efectivo no tienen descuentorule "Cash purchases have no discount"when $p:Purchase(paymentMethod == PaymentMethod.CASH)then $p.setDiscount(0); logger.info("\t==> Executing RULE 'Cash purchases have no discount' for Object: " + $p);end842.- Descuento del 5% para compras con Tarjeta de Dbitorule "Debit Card purchases have 5% of discount"when $p:Purchase(paymentMethod == PaymentMethod.DEBIT)then $p.setDiscount(0.05); logger.info("\t==> Executing RULE 'Debit Card purchases have 5% of discount' for Object: " + $p);end853.- Descuento del 10% para compras con Tarjeta de Crditorule "Credit Card purchases have 10% of discount"when $p:Purchase(paymentMethod == PaymentMethod.CREDIT)then $p.setDiscount(0.1); logger.info("\t==> Executing RULE Credit Card purchases have 10% of discount' for Object: " + $p);end86Test Cases

87Test Cases

88Cliente Potencial1.-Identificar Clientes Potenciales

rule "Identify potential customers"when $p:Purchase(paymentMethod == PaymentMethod.CASH, subtotal > 300)then logger.info("\t==> Potential Customer found! " + $p); // Create a new Potential Customer object PotentialCustomer pc = new PotentialCustomer($p.getCustomerName(), $p.getSubtotal()*0.80); // Insert the Potential Customer object into the Working Memory insert(pc);end89Cliente Potencial90

Cliente Potencial91

The BIRT Designer94

BIRT DesignerHigh Level BIRT ArchitectureBIRT EnginePresentationServicesDesign EngineGenerationServicesDataServicesChartingEngineEclipseDesignerChartDesignerEclipse DTP,WTP,DataDataHTMLPDFExcelWordPowerPointPostScriptXMLDesignDocumentStart with high level overview

Elasticsearch | Search & Analyze Data in Real Time98

Real-Time Data99

Real-Time Analytics100

Full-Text Search101

Logstash | Collect, Parse, & Enrich Data102

Using Logstash to Streamline Email Notifications103

Kibana | Explore & Visualize Your Data104

Seamless Integration with Elasticsearch105

Give Shape to Your Data106

Sophisticated Analytics107

Mayta-eSurvey108

Q&AGracias! Alguna pregunta?