Pesquisar neste blog

28 de dez. de 2011

Workflows em Java com Bonita



Este é o primeiro de uma série de artigos que têm como objetivo apresentar os conceitos e as práticas do uso de Workflows em Java. Inicialmente, abordaremos um pouco sobre os conceitos que envolvem este tema e temos como objetivo levar ao seu entendimento a importância que existe em compreender esta tecnologia. Explicaremos como este entendimento permitirá uma maior agilidade no desenvolvimento e como pode agregar qualidade ao produto final. Em seguida, iniciaremos demonstrando como seu sistema pode ser construído em Java usando a biblioteca aberta denominada Bonita.

O Incrível Mundo dos Workflows

Embora seja considerado um tema de discussão antiga, podem ser encontradas, ainda hoje, diversas correntes divergentes quanto ao que é e quais as atribuições de um Workflow. O objetivo, neste momento, é esclarecer o que são fluxos de trabalho, quais as suas atribuições e como podem ser aplicados, tentando desmistificar este incrível mundo dos Workflows.
Muitos dos conceitos desta área são encontrados em nosso cotidiano. A sequência de tarefas realizadas quando nos levantamos da cama até o momento em que chegamos ao trabalho destaca uma série de atividades executadas todos os dias por muitas pessoas: levantar, escovar os dentes, tomar banho, tomar o café da manhã, dirigir-se ao trabalho, etc.


Deste exemplo, observamos um conjunto de estados que se modificam a partir de ações. Temos, então, o estado "dormindo", que necessita da ação "acordar" para que se passe para o estado "escovando os dentes". Para chegar ao estado "tomando café da manhã", será necessário executar algumas atividades, "como escovar os dentes" e "tomar banho". Embora possa ser considerado um exemplo simplório, é importante para clarear as ideias básicas de um Workflow.

Em uma visão macro, abordando questões de negócio de uma empresa, temos relatórios que estão aguardando validação e que, para chegarem até o chefe do setor, devem ser analisados e, logo após, aprovados. Para aqueles formados na área de engenharia de sistemas, alguns conceitos anteriormente aprendidos podem surgir, como o de Máquinas de Estado. De fato, um fluxo de trabalho contém esta ideia, mas a amplia consideravelmente.


Conforme a evolução das tecnologias que circundam os Workflows foram avançando, diversas características foram agregadas, muitas vezes criando termos novos que possivelmente criaram mais dificuldades para entender este tema. Uma definição encontrada na internet destaca que fluxos de trabalho são "Processos de Negócio que consistem de múltiplas atividades que devem ser executadas em uma sequência válida. Atividades representam qualquer unidade de trabalho, que pode ser, por exemplo, uma simples chamada de telefone".

Entretanto, a definição mais difundida é a da Workflow Management Coalition (WfMC), órgão criado e gerido por um grupo de empresas e outras partes interessadas neste assunto. A WfMC descreve: "Workflows preocupam-se com a automação de procedimentos nos quais documentos, informações ou tarefas são trocados entre participantes, conforme um conjunto definido de regras, com o objetivo de alcançar, ou contribuir, para uma meta global de negócios".


Considerando a definição proposta pela WfMC, podemos esclarecer um fluxo de trabalho através de um rápido exemplo real, como um fluxo de pedidos de compra. Nele percebemos a participação de entes que devem executar tarefas como, por exemplo, o técnico que deve verificar o estoque dos produtos que compõem o pedido e a aprovação financeira, realizada pelo analista financeiro. Outro termo comum nesta área, e que merece um esclarecimento, é o termo Workflow Engine ou, traduzido para nosso idioma, Mecanismo de Fluxo de Trabalho. Uma vez definido um fluxo de trabalho, cabe operacionalizá-lo e um mecanismo de workflow é o responsável por esta ação. Cabe a ele tratar uma entrada, o fluxo de trabalho descrito em uma linguagem, e gerenciar as transições entre os estados e as tarefas que cada participante possui, além da execução destas pelos seus responsáveis.



As linguagens de definição de processos são estruturas formalmente organizadas que permitem aos responsáveis pela idealização de um fluxo descreverem os passos e as tarefas que cada participante terá. Neste contexto, podemos destacar as linguagens eXtensible Process Definition Language e a Business Process Management Notation 2. A primeira é mantida pela WfMC, enquanto a segunda é mantida pelo grupo BPM.org. A linguagem BPMN2 diferencia-se da XPDL não apenas na sintaxe, mas também na forma de apresentação, uma vez que ela também pode ser usada de maneira visual, permitindo a construção de fluxos de trabalho adotando elementos gráficos pré-estabelecidos.



Ambas linguagens não encerram o assunto, pois diversas outras já foram sugeridas, embora muitas não tenham alcançado o êxito pretendido. Atualmente, a linguagem BPMN2 possui maior evidência, sendo adotada como linguagem padrão dos Mecanismos de Workflow mais utilizados do mercado.



Finalizando, é importante diferenciar os conceitos de Workflows e BPM, pois percebe-se, nos analistas de sistemas e negócio, confusão quanto aos limites de cada um. Pretendendo não se estender neste assunto, será adotada a ideia de BPM encontrada no site Cio.com: Worflows são a base para o BPM. Deste ponto de vista, um BPM é um Workflow com alguns "enfeites". Do ponto de vista de um analista de negócios, contudo, estes adornos são tão importantes para as pessoas que desejam que seus processos de negócio sejam rodados de forma eficiente, que cabe criar um termo específico para designar isto.

Ei, seu sistema é um Workflow!

