Archive for March, 2007

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

Tempos atrás eu precisava de um recurso para deixar melhor meus códigos em páginas na internet, eu consegui arrumar um plugin legal para o wordpress, mas esse aqui do Google me chamou a atenção:

http://code.google.com/p/google-code-prettify/ 

Acredito que ele possa ser super útil pra ti também =)

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…)

    A mãe do meu sobrinho Gian: Lígia, me mandou uma lista de pessoas que nasceram no mesmo dia que eu:

    • O inventor do fonógrafo,lâmpada e microfone Thomas Edison…
    • O escritor,roterirista e produtor cinematográfico Sidney Sheldon
    • O ator de cinema canadense Leslie Nielsen…
    • O ator cinematográfico americano Burt Reynolds
    • O Francês René Descartes
    • O surfista Kelly Slater
    • A Atriz francesa Guy Loup
    • A atriz de TV americana (particularmente acho uma das mais lindas da atualidade) Jennifer Aniston

    Aqui está a lista completa: http://paginas.terra.com.br/educacao/projetovip/0211.htm

    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