Regras no BPEL

O SOA Suite tem um componente muito bom para trabalhar com regras de negócios: o Oracle Business Rules. Ele permite a gente criar regras de maneira simples, utilizando estruturas IF/THEN ou tabelas de decisões que podem ser manipuladas em tempo de execução. O foco desse post é mostrar como utilizar esses componentes dentro de um BPEL, mas ele pode ser utilizado em conjunto com outros componentes ou como um serviço standalone inclusive.

Crie um projeto com um BPEL síncrono, conforme descrito neste post, mas sem o For Each. Altere o xsd do BPEL para que o input, seja do tipo integer. Entre o elemento receiveInput e replyOutput, arraste um componente de Business Rules. Dê dois cliques para editar e clique no "+" para adicionar um novo dicionário. Especifique um nome (IdadeOracleRules), clique em "+" e Add Input Variable, para adicionar uma variável de entrada. Selecione o nó Variables e clique em "+". Informe o nome "idade". Clique na lupa, selecione o xsd dentro de Project Schema Files e escolha o variável de entrada do processo (process). Na aba initialize, informe o seguinte XPath: $inputVariable.payload para inicializar a variável de entrada com o valor de entrada do processo. Clique OK e faça o mesmo para a variável de saída (output), mas sem a necessidade de inicializar, crie a variável com o nome mensagem. Você deverá obter o seguinte resultado:

Create Business Rules
Create Business Rules

Clique OK. Na próxima tela você terá a opção de criar uma tabela de decisão ou gerar as regras utilizando IF/THEN. Para o nosso primeiro conjunto de regras (ruleset) iremos utilizar IF/THEN. Clique em Create Rule.

Renomeie o Ruleset1 para IdadeRuleset (é só clicar em cima do nome para renomear). Renomeie o Rule1 para MaiorIdadeRule e preencha as regras para que se a idade for maior ou igual à 18 ele atribua (assert new) a string "Você é maior de Idade" para a variável mensagem. Você deverá o seguinte código:

IdadeOracleRules
IdadeOracleRules

Repare que além do que estamos fazendo nesse post, há a opção de definir a validade da regra e ativar/desativar ela. Faça o mesmo, só que agora para idade menor que 18.

Volte para o BPEL, dê dois cliques na regra criada. Você pode observar que na aba Dictionary, há um Copy Rules de entrada (Assign Input Facts) e um de saída (Assign Output Facts). Você pode atribuir os valores diretamente do input e output do BPEL, mas para ficar menos acoplado, vamos colocar um Assign antes de chamar as regras que atribui o $inputVariable.payload para $idade e um outro Assign após chamar as regras que pega a saída ($mensagem) e atribui para o output do processo: $outputVariable.payload.

Agora é só executar e você terá o resultado esperado! O código do projeto está disponível aqui.

Sobre: Thiago Galbiatti Vespa

Thiago Galbiatti Vespa é mestre em Ciências da Computação e Matemática Computacional pela USP e bacharel em Ciências da Computação pela UNESP. Coordenador de projetos do JavaNoroeste, membro do JCP (Java Community Process), consultor Oracle, arquiteto de software de empresas de médio e grande porte, palestrante de vários eventos e colaborador de projetos open source. Possui as certificações: Oracle Certified Master, Java EE 5 Enterprise Architect – Step 1, 2 and 3; Oracle WebCenter Portal 11g Certified Implementation Specialist; Oracle Service Oriented Architecture Infrastructure Implementation Certified Expert; Oracle Certified Professional, Java EE 5 Web Services Developer; Oracle Certified Expert, NetBeans Integrated Development Environment 6.1 Programmer; Oracle Certified Professional, Java Programmer; Oracle Certified Associate, Java SE 5/SE 6