Guvnor, sem ele: “Aquela velha Arquitetura SOA”

Como fora dito neste blog tempos atrás o projeto Drools vem ganhando cada vez mais força, na verdade, o que eles chamam de BLIP, que é uma “plataforma inteligente” para softwares diversos.

Numa Arquitetura SOA, um dos pontos mais fortes que precisamos lutar é a “Resiliência”, termo oriundo da física e significa a capacidade de resistir a situações adversas (choque, stress, etc), no caso de SOA: Choque, stress, mudança de cenários e regras, são coisas extremamente comuns e aceitáveis, portanto é importante sabe como lidar com isto.

O Drools ajuda na separação de código de infraestrutura (aqueles famosos sessionFactory.save(obj)), das regras de negócios (if (obj.isValidForLoan())). Óbviamente, esta disciplina em SOA vai muito mais profunda, mas vamos ver um caso mais realista para vermos o valor do Guvnor.

Imagine que você tem uma camada BPM, seja ela qual for, e um ESB da sua escolha, até aqueles que nunca ouvimos falar por aqui, imagine que algumas decisões do fluxo, podem variar totalmente de acordo com alguns cenários, que não vão depender única e exclusivamente do “meche-daqui-liga-daqui” de BPEL, e sim, de fatores de “Regras de Negócio”, baseado no texto meu amigo Edson Tirelli, posso arriscar em chamar isto de “Rules Orchestration”, pois o que pode definir as decisões e lógicas estão mais que documentadas, catalogadas, numa linguagem simples e visual para ninguem menos que humanos lidarem.

Arquitetura de Referência

Arquitetura de Referência

Uma das atividades que eu venho desenvolvendo em algumas das horas vagas é promover um meio de orquestração muito mais baseada em fatos e eventos, do que nos desenhos de processos que são na prática bem poucos dinâmicos, mas isto é um assunto para outro post que fale mais detalhadamente sobre CEP/ESP dentro de SOA, por hora vamos ao Guvnor que é o que interessa.

Guvnor

Com o Guvnor, você pode escrever as regras de forma manual:

Edição das Regras

Edição das Regras

Além disto, pode utilizar de DSL (Domain specific Languages) para facilitar a criação das regras por parte de usuários de negócio:

Editando Regras com ajuda de DSL

Editando Regras com ajuda de DSL

Outro fator importante é a capacidade de realização de testes pelos usuários, eles podem querer editar as regras, e podem querer saber quais impactos isto pode causar, para isto o Drools disponibiliza uma espécie de “TestCase” para Regras, veja a imagem quando todos os testes passam:

TestCase de Regras: Tudo certo

TestCase de Regras: Tudo certo

Mas se você informar algum valor diferente para o teste, você pode antecipar os resultados da execução no TestCase também, na figura a seguir, o resultado não executado 100%:

Hum....não tão certo assim

Hum....não tão certo assim

O Guvnor ainda tem a capacidade de você acessar as regras de negócios usando uma conexão WebDav, ou ainda na chamada do RuleAgent, chamar uma URL ou até mesmo um arquivo físico do filesystem local para a execução das regras.

Acesso WebDav ao repositório

Acesso WebDav ao repositório

Para acesso ao repositório de regras:


try {

props = new Properties();

props.load(ServiceAvaliadorCompras.class.getResourceAsStream("guvnor.properties"));

RuleAgent agent = RuleAgent.newRuleAgent(props);

ruleBase = agent.getRuleBase();

workingMemory = ruleBase.newStatefulSession();

System.out.print("OK");

} catch (IOException ex) {

Logger.getLogger(ServiceAvaliadorCompras.class.getName()).log(Level.SEVERE, null, ex);
}

.....

@WebMethod(operationName = "evaluateStatusByValue")
public String evaluateStatusByValue(@WebParam(name = "amount") Double amount) {

Solicitacao sol = new Solicitacao();

sol.setValorSimplificado(amount);

workingMemory.insert(sol);

workingMemory.fireAllRules();

return sol.getStatus();
}

Fique atento aos eventos que estaremos presentes este ano, com certeza o Guvnor vai estar presente em alguma das palestras.

Até a próxima.

E