Marcelo Mrack
unread,Apr 14, 2008, 2:34:50 PM4/14/08Sign in to reply to author
Sign in to forward
You do not have permission to delete messages in this group
Either email addresses are anonymous for this group or you need the view member email addresses permission to view the original message
to treelayer-merlin
Visto as varias coisas que o Merlin precisa para suportar seu
mecanismo de configuracao realimentada, estou estudando o JBoss Rules
(ou Drools) para permitir tais funcionalidades.
Em suma, no JBoss Rules usamos regras simples, como "when <condicao>
then <acao>" e pronto.
Dezenas, centenas, milhares (mais regras) desse tipo podem existir sem
problemas. Regras conflitantes podem co-existir, se realimentar, ter
prioridades diferentes e um monte de coisa mais. A propria engine do
Drools encarrega-se de resolver tudo isso atraves do chamado Algoritmo
RETE, como em um Sistema Especialista de IA (Inteligencia Artificial).
O bom é que as regras ficam planas e acessiveis, e podem ser
persistidas em meios duraveis, em formatos texto, xml ou o que
quisermos, ate dentro de anotacoes se for o caso.
Imagio no Drools como a engine que tem regras que leem as condicoes
dos beans e disparam acoes para gerar a IU. Assim, evitamos milhares
de linha codigo java como "IF ... ELSE ...".
Estou estudando e ate o momento estou com pontos a favor dessa
tecnologia. Ate junho devo ter exemplos concretos de uso para, entao,
em julho, iniciar o desenvolvimento real do projeto, tal como esta no
cronograma no Jira.
Um exemplo de coisa que seria possivel:
rule "label ah direita"
when $bean.getAnnotation(Caption)?.pos == Caption.\[[:alnum:]?\]RIGHT
then $label.horizontalAlignment == SwingConstants.RIGHT
Notem que estou usando sintaxe Groovy misturado com a feature de
expressoes regulares do Drools, dizendo que qualquer bean anotado com
@Caption.pos com um valor que termine com "RIGHT" (ou seja,
BOTTOM_RIGHT, TOP_RIGHT ou mesmo RIGHT) vai fazer com que o
alinhamento do label fique à direita.
Para quem esta vendo isso pode pensar que é um codigo complicado
(claro, concordo que nao deixa de ser). Mas eh um codigo muito menor
do que um equivalente em Java puro; é portavel; pode ser alterado em
tempo de execucao; ja tem suporte de configuracao realimentada,
prioridades, etc.
Finalmente, observa-se que o codigo funcionara para Swing, mas talvez
nao para um JSF, Thinlet ou SWT. Nesse caso, essa regra simplemente é
ignorada pela Engine. Assim, novamente a "beleza" da coisa: as regras
ficam em um repositorio unico e portavel, e quando nao sao aplicadas
ao caso (devido pacote grafico atual nao suportar uma determinada
situacao), ela simplesmente é deixada de lado. Nesses casos, bastaria
reescrever a regra em um formato mais generico, ou criar regras novas
que contemplassem as situacoes desejadas.
Claro, talvez eu esteja "abobado" com uma tecnologia nova...mas eh
fato que uma engine dessas ja traz pornto muita coisa que teriamos que
fazer do zero. Como disse, é estudar para ver...