ThroubleShooting:Adicionando AutoComplete XHTML PrimeFaces projeto Maven

Olá Pessoal,

No post de hoe veremos um troubleshooting  quando criamos um projeto Maven e precisamos do auto-complete  nos XHTML.

Lets go…

Starting…

Ao criar um projeto maven para uma aplicação web, por default ele não fornece o autocomplete para arquivo xhtml, e evidente que para componentes externos como PrimeFaces também não terá por default .

E como resolver?

A solução não é das melhores, mas é o que tem que ser feito, vamos ver os passos:

1. Se vc usar tomcat/jetty baixe a versão  no caso do exemplo estou usando Jetty 8.x

2. Garante que você tem o .jar do primefaces adicionar ao pom do projeto

3. clique com o botão direito no projeto >> configure >> add...

 

Na tela que abrir clique em next, observe o arquivo web.xml vai sofrer alteração, pois vamos adicionar suporte ao JSF.

Depois clique em Finish.

Se você não tem um servidor de aplicação configurado no seu eclipse, vá em Windows >> preferences >> Server >> Runtime Environment e adicione.

** Você deve apontar para a pasta onde tá o servidor instalado, no caso do jetty ele não é instalado, após descompactar o arquivo .zip, apenas aponta para a raiz da pasta descompactada. Assim o Eclipse encontrará o .jar que ele precisa.

Vou ficando por aqui, espero que tenham curtindo o post.

Abraços,  see ya!!

Troubleshooting: Evitando NonUniqueObjectException Hibernate

Olá Pessoal,

O post de hoje é mais um throubleshooting e com o Hibernate novamente. Em algum momento durante o desenvolvimento é possível que você se depare com a exceção NonUniqueObjectException Hibernate. Mas iai, o que fazer?

Lets go…

É muito comum ver essa exceção quando estamos trabalhando com o Hibernate e precisamos, em muitos dos casos, salvar ou atualizar um objeto. Mas  nem sempre as coisas acontecem como esperamos ao dar um saveOrUpdate ou update, dai explode a exceção NoUniqueObjectException. O que fazer?

1. Descobrir o motivo da exceção.

2. Buscar a solução ideal.

O conceito de persistência de objetos proíbe a existência de duas instâncias para o mesmo objeto em memória e ao tentar salvarOrUpdate temos a exceção acima. Mas o que significa?

Em poucas palavras, quando o hibernate lança NonUniqueObjectException significa que tentei salvar um objeto que já estava carregado na memória em uma instância diferente.

E como resolver?

A forma correta para solução é fazer um merge(), pois este efetuará a fusão dos objetos e no final a funcionalidade é a mesma do método saveOrUpdate.

Ou

Usar o flush() antes de saveOrUpdate, pois o flush() força a sincronização dos objetos em memória com o banco de dados.

Simples não? Mas pode ter certeza que as chances de você ficar horas e horas tentando arrumar são grandes. Confesso que na primeira vez que tive essa exceção gastei um bom tempo até entender e descobrir o motivo dela e onde que explodia de fato.

Vou ficando por aqui. Espero que tenham gostado do post.

See ya!!

Throubleshooting: Primefaces 3 componentes não carregam

Olá pessoal! 

Mais um post de throubleshootting, e esse aqui é de matar. Talvez você passe por isso. Olha a situação.

Contexto

Você migrou de versão do Primefaces 2.x para 3.x,  mas vê que os componentes não estão sendo carregados após fazer o deploy da aplicação. O que fazer? Bem, para começar vc vai tentar de tudo:

– Verificar o web.xml (não é necessário na 3.0, mas você já está desesperado e vai olhar)

– Ver se os .jars estão na pasta lib

– etc.

Mas, dai vem a solução.

Solução

N versão 3.x do PrimeFaces o xmlns mudou, ele agora é assim: xmlns:p=”http://primefaces.org/ui”> e se tiver apontando para versão da 2.x xmlns:p=”http://primefaces.prime.com.tr/ui”> não vai funcionar, ou seja, os componentes primefaces não serão carregados.

Ufa!! Sofri com isso aí por umas horas, porque não tinha visto em nenhum lugar no site do primefaces essa informação destacada, mas olhando direito nos exemplos dele do guide, está atualizado.

Enfim, tá ai mais um probleminha chato do dia a dia que podemos passar.

Abracos, see ya!!

Throubleshooting: Tomcat Listener not found

Olá Pessoal, 

Mais um throubleshooting do dia. Não é muito difícil passar por essa quando estamos usando o eclipse. Se vc usa o maven ou adiciona as bibliotecas na mão, pode cair no contexto a seguir. Vamos ver. 

Contexto 

Tudo preparado já no seu projeto e vc resolve executar no servidor somente para ver o “hello world”. E daí, o que acontece? 

GRAVE: Error configuring application listener of class com.sun.faces.config.ConfigureListener

java.lang.ClassNotFoundException: com.sun.faces.config.ConfigureListener 

 

Mas qual o motivo? 

Simples! Mesmo vc adicionando as dependências de lib ao seu projeto, quando vc faz um deploy o tomcat busca as libs na pasta lib do projeto, isso é o correto, certo? Mas o Eclipse não copia os arquivos automaticamente para o lib. E o tomcat, ao chegar lá não vai achar aquelas libs externas que precisa, como a do JSF, primefaces, richfaces etc. No caso dos componentes JSF, ele apenas não é exibido no browser, mas a do JSF por exemplo, ele da error 404 not found.

Solução

Essa é difícil. Copiar os .jars  para a pasta lib do projeto e pronto. Você pode fazer essa cópia automática, dizendo ao maven para colocar as libs já no diretório lib do projeto. Daí é só ver na documentação. 

Abracos, vou ficando por aqui. Espero que estejam curtindo os posts de thoubleshooting.

See ya!!

Throubleshooting MySql Case Sensitive Criteria Hibernate

 

Olá Pessoal,

Mais um thoubletshooting, e dessa vez é com o Mysql. É aquela velha frase “vivendo e aprendendo”. No dia a dia trabalho com outros bancos de dados, mas nos meus projetos house-made gosto do mysql.

Um dia desses estava desenvolvendo e um dos requisitos era considerar o case-sensitive. Dai vou lá feliz da vida usando o Criteria do Hibernate com o MySql:

criteria.add(Restrictions.eq(“email”, email));

criteria.add(Restrictions.eq(“password”, password));

E o que acontece?

Simplesmente se tiver:

camilo@camilolopes.com com o password: 123cam

e

camilo@camilolopes.com com o password: 123CAM

Teremos dois registros no retorno.

Daí fui ver na documentação o motivo e achei isso:

http://dev.mysql.com/doc/refman/5.0/en/case-sensitivity.html

Solução

Como podemos ver na documentação acima, o Mysql trata Varchar como case-insensitive. Daí ao criar a tabela devemos setar a flag Binary. Caso  a tabela já exista, basta dar um alter table

ALTER TABLE `user` MODIFY COLUMN `EMAIL` VARCHAR(255) BINARY CHARACTER SET latin1 COLLATE latin1_bin DEFAULT NULL;

Pronto. E resolvido.

Vou ficando por aqui.

See ya!!!