Boa tarde,
Estou com uma duvida sobre casting entre mesma classe que resulta em erro na minha aplicação.
Segue o erro:
O erro ocorre após fazer qualquer deploy no projeto, e é justamente ai que está minha duvida pois na primeira execução após iniciar o servidor, a aplicação é executada normalmente.
Qualquer alteração, como por exemplo, inserindo um espaço em branco no código, ao executar o deploy gera o erro.
Select com hibernate:
Query query = this.entityManager.createNamedQuery("Usuario.Listar");
ListaUsuario = (List<Usuario>)query.getResultList();
System.out.println(ListaUsuario.get(0).getEmail());
Resumindo, a aplicação roda normalmente na primeira execução, qualquer alteração no código, ocasionando deploy o erro comentado anteriormente ocorre na seguinte linha.
Como assim no primeiro deploy?
Voce pega cria o pacote, o arquivo .war, joga no servidor e funciona. Ai se vc parar o servidor e fizer o deploy novamente, pela segunda vez, ele não funciona? Mas e na terceira? Funciona?
[quote=rodrigo.uchoa]Como assim no primeiro deploy?
Voce pega cria o pacote, o arquivo .war, joga no servidor e funciona. Ai se vc parar o servidor e fizer o deploy novamente, pela segunda vez, ele não funciona? Mas e na terceira? Funciona?[/quote]
Na verdade utilizo o autodeploy, e as alterações são feitas diretamente no eclipse sem a necessidade de parar o servidor.
Apos a ocorrência do erro, tenho que reiniciar o servidor para que a aplicação funcione corretamente.
Então está ai o problema. Tem que ver o que o Glassfish oferece exatamente em termos de hot deploy. Mas no geral, isso é algo sempre problemático. No JBoss na maioria das vezes funciona, desde que você não altera assinatura de métodos ou insira novos atributos em classes, ou annotations. Mas tem vezes que eu prefiro forçar um restart pra evitar problemas.
E o erro que você recebeu, ClassCastException, faz todo sentido se pensarmos no que você está fazendo. Duas classes idênticas só são iguais se forem carregadas pelo mesmo classloader. No erro ele está considerando as duas classes diferentes exatamente porque elas foram carregadas por classloaders diferentes. (cada deploy é feito por um classloader diferente). A única solução que posso imaginar pra esse problema seria usar uma ferramenta como JRebel.
[quote=rodrigo.uchoa]Então está ai o problema. Tem que ver o que o Glassfish oferece exatamente em termos de hot deploy. Mas no geral, isso é algo sempre problemático. No JBoss na maioria das vezes funciona, desde que você não altera assinatura de métodos ou insira novos atributos em classes, ou annotations. Mas tem vezes que eu prefiro forçar um restart pra evitar problemas.
E o erro que você recebeu, ClassCastException, faz todo sentido se pensarmos no que você está fazendo. Duas classes idênticas só são iguais se forem carregadas pelo mesmo classloader. No erro ele está considerando as duas classes diferentes exatamente porque elas foram carregadas por classloaders diferentes. (cada deploy é feito por um classloader diferente). A única solução que posso imaginar pra esse problema seria usar uma ferramenta como JRebel. [/quote]
Ótima explicação, muto obrigado.
Já que uso o portal Liferay, vou dar uma pesquisada sobre o JRebel, porque demora alguns minutos para um restart.
Agradeço novamente a atenção,
Abraços.