Desenvolver um sistema não é uma tarefa trivial. Contudo, pode ser ainda mais conturbada quando os responsáveis por sua criação não possuem conhecimentos além daqueles referentes à sua área de atuação. Sistemas de Workflow são um exemplo prático disto. A partir das descrições do negócio de uma empresa, é simples observar que determinada aplicação pode ser modelada facilmente como um fluxo de trabalho, mas não é tão fácil para aqueles que nunca estudaram o assunto. Conscientes ou não, os analistas terminam abdicando de adotar práticas ou reusar soluções existentes que poderiam agilizar e embutir maior qualidade ao produto.
Este esforço supérfluo é comum no desenvolvimento de sistemas, principalmente pela falta de cultura em determinadas tecnologias.
Visando exemplificar, pode-se considerar esta simples descrição inicial de um sistema, dada por um cliente fictício: gostaria de um sistema para facilitar a publicação de notícias em meu sítio na Internet. Os repórteres enviam as notícias de suas casas e o redator revisa. Depois, eu devo publicá-las, uma a uma, evitando notícias que ferem interesses de patrocinadores.Para um analista de sistemas com bons conhecimentos em Workflows é bastante fácil identificar um fluxo de trabalho no qual notícias passam por, no mínimo, três passos antes de serem acessíveis ao usuário externo. 


Um fato comum é a construção quase completa de uma engine própria, contendo código específico da aplicação entrelaçado com o gerenciamento do fluxo de trabalho. Adotando os termos comuns na área de desenvolvimento de aplicações, pode-se dizer que o código encontra-se com centenas de comandos if e switch totalmente desnecessários, que visam a apenas controlar em qual direção o fluxo deve prosseguir. Obviamente, uma simples engine eliminaria todo este esforço.

Workflows em Java

Em Java há muitas opções para trabalhar com Workflows. São muitas as bibliotecas disponíveis. Contudo, este artigo destaca as soluções jBPM, da JBoss e o Bonita, da Bonita Open Solutions. Ambas são soluções livres e possuem uma forte comunidade guiando seu desenvolvimento. Cabe destacar aqui uma lista extensa de engines de Workflow disponíveis para Java, que está disponível em http://java-source.net/open-source/workflow-engines.
Cada engine listada neste site possui características diferentes. Cabe ao desenvolvedor que acabou de verificar que o seu sistema é um Workflow, selecionar aquela que melhor atende aos seus requisitos.

Primeiros Passos com Bonita

Chegou a hora, finalmente, de colocarmos a mão na massa e iniciarmos a criação de um fluxo de trabalho. Para isto, adotaremos o mecanismo de workflow da BonitaSoft, denominada simplesmente de Bonita. O Bonita é uma suite bastante abrangente de Workflow. Com ela é possível definir seu processo, ou fluxo de trabalho, através de uma ferramenta gráfica própria e muito simples de usar. Também fornece uma interface gráfica muito bem elaborada, através da qual é possível interagir com instâncias de seu fluxo, seja gerenciando as tarefas disponíveis ou executando-as.


O foco deste artigo são os desenvolvedores de sistemas, portanto, vamos nos ater especificamente à engine que suporta a execução de processos no Bonita. Isto significa que não usaremos a interface gráfica já fornecida na suite, entretanto, usaremos o Bonita Studio para desenhar nosso fluxo de trabalho. Para alcançar nosso objetivo, inicialmente baixe o Bonita através do link http://www.bonitasoft.com/. Uma vez instalado, execute-o e você terá uma tela semelhante à da figura abaixo:

Agora podemos criar nosso processo clicando na opção Create a new process graphically. Vamos criar um fluxo de trabalho para gerenciar a publicação de notícias em um site. Nossas notícias precisarão passar por 3 passos antes de serem acessíveis. Primeiro, deverão ser criadas, depois revisadas e só então publicadas. Contudo, uma notícia ainda pode ser rejeitada caso não seja aprovada após a revisão.
Temos, então, 5 atividades, sendo 3 humanas e 2 automáticas. Para saber se é uma atividade humana, observe o ícone no lado esquerdo superior dos passos. Para definir uma atividade como humana, clique na atividade e selecione a opção "Human" na lista de "Activity type". Uma atividade humana requer uma ação direta de uma pessoa para que haja a transição de um estado para outro. A automática, como o próprio nome sugere, ocorre sem qualquer intervenção humana. Este fluxo pode ser testado apenas clicando no botão RUN, que fica na barra de ferramentas.


Ainda precisamos fazer alguns ajustes ao nosso fluxo. Como pode ser observado na figura, a atividade Revisar e Publicar possuem duas possíveis transições. Então, como a engine vai saber qual seguir? Precisamos definir algumas informações que serão usadas para que a engine tome esta decisão. Para isto, clique na atividade Revisar e na aba de detalhes, clique na opção Data. Agora clique em Add e a janela da figura abaixo irá aparecer. Selecione a opção "List of Options" e preencha conforme indicado.

Repita os mesmos passos para a atividade Publicar. Agora, selecione a transição que parte da atividade Revisar para a atividade Publicar. Preencha o campo Condition com o valor decisao == "Revisada". Repita isto para as transições Revisar -> Rejeitada, Publicar->Arquivar e Publicar -> Rejeitada. Mas lembre-se de colocar o valor correto no campo Decision. Para publicar, por exemplo, o valor deve ser decisao == "Publicada". Vamos testar o nosso fluxo? Clique em RUN e veja como ficou.


Nenhum comentário:

Postar um comentário