terça-feira, 26 de maio de 2009

#FalandoemJava 2009

falandoemjava2009

bemvindos


Participei pela primeira vez da terceira edição do falando em java 2009 organizado pela Caelum. Tivemos a presença de Jim Webber da ThoughtWorks. Teríamos a presença também de Bill Burke, mas devidos a problemas de visto, não compareceu ao vento, mas que foi muito bem preenchido a vaga com outra palestra do Jim Webber.

jimwebber2
Tivemos palestras interessantes como a do próprio(e muito esperada) Jim Webber sobre Guerrilha SOA, bom bastante bom humor e fotos engraçadas nos seus slides. A utilização de SOA e comunicação(ponte) entre os sistemas, utilização de um barramento ESB para trocar mensagens entre os sistemas como se fossem hubs.

jimwebber3
Outra palestra bastante interessante foi sobre Jboss Seam e Web Beans onde foi utilizado um exemplo de uma pessoa recebendo pão em casa(injetando o pão na sua casa?), mostrando o que queriam falar mesmo era sobre a especificação JSR 299.

seam_webbeans


Já tinha ouvido falar sobre o framework VRaptor 3, mas não sabia que ele era desenvolvido por brasileiros. Filipe Sabella e Guilherme Silveira apresentaram seu frameworks onde seu objetivo principal é beneficiar o refatoramento, minimizar arquivos de configurações, rápido e fácil para implementação de testes.

vraptor3
vraptor31
Outra palestra bastante interessante foi a Para onde vai a plataforma Java ? ministrada por Anderson Leite e Fábio Kung apresentando o que iria pro JDK 7 e o que iria pro(talvez quem sabe) o JDK 8, 9, 10, 11… que pelo vem por ai, Java vai ficar cada vez mais parecido com scripting…

praondevaijava2
praondevaijava
Como em todo evento nem tudo é 100% tivemos palestras que decepcionaram como a Profissional Java Efetivo, achei muito enrolado, demorava demais para explicar uma coisa simples, só pra atrasar a palestra seguinte sobre Jboss Seam e Web Beans. Sem falar que o nome não tem nada haver com o que foi apresentado na palestra. Pensei que seria algo como mercado de trabalho para desenvolvedores java, o que era necessário para um bom profissional precisava ter, mas não foi nada disso. Fail!

nullpointer


Também tivemos a Arquitetura para aplicações Java de Médio Porte, muito fraca também, pouco interessante. Mas como um todo o evento foi muito proveitoso, devido ao networking, coffeebreak, novos conhecimentos de java, tendência. O evento foi muito bem organizado, mesmo com alguns imprevistos, não conseguiu tirar o brilho que foi o Falando em java 2009. Caelum e equipe, vocês estão de parabéns!!  Pass!

obrigado
Frase do evento: “Um congresso não é nada mais nada menos do que um monte de palestras entre os coffeebreaks” por Fábio Kung.

Bom chega de eventos, de volta a programação normal.

Postar um comentário

segunda-feira, 18 de maio de 2009

Globalcode Open TDC: um sucesso!

openTDC

Ano passado participei do TDC2008 e nesse final de semana ocorreu o Open TDC organizado pela Globalcode, baseado em um projeto muito interessante chamado Open4Edutation onde foram abordados sobre tendências Java como JavaFX, JavaTV, arquiteturas JSF, Spring e Seam e assuntos não relacionados a Java como Agile.

Palestras como robótica e agile que eu não esperava seria grande coisa, mas foram produtivas, bem humoradas e bastante interessantes. Aprendi algumas analogias interessantes como: “Para ser um bom fotografo você precisa ver fotos, para ser um bom fotografo você precisa tirar fotos”, falando em relação a ser um bom programador (ver códigos de outras pessoas e fazer códigos ).

P5170002
Uma ótima palestra sobre o movimento opensource, apresentando sobre a comunidade opensource, vantagens, direitos, questões éticas e etc. Material muito rico e interessante de informações sobre a comunidade.
P5170005
Ótima palestra sobre arquiteturas com JSF, Seam e Spring, ministradas por Dr. Spock e Vinícius Senger, apresentando a evolução das arquiteturas “básicas” às arquiteturas utilizado esses frameworks, desafios e objetivos.

P5170008 P5170011
Palestra sobre movimento ágil e metodologias ágeis como: SCRUM, XP e Lean. Bastante produtiva, o palestrante Claudio Teixeira, apresentando o “caminho das pedras” do Agile de forma bastante humorada, arrancando várias risadas.

