CodeGen - hashCode() e equals(Object) no Netbeans 5.5.1

quarta-feira, 26 de setembro de 2007

Só agora que na nova versão do NetBeans 6.0 é que é possível na IDE criar os métodos equals() e hashCode(Object), o que na verdade é uma mão na roda para muitos desenvolvedores, encontrei alguns desenvolvedores como Vinicius Senger da Globalcode e Jefferson Prestes do time de tradução que me disserem que abriam o eclipse apenas para utilizar o recurso de criação destes métodos....
Pensando nisso, como fazia um tempo que não mexia na plataforma netBeans, decidi criar um plugin para a comunidade e de quebra relembrar as APIs da plataforma.
E o plugin faz justamente isto, gera os métodos equals e hashCode baseados nos campos da classe que esta em foco no editor, o método criar os métodos respeitando o contrato de implementação.

Onde o contrato nos diz que para implementar uma relação equivalente em referencias de objetos não nulo o método:

  • É reflexivo: para qualquer valor de referencia not null para x, x.equals(x) deve retornar true.
  • É simétrico: para qualquer valor de referencia not null para x e y, x.equals(y) deve retornar true se e somente se y.equals(x) retornar true.
  • É transitivo: para qualquer valor de referencia not null para x, y, e z, se x.equals(y) retornar true e y.equals(z) retornar true, então x.equals(z) deve retornar true.
  • É consistente: para qualquer valor de referencia not null para x e y, multiplas invocações de x.equals(y) consistentemente retornarão true ou consistentemente retornarão false.
  • Para qualquer valor de referencia not null para x, x.equals(null) deve retonar false.

Como não poderia deixar de ser, temos que seguir um contrato para seguir hashCode que é:
  • Sempre que for invocado no mesmo objeto mais de uma vez durante a execução de uma aplicação Java, o método hashCode deve sempre retornar o mesmo integer.
  • Se dois objetos são iguais de acordo com a execução do método equals(Object), então chamar o método hashCode em cada um dos dois objetos deve produzir o mesmo resultado inteiro.
  • Não é obrigado que se dois objetos são diferentes de acordo com a execução do método equals(Object) que chamando o método hashCode em cada um dos dois objetos deve produzir resultados inteiros distintos. Entretanto, o programador deve ter cautela, pois produzir resultados inteiros distintos para objetos diferentes podeve causar problemas de performance ao utilizar hashtables.
Essas são as regras para se implementar equals(Object) e hashCode(), além de seguir estas regras o plugin segue a espeficação de Joshua Bloch para a implementação destes métodos no livro Effective Java. Portanto talvez você pode achar a implementação bem similar a forma do eclipse produzir estes métodos.
Segue abaixo alguns screenshots do plugin. O plugin esta internacionalizado, disponivel para inglês e português.
Para instalar o plugin efetue o download do arquivo nbm no portal de plugin do netbeans clicando aqui.
Após instalar o nbm espere enquanto o netBeans faz um "hot deploy", após a instalação, para utilizar o plugin, no editor de um arquivo java basta acessar o menu Refatorar > Implementar hashCode() e equals(Object) ou clicando com o botão direito do mouse e acessando o menu pop up Refatorar > Implementar hashCode() e equals(Object).

Após pressionar o botão será apresentado uma JDialog disponibilizando as fields que você deseja implementar nos métodos.



Após pressionar ok, pronto o código esta pronto =) ,, fácil não.. Eclipse para que ? hehe

E ele até que é esperto, se você tentar criar os métodos em uma classe que já possui os métodos, o plugin dá mensagem.


Se sua classe tiver só a classe equals e quiser só o hashCode por exemplo, ele é bem compreensivo..

Bom é isso, esse é um plugin bem simples, mas que ajuda muito no dia a dia.. peço aos meus queridos amigos que baixem este plugin e testem, se tiver dúvidas ou sugestões, é só avisar.

The Developers Conference - Parte 2

terça-feira, 18 de setembro de 2007



