Archive for the java Category

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.

Leia o artigo dele aqui: http://java.sun.com/developer/technicalArticles/javaone2007/top10_ent/ 

[]’s

Ed

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.

Simon Phipps, fazendo uma homenagem durante o FISL, basicamente falando do esforço da comunidade em prol de Java se tornar 100% livre.

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.

As palestras que estarei ministrando serão:

Todos já estão convidados, e espero que gostem bastante das palestras.

Vejo vocês lá.

[]’s

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.

  1. Faça o Downlaod do JAXB no site: http://jaxb.dev.java.net
  2. Execute o JAR que é o instalador: java -jar jaxb.jar e instale num lugar do tipo /opt/java/jaxb ou c:/java/jaxb
  3. 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].
  4. A Estrutura do projeto é simples:
  1. src (pasta com fontes)
  2. gen-src (pasta com os fontes gerados pelo JAXB)
  3. classes (pasta com as classes compiladas)
  4. schema (caso você queira guardar os XSD’s aqui[3])
  5. lib (pasta com bibliotecas)
  • Rode o Script ant
  • Veja os Arquivos gerados [4]
  • Execute a Classe Main [5]
  • Referências

    (more…)

    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);
    }

    }
    [/java]

    Acredito que isso possa ajudá-lo de alguma forma.

    []’s

    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!

    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

    Olá amigos,

    No meu blog do Java.Net fiz alguns posts que tratam de alguns assuntos:

    - Adicionar o Java Source Editor com syntax highlight e code-completion em qualquer JEditoPane
    http://weblogs.java.net/blog/edgars/archive/2007/01/using_the_java.html

    - Listando todos os pacotes do projeto selecionado
    http://weblogs.java.net/blog/edgars/archive/2007/01/netbeans_plugin_1.html

    - Criando um mini-framework a-la Delphi para adicionar componentes da Paletta do Netbeans:
    http://weblogs.java.net/blog/edgars/archive/2007/01/netbeanss_jsf_p.html

    - Artigo que mostra como usar o Drag and Drop da Palleta e envocar Dialogs do NB:
    http://weblogs.java.net/blog/edgars/archive/2007/01/creating_new_pa.html

    Espero que possam te dar boas ideias, agora é só usares a criatividade e boa!

    Abraços!

    Escrevi um post no meu blog do Java.Net que mostra como você pode fazer isto, é de fato extremamente simples. Clique aqui para ler .

    Dê uma conferida no post do meu blog do Java.Net , onde mostro o ZK Framework, e um screenshot de uns modulos NetBeans que tenho feito pra ele.

    Veja Aqui

    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)
      • 2 Novos Blogs:

      Projetos como estes, são grandes motivdadores para você vir trabalhar conosco, fique atendo que a companhia está contratando bastante novos profissionais.

      Abração

      Edgar Silva
      Summa Technologies, Inc

      JACL é uma implementação de TCL em Java, para usuários de WebSphere isto é importante, principalmente para preparação de scripts mais trabalhados.

      Há uma implementação simples para testes no SourceForge, clique aqui para obtê-la.

      Alguns exemplos no Console:

          % package require java
      1.5.1_6

          % set jstr [java::new String "A Java String"]
      java0×1
      % $jstr charAt 2
      J
      % unset jstr

      De fato é bem útil!

      Maiores informações:

      http://www.usenix.org/publications/library/proceedings/tcl97/full_papers/lam/lam.pdf 

      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 :D e o pessoal perder o lanche =)…. Espero todos lá!

      Amigos…

      Hora do NetBeans falar PT_BR 

      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]

      • E agora esta é a nova forma de criar um Arquivo:

      [java]

      public static void createFile(Project project, String path,
      String name,String content) throws IOException
      {

      SourceGroup[] sourceGroups =
      ProjectUtils.getSources(project).getSourceGroups
      (JavaProjectConstants.SOURCES_TYPE_JAVA);
      FileObject targetFolder =
      sourceGroups[0].getRootFolder();
      targetFolder = FileUtil.createFolder
      (targetFolder,”/teste”);
      FileObject target = FileUtil.createData
      (targetFolder, name);
      FileLock lock = target.lock();

      try {

      BufferedWriter bw =
      new BufferedWriter (new
      OutputStreamWriter
      (target.getOutputStream(lock), “UTF-8″));
      bw.write(content); bw.close();

      }
      finally {

      lock.releaseLock();

      }

      }

      [/java]

      Quanto as novas Features:

      Uso de JPA como Annotações

      Usaremos todas as anotações do JPA+Algumas do Greenbox para montar os Casos de Uso Suporte a EJB 3 Usaremos EJB 3 com SessionBeans e Interceptors

      Suporte a Ajax

      Estamos estudando a mais apropriada solução para o Greenbox e seus usuários

      A medida que for melhorando mais coisas estarei reportando aqui! []’s

      Vejam o anuncio divertido do Juggy e os mascotes no Youtube:

      Clicando Aqui