P5170016
P5170021
Sobre JavaDTV não esperava muito, mas foi uma das mais interessantes e é uma forte tendência hoje em dia, mas ainda tem muitas coisas para serem definidas, mas é um ramo que se pode ganhar muito dinheiro devido ao poder de interatividade que irá ter com seus usuários.

P5170020
E a palestra que eu mais esperava no dia, que por sinal foi a última foi o Painel: JavaFX, Flex e GWT. Foram apresentados o melhor de cada tecnologia. Gostei muito do JavaFX devido a facilidade de desenvolver RIA e das aplicações rodarem tanto em browser como em desktop, apenas clicando e arrasto pra fora do browser sua aplicação.

A Globalcode estará organizando um outro evento para comunidade Java o JustJava. Onde as inscrições já estão abertas. Vamos aguardar mais um fantástico evento organizado pela GlobalCode, que estão de parabéns. Inscrições do JustJava2009:

justJava
Em uma apresentação achei muito interessante um video que foi mostrado, então procurei e estou compartilhando aqui. Seja aberto as novas possibilidades, “be open”.

Postar um comentário

quarta-feira, 13 de maio de 2009

Seminário Nacional SOA - 20 e 21 de Maio em São Paulo

seminarioSampa

Acontecerá em São Paulo o Seminário Nacional de SOA, a segunda edição do evento, que também será realizado no Rio de Janeiro. Serão discutidos aspectos conceituais de SOA, tendências de mercado, mitos e armadilhas, governança SOA e etc.

O seminário terão como instrutores Francisco Calmon, Ricardo de Castro Barbosa(PMP) e Redson Souza da Silva(PMP). O público alvo para esse seminário são Gerentes de TI, Analistas de negócio, arquitetos de sistemas, desenvolvedores(eu) e demais profissionais envolvidos em arquitetura de sistemas, modelagem e design de serviços.

A empresa SOA – Savoir Faire está a frente desse evento. O livro do professor Thomas Erl lançado no Brasil, foi revisado por eles. Isso mostra a credibilidade e integridade do seminário que será.

Ainda não tenho definido minha participação nesse seminário, e discutindo com uns amigos sobre participar ou não desse seminário, não consegui decidir ainda. Devido ao custo do investimento, que não sei se seria uma boa ou investir em livros e lê-los.

Inscrição individual: R$ 1.500,00 (mil e quinhentos reais) é meio salgado, mas fica a pergunta, será que valerá a pena o investimento? Por mim sim, por outras pessoas mais “experientes” fica duvidoso e duvidoso para o não que não me ajuda nem um pouco nessa tomada de decisão.

Mas fica a dica do evento.

Postar um comentário

sábado, 9 de maio de 2009

@Annotation em acima de tudo

annotation
Quem nunca viu um @annotation em algum código java que atire a primeira pedra. O Annotation surgiu na versão 5 do JDK(codename Tiger) e o cara responsável pela JSR do annotation é o Alex Buckley da Sun MicroSystems.
Annotation são metadados e possui a característica de anotar elementos em Java para adicionar comportamentos a interfaces, classes, métodos, atributos, enum, parâmetros, construtores e etc, para serem processados de forma especial pelo compilador, IDEs, ferramentas de deploy ou em tempo de execução. Definição pela Wikipedia.
 
Existem annotations muito utilizados quando programamos, por exemplo, @Deprecated, @SuppressWarning, @Override, @Inherited entre outras,  A sintaxe para implementar um annotation é similar a de uma Interface, com uma diferença de um arroba ( @ ) antes da palavra chave interface.
public @interface Vjr { }
 
Quando se vai criar a interface de um annotation é importante definir outros seguintes annotations:
@Retention, que aceita um único valor Enumetation do tipo RetentionPolicy que informa ao compilador em que ponto o annotation é descartado. Possuindo três possíveis valores:
SOURCE: Os annotations serão ignorados pelo compilador.
CLASS: Annotations serão adicionados ao arquivo .class, mas que não é necessário ser guardado na memória da VM em tempo de execução.
RUNTIME: Annotation também é adicionado ao .class pelo compilador e é guardada na memória da VM e podem ser lidos utilizando Reflection.
@Target, aceita um único elemento ElementType indica o tipo de elemento do programa será aplicado o annotation. Podendo ser aplicados a interface, classes(TYPE), atributos(FIELD), métodos(METHOD), parâmetros(PARAMETER), construtores(CONSTRUCTOR), annotations(ANNOTATION_TYPE), pacotes(PACKAGE) e para minha surpresa variáveis locais(LOCAL_VARIABLE). Caso não seja especificado nenhum valor para Target, o annotation poderá ser utilizado em todos os elementos do programa.
 
