Foi lançado recentemente a mais nova versão do JBoss jBPM, e com este lançamento, vários recursos novos e interessantes foram incorporados, além de claro, correções e melhorías de falhas encontradas nas versões anteriores. Estive testando nos últimos dias esta nova versão, e gostaria de compartilhar com vocês um recurso que achei super interessante: A integração do jBPM com o Drools para resolver questões de decisões.
Vamos ver como este recurso funciona. A idéia básica do recurso é fazer com que um conjunto de regras do Drools possa decidir qual transição aplicar num grafo de processo em execução. Nas versões anteriores, você podia fazer de três formas: Usando um Decision Handler (classe Java que implementa a lógica da decisão), uma expressão ou baseado no valor de uma variável booleana. Em todos os três casos, são técnicas que envolvem algum conhecimento de programação o que impossibilita que pessoas não técnicas possam definir regras de decisão.
O recurso da integração do Drools veio justamente para sanar este problema. Agora, você pode dar a possibilidade a pessoas não técnicas definirem regras de fluxos de processos, usando Drools para definição (aliado a bons recursos de DSL) ou usando tabelas de decisão baseadas em planilhas do Excel ou OpenOffice.
Um bom exemplo é melhor que mil palavras!
Vejamos como funciona o recurso com um exemplo. Imagine que você define uma meta de final de ano, daquelas metas que depois que você estoura um champagne e brinda com todos o ano que sai e o ano que entra, você promete a si mesmo. Uma das metas que você estabelece é que irá cuidar mais da saúde e ser mais zeloso quanto ao seu peso. Para ajudar a decidir que ação tomar, você define um processo de negócio usando jBPM como o mostrado abaixo:
Para criar este processo, usei o designer do jBPM que acompanha a instalação do jBPM 4.3. Consulte o documento "User Guide" do jBPM que fala como instalar este designer numa distribuição do Eclipse. A dica para este processo, é que ao invés de usar um "decision" tradicional (como sugere o ícone do designer) eu usei um "rules-decision", que é efetivamente o tipo de decision que integra com o Drools. A listagem abaixo mostra meu arquivo "meta-anual.jpdl.xml":
Repare que no "rules-decision" não há nenhuma informação sobre qual transição o processo irá tomar. isso se dá porque a decisão será feita por um punhado de regras do Drools. Crie um arquivo chamado "regras-peso.drl" e entre com o seguinte conjunto de regras:
Na listagem acima, existem três regras distintas que falam sobre que caminho tomar de acordo com o valor do seu peso. Repare que o peso é representado por uma variável global chamada "pesoAtual" que é definida junto com a variável "outcome", usada para definir qual transition do jBPM tomar. Estas variáveis serão injetadas automaticamente pelo jBPM quando uma instância do processo for criada.
Feito isso, faça o deploy deste processo no seu servidor de processos. Com o JBoss Application Server no ar, crie um arquivo JAR que contenha os arquivos "meta-anual.jpdl.xml" e "regras-peso.drl" e mude a estensão deste arquivo para BAR. Depois, copie este arquivo para a pasta deploy do seu JBoss. O scanner do jBPM irá identificar este pedido de deployment e irá fazer o registro deste processo na engine do jBPM.
Testando o exemplo usando o componente ProcessEngine
Para testar este processo, iremos criar um pequeno programa Java que irá conectar com o servidor de processos e solicitar uma instância do processo que foi registrado. Crie um programa Java conforme mostrado abaixo. O programa usa a API do jBPM que também acompanha a instalação da versão 4.3 do mesmo.
Note que solicitamos uma nova instância do processo passando uma variável chamada "pesoAtual" . Esta variável será inserida no contexto do Drools e será acessível via variável global conforme vimos no arquivo de regras. Note também que solicitamos duas sinalizações. A primeira orienta o grafo do processo para se posicionar na atividade "Respirar Fundo" e a segunda orienta o posionamento da próxima atividade que é exatamente a decisão baseada em Drools. Quando você executar este programa, você poderá ver no BPM console do jBPM que uma instância do mesmo está realmente em execução:
Eu executei este processo passando meu peso atual, e pra minha desgraça, o processo me mandou ir direto para academia. Veja o resultado de clicar no botão "Diagram":
Legal heim? a grande sacada é deixar todos os seus arquivos do Drools no root do classpath do seu arquivo .BAR e tudo será linkado automaticamente pra você. Nenhum código usando a API do Drools precisou ser escrito, assim como nenhum código de deployment do jBPM.
Bom, agora que mostrei como as coisas funcionam e que a integração realmente funciona, preciso desligar o notebook e me preparar para ir pra academia, pois segundo o jBPM, eu estou muito gordo ;-)
Boas Decisões!













