Cada dia tenho mais surpresa, tomara que não chegue a hora que não consiga esconder o nervosismo, mas fiquei muito feliz de estar presente, jutamente com a Fabiane, na lista dos palestrantes das 10 palestras de acordo com o respeitado Ed Ort como “Palestras que você deve assistir no JavaOne 2007″. Por isso estou com o estoque de açaí, justamente aguardando a semana de preparação pro JavaOne :D.
Chegou ao fim essa semana, e também o FISL 8.0, muita coisa de bom aconteceu durante o evento, afinal é a primeiro FISL no qual Java é 100% Livre (GPL), e com isso mais que nunca a tecnologia tende a ganhar mais força ainda em cenários privados e governo de empresas do Brasil, e com certeza do mundo.
A minha palestra e do Márcio Moraes(UOL), foi bem interessante, teve um ótimo número de pessoas, e em breve disponibilizarei os slides na seção “Palestras” do meu blog.
Fiz vários amigos novos, aprendi coisas interessantes, além de ter tido um momento legal, na homenagem do Simon Phips, veja a foto no final. É acho que mais uma vez: Missão cumprida.
Abraços a todos, e até ano que vem se Deus quiser.
O seu Edson(meu pai), sempre me disse que: “não importam terceiros, quando se faz um trabalho bom e honesto, só temos bons lucros a colher”: E né que a palestra da gaúcha(Fabiane Nardon) e do paraense(Eu), já foi agendada com data e com repeteco? Sendo assim, quem for ao JavaOne 2007 e quiser prestigiar agora pode escolher melhor dia e horário para conferir de perto os assuntos que abordaremos lá. Espero que todos gostem. A Comissãodo J1, que avalia os slides, nos passou um ótimo feedback, ainda mais visto que a pessoa que analisou é uma pessoa super famosa por ser “polêmica”, digamos assim, quando o assunto é a opinar sobre algo. Vejam abaixo os dias, hora e sala.
Session ID: TS-4721
Session Title: Implementing Java EE Applications, Using Enterprise JavaBeans (EJB) 3 Technology: Real-World Tips, Tricks, and New Design Patterns Track: Java EE
Room: Hall E - 134
Date: 08-MAY-07
Start Time: 10:50
Session ID: TS-4721
Session Title: Implementing Java EE Applications, Using Enterprise JavaBeans (EJB) 3 Technology: Real-World Tips, Tricks, and New Design Patterns
Track: Java EE
Room: Room 105
Date: 11-MAY-07
Start Time: 13:30
[]´s
Boa Semana!
ps- Essa semana tem o FISL (Forum Internacional de Software Livre)
Um grande paraense morando em Belo-Horizonte: Breno Barros, realizou uma palestra bem interessante numa reunião do MGJUG.
E como projeto interessante deste JUG de lá, eles fizeram um vídeo e disponibilizaram-no, então quem não pode ir, pode aproveitar e ver/conhecer meu amigo Breno falando aqui sobre JBoss Rules, num vídeo hospedado pelo Google Videos: http://video.google.com/videoplay?docid=-5824087316806819115
Eu posso estar enganado, mas eu acredito que o FISLI é para o mundo de Sofware Livre o que o JavaOne é para Java. Isto porque eu vejo o quanto é importante para pessoas de fora do Brasil, virem até aqui e palestrarem. Entre eles até o criador do RubyOnRails: David Heinemeier Hansson.
E melhor do que falar Português é o não precisar pagar tão caro para viajar, visto que o evento acontece em Porto Alegre do dia 12 a 14 de Abril. É bom que revejo alguns amigos que fiz durante o ano que morei lá, além de ir comer um Entrecote ao Molho de vinho no restaurante de culinária Uruguaia Mercardo Del Puerto.
Quando eu trabalhei em um grande projeto na Caixa em Brasília, usavamos o JAXB 1.x para fazer o data binding(marshall/unmarshall) de objetos Java para XML e vice-versa.
Componentes como o XStream da CodeHaus, facilitam bastante a vida, mas ainda é complicado dependendo do cliente homologar uma solução como esta. Sendo assim, vamos ao padrão, já que o JAXB faz parter do WebService Developer Pack, ou seja: Padrão estabelecidos em JSR e controlado pelos mebros no JCP, entre as principais melhorias, podemos citar:
Bibliotecas de Runtime menores economizando assim no uso de memória.
Muito menos classes são geradas se compararmos com o JAXB1.0. Para cada tipo complexo, a nova versão gera uma classe para direto ao invés de criar uma interface e uma implementação.
Suporte a todos os tipos de XML Schema.
Adição de tipos parametrizados.
Suporte a bind Java-to-XML com as anotações do pacote: javax.xml.bind.annotation package.
Sendo assim, vamos a um pequeno tutorial, para mostrar como pode ser simples realizar o binding de objeto para XML e vice versa.
Execute o JAR que é o instalador: java -jar jaxb.jar e instale num lugar do tipo /opt/java/jaxb ou c:/java/jaxb
Não vou citar IDE’s, por isso criei toda uma estrutura baseada em ANT, sendo assim criei um arquivo chamdo de build.properties[1] que fornece informações para o build.xml, já que há uma TASK do JAXB, entao vamos usá-la para que esta realize as tarefas que desejamos, que é gerar as classes que vão estar visíveis pro contexto do JAXB[2].
A Estrutura do projeto é simples:
src (pasta com fontes)
gen-src (pasta com os fontes gerados pelo JAXB)
classes (pasta com as classes compiladas)
schema (caso você queira guardar os XSD’s aqui[3])
Esse lance de trabalhar com DSL’s e JBoss Rules é viciante, você vai criando as coisas e a medida que as coisas vão ganhando forma, você percebe uma necessidade nova, foi assim o que aconteceu quando o Raphael “MPC” me explicou a necessidade do cliente dele, pois ele precisava ter expressões que usassem tanto atributos do POJO de regras, como variáveis dinâmicas.
A classe que resolveu nossos problemas usa basicamente expressões regulares (Java RegExp), da mesma forma que podemos usar para IDE’s syntax hightlighters e code-completions, usamos um para RegularExpressionTokenizer para filtrar de um texto o que é um atributo e uma variável.
Usando para convenção que *atributo* está entre (*), e uma variável está entre <>, então vou deixar aqui algumas dicas caso algum leitor queira fazer algo similar:
[java]
/**
* @author Edgar Silva (edgar@summ-tech.com)
* @since 1.0
*/
public class RulesParser {
/**
* RegExp Java for Attributes *atr*
*/
public static final
String patternForAttributes = “\\*(?:.|[\\n\\r])*?\\*”;
/**
* RegExp Java for Vars
*/
public static final
String patternForDynamicVariables = “\\< (?:.|[\\n\\r])*?\\>“;
[/java]
Para caputarar as variáveis de uma expressão:
[java]
public List getVariablesFromExpression(String anExpression) {
// Create the tokenizer
Iterator tokenizer = new RegularExpressionTokenizer(anExpression,
patternForDynamicVariables, false);
List result = new ArrayList();
// Get the tokens (and delimiters)
for (; tokenizer.hasNext();) {
String varFound = (String) tokenizer.next();
result.add(varFound.substring(1, varFound.length() - 1));
}
return result;
}
[/java]
Testando da forma mais simples de toda, a boa velha main():
[java]
public static void main(String[] args) {
List vars = new RulesParser()
.getVariablesFromExpression(”E ai como vai ser “);
for (String string : vars) {
System.out.println(string);
}
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
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:
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);
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.
O Summanoides, é um projeto de capacitação e reciclagem dos profissionais da Summa que tem interesse em participar. Nesta primeira fase, o estudo foi em cima de Enterprise Java Beans 3.0, onde apresentamos os novos recursos, as diferenças das specs anteriores.
Os resultados foram bem interessantes, além da melhora do desempenho de algumas pessoas que no início eram mais travadas para se comunicar, no final desta fase 1, tivemos grandes avanços.
Na sequência estaremos abordando em Janeiro: Java Server Faces, e em seguida SOA (Services Oriented Architecture), e para reunir e aplicar os conceitos, será desenvolvido um mini ERP para a área de RH da empresa, visto seu atual crescimento. Esse mini-erp, deverá ser usado no Soujava, e a idéia é que ele seja Opensource também!
Alguns resultados:
Palestra: Novidades do EJB 3.0 (Soujava/Dezembro 2006 - Bruno Rossetto e Homero Damico)
No JustJava 2006 estarei apresentando 2 palestras:
01/Dez - Greenbox Suite - Seu Desenvolvimento pode ser RADical
Basicamente a palestra do JavaOne 2006, mas agora com o conforto de falar em casa(Brasil).
02/Dez - Novidades do NetBeans 5.5
Estarei falando com meu grande amigo Cláudio Miranda , que é um NetBeans Power User =) , de acordo com nossa conversa hoje no AIM vamos focar em alguns assuntos, tendo em vista que o tempo para falar de todas as novidades e grandes recursos do NetBeans é um tanto quanto impossível. Escalamos mais ou menos assim a organização dos tópicos:
NetBeans Matisse - Cláudio Miranda
NetBeans como solução para Desenvolvimento Web (NB Web Toolkit) - Edgar Silva
NetBeans Enterprise Dev - Edgar Silva
NetBeans Mobile Kit - Claudio Miranda
NetBeans Profiler - Claudio Miranda
NetBeans - Criando Módulos (Plugins) - Edgar Silva
Há tópicos que gostaria de falar também, mas 1 hora não vai ser possível, mas seriam eles:
NetBeans Desenvolvimento para SOA/BPM/BPEL
NetBeans UML
NetBeans Collab
NetBeans Jackpot
NetBeans Platform
Bom, acredito que o Collab seja possível, o problema é estourar o CofeeBreak e o pessoal perder o lanche =)…. Espero todos lá!
Consegui arrumar um tempo para voltar a me dedicar ao Greenbox, agora de forma mais organizada, pelo menos tudo que estou fazendo já está no CVS ( https://greenbox.dev.java.net/source/browse/greenbox/greenbox4/#dirlist ) .
As atividades de hoje foram simples:
Recompilar o Greenbox para NetBeans 5.5
Removi a dependência do Commons-Logging, visto que o NetBeans agora possui isto por default, há muito tempo sofria com um erro de Classloader, e resolvi com essa mudança.
Otimização de Geração
Já que o Plugin e o Framework são módulos bastante distintos, agora estou abusando do uso do poder o NB Platform, para criar os Arquivos agora uso a seguinte estrutura:
[java]
NbUtils.createFile(project,
new String
(getClasse().getPackageName(). replace
(’.',’/')),
classe.getClassName()+
“.hbm.xml”,hbm); [/java]