Artigo Java Magazine 56 - Workflows em Java

Você precisa estar logado para dar um feedback. Clique aqui para efetuar o login
Para efetuar o download você precisa estar logado. Clique aqui para efetuar o login
Confirmar voto
0
 (1)  (0)

Incremente suas aplicações de Workflow usando recursos avançados do OSWorkflow, como persistência de variáveis e integração com soluções de agendamento.

Esse artigo faz parte da revista Java Magazine edição 56. Clique aqui para ler todos os artigos desta edição

Workflows em Java

Parte 2: Agendamentos, persistência e outros recursos avançados

Incremente suas aplicações de Workflow usando recursos avançados do OSWorkflow, como persistência de variáveis e integração com soluções de agendamento

Esta é a segunda e última parte da série de artigos que visa apresentar a modelagem de fluxos de trabalho em Java. A primeira, apresentada na edição 44, foi focada nos conceitos que envolvem o tema Workflow, apresentando como criar fluxos de trabalho através do OSWorkflow, um engine de workflow open source do grupo OpenSymphony. Neste novo artigo, iremos aprofundar os conhecimentos nesta ferramenta, expandindo o exemplo prático usado anteriormente. A leitura da primeira parte da série é recomendada, mas não é imprescindível: o leitor que não tiver aquela edição deve começar pelo quadro “Relembrando”, que contém todos os conceitos essenciais para acompanhar o presente artigo.

Iniciaremos discutindo dois conceitos importantes e bastante freqüentes em fluxos de trabalho: splits e joins. Outra funcionalidade muito adotada relaciona-se com o agendamento de tarefas que deverão ser executadas em um marco no tempo, como a checagem de um estoque, por exemplo. Para esta tarefa, analisaremos a integração do OSWorkflow com o Quartz, uma ferramenta que auxilia na criação e gerenciamento de tarefas. Também utilizaremos duas funcionalidades descritas, embora não utilizadas, no primeiro artigo: ações globais e comuns. Finalizando, discutiremos a integração do OSWorkflow com o PropertySet, permitindo que os dados que trafegam no workflow sejam persistidos. O Quartz e PropertySet são também projetos open source do mesmo grupo, portanto ambos se integram facilmente ao OSWorkflow.

Junções e Separações

Em situações reais constantemente encontramos tarefas que são concluídas através do esforço colaborativo entre os funcionários de uma organização. Algumas delas podem ser executadas em paralelo, visando garantir uma maior produtividade, outras devem ser executadas somente de forma seqüencial. No OSWorkflow a execução de tarefas em paralelo é concretizada através das separações e junções, comumente conhecidas por joins e splits, na terminologia de workflows.

Quando existe a necessidade de se executar dois passos em paralelo, devemos adotar uma separação no nosso fluxo. Visando tornar mais clara esta idéia, ilustraremos com um exemplo que recorre ao sistema de workflow que construímos na primeira parte deste artigo, que pode ser observado na Figura Q1. Suponha que precisamos dividir o passo Análise do Pedido em dois outros: Verificando Estoque e Validando Cliente. Ambos podem ser necessários, pois estas duas tarefas serão executadas por departamentos diferentes em uma organização.

A Figura 1 ilustra como ficará o fluxo após estas alterações. No primeiro passo, Aguardando Análise, estarão todos os pedidos que acabaram de ser criados e que ainda dependem de uma análise prévia, para atestar que não se trata de um pedido gerado incorretamente pelo sistema ou por descuido de algum cliente. Os pedidos aprovados nesta atividade seguem caminhos paralelos. O primeiro tratará do estoque, atestando que há a quantidade solicitada pelo cliente. O segundo certificará que o cliente não possui impedimentos para concretizar o pedido.

Figura 1. Workflow modificado da aplicação de exemplo

Após aprovado nos dois passos distintos, o pedido retorna para um fluxo seqüencial, através de uma junção. A Listagem 1 apresenta o trecho do código necessário para configurar o OSWorkflow para implementar estes conceitos.

 

Listagem 1. Definindo as separações e junções.

...

<action id="40" name="Aprovar">

  <results>

    <unconditional-result id="40" old-status="Aprovado" status="Aprovado" join="1"/>

  </results>

</action>

...

<action id="1" name="Registrar Pedido">

  <results>

    <unconditional-result id="2" old-status="Aguardando" status="Confirmado" split="1"/>

  </results>

</action>

...

<splits>

  <split id="1">

    <unconditional-result id="3" old-status="Finished" status="Queued" step="2"/>"

A exibição deste artigo foi interrompida :(
Este post está disponível para assinantes MVP

 
Você precisa estar logado para dar um feedback. Clique aqui para efetuar o login
Receba nossas novidades
Ficou com alguma dúvida?