Archive for February, 2007

O que você acha de transformar usuários em efetivos tomadores de decisão quando falamos de regras de negócio. Sabe aquele desejo antigo de UML para Analistas e Código para Programadores, ou melhor ainda: Caixinhas, Bolas, Setas e etc ligadas forma a execução de um processo do sistema! Parece loucura, mas não é. Usando BPM, ESB, JBI e etc, temos várias mecanismos para encaixar essas facilidades.

Errata:Sendo assim podemos criar uma Domain Specific Language (DSL), uma linguagem que é especifica para usuários, onde eles possam entender o que está acontecendo nas regras de negócio do sistema. É mais ou menos isso que o

Sendo assim, criamos um arquivo .DSL , que vai permitir que utilizemos uma linguagem natural que é especifica para usuários, onde eles possam entender o que está acontecendo nas regras de negócio do sistema. É mais ou menos isso que o projeto que estou ajudando tem que fazer, então vamos a um pequeno exemplo: PT_BR.dsl :
[java] Imprima “{msg}”=System.out.println(”{msg}”)
[when]A quantidade produto igual a {value}=p : Produto( estoque =={value})
[then]Chame o comando de continuação de Produto=p.dispatch();
[/java]

[java]rule “Estoque”

when
A quantidade produto igual a 0;
then
Imprima “Estoque zerado”;
Chame o comando de continuação de Produto
end
[/java]

E com uma alteração no Engine de Leitura de Regras:

[java]

Reader dsl =
new InputStreamReader( Thread.currentThread().getContextClassLoader().getResourceAsStream

(”com/summatech/framework/rules/dsl/”+ lang.toString() +”.dsl”));

PackageBuilder builder = new PackageBuilder();
builder.addPackageFromDrl( source, dsl );
[/java]

Agora, temos a possibilidade de trabalhar 100% com DSLs, sendo assim, em idiomas humanos, sendo assim inglês, francês e etc.

Consulte o site do JBoss Rules

Abraços

Edgar

NetBeans DreamTeam

Até que enfim a logo oficial foi escolhida!

Recebi essa notícia na semana do meu aniversário, como não era oficial, eu fiquei aguardando até poder divulgar para os amigos.

Agora é oficial: TS-4721 - Implementing Java EE Applications, Using Enterprise JavaBeans (EJB) 3 Technology: Real-World Tips, Tricks, and New Design Patterns , foi aprovada. Estará palestrando nessa techincal session comigo, a Fabiane Nardon(Vidatis), que além de uma grande amiga, é sem dúvida uma fantástica profissional,  respeitada tanto aqui quanto lá pelos “gringos”.

Só ativar agora o sangue judeu, e procurar as tarifas mais baratas, o hotel mais barato e claro aproveitar esse evento, que é uma experiência impar na vida de qualquer profissional de tecnologia.

Vamos comemorar =)

Pense aqueles momentos que você tem um grande sistema em produção e várias regras de negócios são mudadas devido a movimentos de mercados, ou simplesmente “eventos” internos do seu ERP, como baixa em estoque, ou aumento de vendas, atraso de entregas e etc… Imagine os  tipos de aplicações que sofrem mudanças e compilações diárias devido a suas regras de negócio, vida bastante complicada nao é?

Há um projeto na empresa que deveremos usar alguns agentes inteligentes para evitar recompilação em cenários das regras de negócios devemos usar o JBoss Rules (Drools), para isto, bolei alguns facilitadores para abstrair seu uso, caso num futuro alguém queria usar o Jess, a mudança será natural. O mais interessante, é que já há uma JSR que trata também estas questões de engine de regras (rules) , que é a JSR 094.

Vou aproveitar este post, para dar algumas idéias de arquitetura e design de um mecanismo de execução de regras e alguns exemplos simples. Primeiramente uma interface que encapsula o processamento de regras:

[JAVA]

import javax.rules.RuleException;

public interface RuleProcessor {

public void execute(Object o) throws RuleException;

}

[/JAVA]

Uma classe Abstrata que trata algumas peculiaridades do Drools:

[JAVA]

import org.drools.RuleBase;
import org.drools.RuleBaseFactory;
import org.drools.compiler.PackageBuilder;
import org.drools.rule.Package;

public class AbstractDroolsRulesExecutor {

protected  static RuleBase readRuleBase(String sourceDRL) throws Exception {
//read in the source
Reader source = new InputStreamReader(AbstractDroolsRulesExecutor.class.getResourceAsStream(sourceDRL));
PackageBuilder builder = new PackageBuilder();
builder.addPackageFromDrl( source );
Package pkg = builder.getPackage();
RuleBase ruleBase = RuleBaseFactory.newRuleBase();
ruleBase.addPackage( pkg );
return ruleBase;

}
[/JAVA]

Um executador padrão para regras via Drools.

[JAVA]

import javax.rules.RuleException;
import org.drools.WorkingMemory;

public class DroolsExecutor extends AbstractDroolsRulesExecutor implements RuleProcessor {

public void execute(Object o) throws RuleException {
WorkingMemory wM ;
try {
wM = readRuleBase(”/”+o.getClass().getSimpleName()+”.drl”).newWorkingMemory();
wM.assertObject(o);
wM.fireAllRules();
} catch (Exception e) {
e.printStackTrace();
new RuleException(”Falha ao buscar a Regra : ” + e.getMessage());
}
}
}

[/JAVA]

Sendo assim, com base no nome da classe do objeto passado para ser validado, carregamos um arquivo de regras, e ai disparamos todas as regras associadas. Veja a seguir o exemplo do arquivo de regras:

[java]

#created on: 15/Fev/2007
package com.cardif.erp.produtos

import com.cardif.erp.produtos.Produto;

#list any import classes here.

#declare any global variables here
rule “Estoque”

when
p : Produto( estoque ==0)
then
System.out.print(”Estoque Zerado, por favor reveja!”);
p.dispatch();

end

rule “NomeProduto”

when
p : Produto( nome  ==”Seguro”)
then
System.out.print(”Para seguros nao posso fazer isso…”);
p.dispatch();

end

[/java]

Este arquivo usa uma DSL específica, simples e fácil para codificação, porém podemos criar dicionários baseados na linguagem humana, do tipo:

“envie um email para o {destinatario} quando o estoque for de {risco}”

Imagine que desta forma até seus usuários podem validar suas regras de negócio. Usando as classes que mostrei nesste post, você pode testar as regras de forma extremamente fáceis, veja este exemplo:

[java]

Produto pro = new Produto();
pro.setNome(”Seguro”);
pro.setEstoque(0);

DroolsExecutor d = new DroolsExecutor();
d.execute(pro);

System.out.println(”Executado”);
[/java]

A Google foi uma das primeiras a entrar no nicho de Colaboração de Documentos, se você tem uma conta do GMail, você pode usar muito mais que seu E-mail e Orkut, há o projetos http//docs.google.com , que você pode editar textos e planilhas. Isso parece ser besteira, mas de fato é uma grande solução para edição de documentos de forma colaborativa, ou seja, pessoas separadas físicamente e geograficamente rompem essas meras barreiras através da rede.

Agora a ThinkFree, lançou o MyOffice, que reúne funcionalidades de um (W)Editor , (Ex)Planilha e (P) Ferramenta de Aprensentações, a grande vantagem é que ao invés de Ajax (sucks), eles usam Applets Java! É isso mesmo, Applets Java, para quem achava que eles tinham morrido, estão mais vivos que nunca.Confira você mesmo estes serviços.

ThinkFree