Dúvida com CDI: ConversationScoped no JSF

olá, galera!

eu vinha desenvolvendo um sistema web usando JSF 2.0, JPA 2.0 e tomcat 7. Com cerca de 70% do sistema concluido decidi trocar o container tomcat pelo glassFish 3.1.1. Então vi que os autores dizem que em um container de aplicações, o CDI é uma alternativa mais poderosa do que os managed beans do JSF.

Comecei a testar o CDI na minha aplicação, mas surgiram varias dúvidas em relação ao @ConversationScoped. Me parece que ele é o equivalente ao @ViewScoped do JSF, logo, eu teria que fazer essa troca. Mas não esta sendo tão simples assim porque o @ConversationScoped deve ser iniciado e fechado explicitamente, ao contrário do @ViewScoped, que é destruido pelo container quando outra página é carregada.

Nos exemplos que vi sobre o fechamento de um @ConversationScoped, geralmente um commandButton chama o metodo no respectivo bean que encerra a conversão. Mas na minha aplicação uso muitos compositions, como por exemplo uma barra de menus que carrega outras páginas e aparece em quase todas as views. Assim, como eu poderia encerrar um atual @ConversationScoped e iniciar outro, uma vez que o composition é usuado por várias páginas ?
E tb pq se eu iniciar uma nova conversação sem encerrar a atual, eu recebo

org.jboss.weld.exceptions.IllegalStateException: WELD-000214 Attempt to call begin() on a long-running conversation

??? valeu :smiley:

Rafael

Cara, também estou testando esse escopo.
Ainda tenho dúvidas de onde realmente abrí-lo, mas parece que o @PostConstruct de um Managed Bean seja a melhor opção, já que no constructor o “Conversation” não foi injetado ainda.
Mas pra resolver esse seu problema, faz uma verificação com o método isTransient() pra ver se ele já foi aberto anteriormente.

no caso do Spring, ocorre o mesmo problema, mas aqui há uma solução muito boa: http://www.esseconhece.com.br/programacao/java/disponibilizando-viewscope-para-spring/

então no meu caso, deixei de usar CDI, e estou usando Spring; o viewScope funciona perfeitamente, igual na implementação padrão do JSF 2

Olá,

Estou com o mesmo problema, você encontrou uma solução?

Abs

Esse tópico é antigo, mas como alguém já o ressuscitou só acho bom deixar claro que “View Scope” e “Conversation Scope” são coisas bem diferentes.

1 curtida

Mesma dúvida, alguém sabe a resposta?

Os dois scopos são diferentes vai da necessidade
http://esseconhece.com.br/disponibilizando-viewscope-para-spring/
http://www.springfuse.com/2013/03/05/jsf2-conversation.html