[quote=guilhermehkr]Para você fazer um teste pode colocar @ResquestScoped para ver se ele vai chamar mesmo o preDestroy.
Realmente não precisa de nada além da anotação para este método ser chamado quando irá morrer o Bean.[/quote]
Fiz o teste sugerido, engraçado a cada requisição ele chama o metodo[code] @PreDestroy
public void destroy(){
System.out.println("\n\n\n\n\n… Dessssssstroi … \n\n\n\n\n\n\n");
}[/code]
mas eu não mudo de url… e quando mudo de URL ai ele não chama…
parece haver erro nessa idéia…
Coloque mais informações para nós!
Claro, se puder.
Se você colocou escopo de request e funcionou, irá funcionar com viewScoped.
Me diga, você esta utilizando navegação do JSF ?
Implicita ou explicita ?!
Pelo que eu entendo eu uso é navegação implicita, mas uso os dois tipos,
também uso o PrimeFaces 2.2.1 que nesse caso é o que faz chamadas ajax, mudando (atualizando) três lugares da pagina,
dentro do template, o que ele muda? Muda a url, o titulo da pagina, o conteúdo especifico daquele usuário.
Também isso é mapeado por um filter, que verifica se tal usuário tem acesso ou não…
quando não ele redireciona, mas nesse caso o usuário em questão é o admin do sistema e tem acesso a tudo…
Guilherme suas perguntas pra mim parece ter sentido…
mas não consegui tirar proveito delas ainda…
agradeço se você puder dar mais algumas explicações…
Para mim faz sentido o ManagedBean passar pelo método @PreDestroy quando você tiver feito qualquer requisição ajax, CLARO se ele estiver erm escopo de requisição, já se ele estiver com o escopo de visão, não deverá passar, somente quando navegar.
Eu perguntei sobre a navegação, pois a uns dois meses atrás tive um problema parecido e a causa era ter utilizado navegação implicita, por isso voltei a usar a explicita, mesmo no JSF 2.0.
Sem contar que no projeto atual nos NÃO utilizamos a navegação do JSF e sim fazemos a navegação total por javascript (sei que é loucura, mas é pedido do cliente) e com isto não temos morte dos nossos beans.
Olha, eu não sou o melhor nisto, mas posso arriscar mais um palpite:
Já que esta utilizando JSF 2.0 tente utilizar o ajax nativo do framework, o projeto que mexi a dois meses atrás tive problemas quanto a interação do PrimeFaces com JSF, neste sentido de ajax e afins.
Qual foi a minha solução: Colocar todos os componentes, ou quase todos, do PrimeFaces com ajax =“false” e utilizar <f:ajax> do JSF.
Por favor poste o que aconteceu depois deste teste.
Desculpe pela falta de opções de solução.
Para que um método anotado com @PreDestroy seja executado, ou seja o @ManagedBean seja destruido e necessário que a requisição
para esta navegação seja feitra seja feita via POST através de um commandLink ou commandButton por exemplo.
ManagerBean
[code] @ManagedBean @ViewScoped
public class HomeController implements Serializable {