O annotation é capaz de definir valores default para um atributo caso não seja declarado com a palavra chave default. Um exemplo básico de um annotation:

 

@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
public @interface Vjr {
        String getSiteDefault() default ”www.valdemarjr.net”;
        String getBlogDefault();

}
Nos annotations são declarados os métodos, que podem não possuir parametros, que definem os membros do annotation. Mas quando se definem Annotations existem algumas restrições:
  • Um annotation não pode estender outro annotation.
  • O retorno dos métodos declarados em um annotation tem que ser: String, class, tipo enum, annotation ou um array desses tipos anteriores.
  • Não pode lançar exceções, ter a cláusula throws.
  • Não podem se referenciar ou nem ter referência cíclica.
As vantagens é de evitar duplicação de código, deixar implícito algumas funcionalidades que os desenvolvedores não precisam saber, apenas utilizar. Por exemplo com EJB 3.0 podemos definir interfaces remotas e implementação de EJB remotos com apenas um annotation para cada classe, onde antes era preciso configurar arquivos xml gigantes e confusos para dar manutenção.
 
Muitos desenvolvedores, inclusive eu, nunca desenvolveram seu próprio annotation, mas isso será um assunto para um próximo post.

Postar um comentário

sexta-feira, 1 de maio de 2009

Reflection em Java

java_reflection

Conversando com uns amigos da pós-graduação, surgiu a pergunta: O que é reflection? Sabiamos a resposta, mas sabe quando você fica olhando um para cara do outro e acaba falando: “ah é díficil de explicar”. Então essa foi a motivação para esse post.

O que é reflection? reflection é considerado lento? vou “quebrar” o encapsulamento?

Reflection é geralmente utilizando para oferecer a opção da aplicação instanciar classes, invocar métodos e acessar atributos a partir de strings, como o nome do método que se quer invocar, passadas como parametros, fazendo com que a aplicação execute fluxos de controle mais dinâmicos e em tempo de execução.

Frameworks como o JSF e o Struts utilizam reflection para atribuir valores do request dentro das propriedades de um java bean.

Na verdade reflection é bem mais simples do que se imagina, já que ele trabalha na “execução dinâmica” de coisas triviais para os desenvolvedores: classes, métodos, atributos e etc. Basicamente o código consiste em fazer um cast de uma chamada Class.newInstance usado para criar novos objetos para a classe/interface que se deseja utilizar.

A API de Criação de Objetos disponibiliza um método static para programaticamente instânciar classes em tempo de execução fornecendo apenas o nome da classe. Basicamente utilizando Class.forName(“net.valdemarjr.blog.Classe”). Esse método é o mais comum para recuperar a instância, mas não é o único método, possuindo também Class.forName(String name, boolean initialize, ClassLoader loader).

Class reflection = Class.forName("net.valdemarjr.blog.Classe");
IFClasse classe = (IFClasse) reflection.newInstance();
System.out.println(classe.metodo());


Para Invocar métodos é obter o Class e dele você pode iterar entre o array de métodos da classe ou através da assinatura do método. E a invocação do método é através de Method.invoke();

Method[] methods = classe.getMethods();
for (Method m: methods) {
if (m.getName().equals(“metodo”)) {
return m.invoke(classe.newInstance());
}
}


Assim como classes e métodos podem ser acessados em tempo de execução acessar atributos não poderia ficar de fora. Atributos podem ser lidos e escritos em tempo de execução chamando os métodos Field.get e Field.set, classe que é recuperada apartir da instância criada Class.newInstance().

Field field = classe.getField("atributo");
System.out.println("Valor Atributo: " + field.toString());
Object instance = classe.newInstance();
field.set(instance, “novoValor”);


Um detalhe importante é que todas a regras de visibilidade(protected, default, private e etc) ainda são validas, então não adianta tentar acessar um atributo private de uma outra classe, por exemplo, você receberá um java.lang.NoSuchFieldException.

Lógico que reflection não é apenas isso, tanto que tem um livro falando só sobre reflection. Bom fica a dica aí.

Postar um comentário