1. java
  2. android
  3. c#
  4. .net
  5. javascript
  6. php
  7. jquery
  8. html
  9. sql

Open session in view ou Seam Persistence

Caro amigos,

Passei o feriadão estudando, e implementando, as diversas solução para o lazy load do hibernate. Minha aplicação é um sistema EJB3 + JPA + JSF rodando no WildFly 8.1. Pesquisando na internet encontrei diversas solução para o famoso "lazy load initialization exception";

1 - iniciar todos as associações na mão (dar getLista() em tudo que preciso antes de enviar para a view) = péssima

2 - colocar as associações XtoMany como EAGER e trazer tudo sempre. Dois problemas, primeiro tive que trocar alguns List para Set e não podia, pois algumas listas eram listas mesmo (repetições). O outro problema (não sei se foi orelhada minha) mas quando trazia os objetos como EAGER o Hibernate encrencava com o fato da entidade não existir. Tipo assim, trazia Usuario+Papeis+Permissoes, este objeto não existe (poderia criar um DTO, mas ai fica horrível a solução);

3 - trazer na mão as consultas dependendo das necessidades. Aqui até que não há muitas alterações, mas gente JPA Criteria com diversos JOINS e WHEREs fica ruim de escrever!

4 - EJB Stateful com PersistenceContextType.EXTENDED. Ta louco! Se tiver muitos EJBs stateful lá se vai a performance da minha aplicação!

5 - Por fim, mas não menos importante. E a que eu utilizei e está rodando. A Open session in view. Gostei dessa por ser a menos intrusiva no código todo, modelo, EJBs, etc. Mas é claro estou com dois problemas, primeiros a transação sendo controlada na mão e outra é que o meu filtro teve de ser aplicado no raiz da aplicação, ou seja, para tudo eu abro uma conexão e depois fecho, mesmo não sendo necessária.

No final de tudo encontrei uma "solução" que ainda não experimentei e quero ajuda neste ponto dos foristas. O SEAM Persistence. Me parece que ele resolve o problema do lazy load, mas não encontrei como ele faz isso. Pra falar a verdade não encontrei muito a respeito desta solução, sendo assim me deixou de pé atrás :) .

Alguém ai sabe como a solução do SEAM Persistence para lazy load funciona? Vale a pena eu trocar o meu filtro de transação poer ela? Ou temos uma enéssima solução hoje em dia!

Abraços a todos.

  1. Você vai ver essas setas em qualquer página de pergunta. Com elas, você pode dizer se uma pergunta ou uma resposta foram relevantes ou não.
  2. Edite sua pergunta ou resposta caso queira alterar ou adicionar detalhes.
  3. Caso haja alguma dúvida sobre a pergunta, adicione um comentário. O espaço de respostas deve ser utilizado apenas para responder a pergunta.
  4. Se o autor da pergunta marcar uma resposta como solucionada, esta marca aparecerá.
  5. Clique aqui para mais detalhes sobre o funcionamento do GUJ!

0 resposta

Não é a resposta que estava procurando? Procure outras perguntas com as tags ejb hibernate wildfly jpa lazy seam ou faça a sua própria pergunta.