Sábado foi o segundo dia do evento, logo de manhã já se via a correria do Leandro e a galera da Global para preparar o palco para a primeira palestra do dia "Usando JavaFX para aplicações Java EE", o palestrante Jorge (instrutor da Globalcode) começou um pouco nervoso, mas depois que começou, ficou mais calmo, talvez por ser a primeira palestra do dia e ser sábado, percebia-se que a galera estava um pouco com sono mas depois da palestra veio o coffee break e a galera começou a ficar mais animada.
Para a segunda palestra do dia foi uma grande surpresa, pois no lugar da palestra "JavaServer Faces: utilitários e componentes" ninguém mais que Ed Burns voltou para um segundo Key Notes, agora mais técnico, onde pode se aprofundar no JSF, expondo as falhas da atual versão e propondo várias idéias, ponto para Vinicius Senger, que ao montar um esquema de segurança baseado em Anotations conseguiu uma vaga no Expert Group da especificação do JSF 2.0, é o Brasil sendo muito bem representado..
Logo após o Key Notes, Melissa Villela juntamente com a Yara apresentou a paletra "Ajax com JavaServer Faces e Struts" com a dificil tarefa de pegar uma galera pós Ed Burns, a palestra foi muito boa, com ótimas dicas ao frameworks JBoss Seam e Ajax4JSF com exemplos de Drag and Drop e outros componentes.
Todos dispensados para o almoçar no florido Shopping "Frei Boneca", a galera voltou pronta para assistir a próxima palestra com o tema "SOA na prática: integrando .NET com Java EE" apresentado por Renato Bellia e Vinicius, mostrando na prática a integração de uma aplicação .NET e Java EE por Web Services,,,
Nem terminou a palestra de SOA, entrou a equipe de instrutores (Eliane e Ricardo) para apresentar a palestra de "Segurança em aplicativos Web com Java EE", com ótimas exemplos de criptografia e segurança da informação com algoritmos hash..
No final foi reservado para um Painel do Futuro: Java EE 6 - Java SE 6 - Java SE 7 - Web 3.0,, infelizmente não pude assistir este painel apresentado por Bruno Souza, Mauricio Leal, FabioVelloso, Ed Burns e Vinicius Senger..
O que posso dizer é que o evento foi altamente técnico, teve muito a agregar principalmente para os desenvolvedores mais experientes e deixou um gostinho de quero mais, a equipe toda da Globalcode esta de parabéns, só vamos torcer que o ano que vem ocorra mais uma vez ..

The Developers Conference - Parte 1

sexta-feira, 14 de setembro de 2007

Hoje foi o primeiro dia do evento The Developers Conference, um evento patrocinado pela Globalcode, e posso dizer que o resultado foi muito agradável, as 09:00 horas que durou o evento deu a impressão de ter passado muito rápido e deixou um gostinho de quero mais.
Foram vários temas abordados, todos relacionados a Java EE, com uma atenção especial para a participação do engenheiro da Sun Ed Burns, vulgo "Mr. JSF.", o cara para quem não sabe é apenas o spec leader da JSR 314 da especificação do JSF 2.0 .
Como cheguei um pouco atrasado não dá para falar do credenciamento, mas cheguei bem no inicio da 1º apresentação "UML aplicada na plataforma Java EE", apresentado pela Yara e pela Eliana, muito bom por sinal, a Eliana falou sobre os primórdios da diagramação de processos até chegar na Unified Process, depois a Yara passou a régua explicando os tipos de diagrama existentes na UML mas utilizados em projetos Java EE, e terminou falando de gerenciamento de projeto com o auxilio de Wiki.
Depois foi a hora que todos amam, que é a hora do "Coffee-break", com diversos salgadinhos e uns docinhos show de bola..
Depois de todos satifisfeitos, foi a hora do esperado "Key note com Ed Burns", o cara falou de várias tendencias para o futuro, mostrou um quadro sobre a curva do aprendizado de tecnologias web, para o futuro da web podemos esperar interoperabilidade, uma web semântica, e claro tratando de JavaServer Faces, de interfaces muito mais ricas e menos camadas de uma aplicação UI, e deixou claro que podemos esperar logo mais por um grande BOOOM no desenvolvimento mobile, a hora é agora.
Depois foi a vez do Vinicius Senger, que para quem não sabe além de diretor educacional da Globalcode, o cara recentemente entrou para o Expert Group do JavaServer Faces 2.0 (JSR 314) e membro do Dream Team de desenvolvimento do NetBeans, fraco o garoto !!! A sua primeira apresentação foi sobre "Design Patterns para aplicativos Java EE", que em tempo hábil conseguiu explicar com exemplos práticos todos os patterns do GoF, Core JavaEE e alguns Blue Prints..
Depois foi a vez da palestra mais polêmica do dia (para mim), "Eclipse vs NetBeans vs JDeveloper", essa palestra foi apresentada pela equipe Globalcode cada um representando um IDE, o Dr. Spock defendendo o NetBeans, a Melissa defendendo o Eclipse, a Yara "tentando" defender o JDeveloper e o Vinicius fazendo o meio de campo, foi a apresentação mais animada, pois rendeu várias risadas.. não posso deixar de dizer que o melhor no momento é o NetBeans , clap clap clap ... =D, pelas suas novas funcionalidades, o ótimo suporte a Java EE, editor de código,.. e tal, me desculpe Renato ;) ...
Depois foi a vez do Renato Bellia na palestra "Técnicas, patterns e dicas de JPA & Hibernate", um workshop muito valioso, com várias dicas do Renato e exemplos com código fonte, e no final a Eliane complementou com algumas propostas de implementação com 4 técnicas diferentes...
E por fim, foi apresentado pelo Vinicius e pelo Renato, o workshop sobre "Enterprise JavaBeans 3.0" para fechar com chave de ouro, com uma explanada sobre Sessions e Message Driven Beans .
Estava presente também o sempre presente Bruno "Javaman" Souza e Mauricio Leal o que rendeu um bom papo no final...
O que posso dizer que o evento foi altamente produtivo, técnico e com certeza foi muito bem vindo !!!