Importei o projeto livraria-maven-wildfly-completo.zip, que utiliza a tecnologia EJB para implementar o CDI, sem realizar nenhuma alteração e consegui subir o projeto no Wildfly.
Contudo, a funcionalidade de alterar livro não está funcionando. Ao acionar a opção Alterar na lista de livros uma exceção LazyInitializationException
é disparada:
SEVERE [javax.enterprise.resource.webcontainer.jsf.application] (default task-3) Error Rendering View[/livro.xhtml]: org.hibernate.LazyInitializationException: failed to lazily initialize a collection of role: br.com.caelum.livraria.modelo.Livro.autores, could not initialize proxy - no Session
Ao que parece, no momento de solicitar os autores do Livro escolhido, como não há mais nenhum EntityManager
aberto, a aplicação não consegue recuperar essas informações.
Não consegui obter uma solução pesquisando por ai, somente informações desencontradas. Li que os EJBs pode resolver alguns problemas como os padrões Open Session in View
ou Open Entity Manager inView
, por outro lado também li relatos de que a aplicação destes padrões junto a EJBs não seria tão automática.
Alguém poderia me mostrar como implementar esses padrões com EJB? Não gostaria de resolver ativando o fetch="EAGER".