LazyInitializationException + Flex

17 respostas
W

Boa Tarde Pessoal, eu utilizo o BlazeDS +flex mais me deparei com um problema o famigerado LazyInitializationException quando possuo um relacionamento Lazy na minha entidade e esse atributo esta ligado a algum componente no flex atravez d um objeto .as, descobri algumas soluções externas como o dpHibernate mas não conseguir configurar da maneira correta!!

Alguem tem um exemplo aí??

eu utilizo jpa+hibernate!!

obrigada.

17 Respostas

rchgonzaga

wallace.nascimento:
Boa Tarde Pessoal, eu utilizo o BlazeDS +flex mais me deparei com um problema o famigerado LazyInitializationException quando possuo um relacionamento Lazy na minha entidade e esse atributo esta ligado a algum componente no flex atravez d um objeto .as, descobri algumas soluções externas como o dpHibernate mas não conseguir configurar da maneira correta!!

Alguem tem um exemplo aí??

eu utilizo jpa+hibernate!!

obrigada.

E ai Wallace, belz?

Cara, vc ja ta usando OpenEntityManagerInViewFilter ?

Att

W

rchgonzaga durante minha pesquisa eu vi comentários sobre o OpenEntityManagerInViewFilter, muitos diziam que q ser for para usar-lo utilizariam o EAGER!!
mas vc poderia dar uma pequena explicação d como ele funcionária??
e o motivo q vc o utiliza??

desde já agradeço!!

rchgonzaga

wallace.nascimento:
rchgonzaga durante minha pesquisa eu vi comentários sobre o OpenEntityManagerInViewFilter, muitos diziam que q ser for para usar-lo utilizariam o EAGER!!
mas vc poderia dar uma pequena explicação d como ele funcionária??
e o motivo q vc o utiliza??

desde já agradeço!!

Fala Wallace, bom dia

Cara, não sei te explicar com propriedade o que realmente faz o OpenEntityManagerInViewFilter, mas tive problema com Lazy + Flex e configurei o Filtro no web.xml.

Spring OpenEntityManagerInViewFilter org.springframework.orm.jpa.support.OpenEntityManagerInViewFilter Spring OpenEntityManagerInViewFilter /*

Veja se consegue algo.

Att.

W

rchgonzaga obrigada pela ajuda mas o problema é que utilizo EJB e não Spring, vc sabe se existe alguma configuração semelhante para EJB??

rchgonzaga

Wallace,

Você esta usando Blazeds ?? qual a sua estrutura ?

Att

W

sim utilizo Blazeds!!
no flex não utilizo nenhum tipo de framework!! no java eu utilizo EJB+JPA+WEBBEANS !!
bom na minha concepção o OpenEntityManagerInViewFilter é a mesma coisa que o parametro EXTENDES do meu @PersistenceContext

rchgonzaga

wallace.nascimento:
sim utilizo Blazeds!!
no flex não utilizo nenhum tipo de framework!! no java eu utilizo EJB+JPA+WEBBEANS !!
bom na minha concepção o OpenEntityManagerInViewFilter é a mesma coisa que o parametro EXTENDES do meu @PersistenceContext

Perfeito, mas como fica o fluxo da aplicação ? você não poderia usar o Spring + Blazeds ?

G

Wallace, tudo depende da estrutura que você tem. Lazy-load é uma discução grande, porém resumindo sempre que você sai do container ejb você precisa carregar todos os lazy. Em um container a lá spring onde você tem uma arquitetura singular você pode usar artificios como open-session-in-view e afins. Porém em um container ejb não.

Explico: o container ejb não tem vinculo com a página web. Quem é responsável pela session é o container, e não a página. Ou seja, depois que você saiu da camada ejb perde-se todo acesso a entity manager. Há artimanhas como o remote-lazy-load via HT3, mas o autor já avisa: isso não é aconselhavel, e explica bem isso.

Além disso se você quer mesmo isolar os dois lados não é correto expor as entidades JPA para fora do container. Nesse caso usa-se DTO.

Em um projeto que eu fiz com Flex usei EJB como camada de serviço e uma outra camada de façade que na verdade eram webservices, que também são EJBs. Sendo assim cada requisição eu não saía do EJB, então não tinha problemas de lazy-load.

Não conheço o BlaseDS, mas ele não possui uma forma de integrar-se a camada EJB? Você usa aplicação distribuida? Usa DTOs?

Abraços

G

wallace.nascimento:
sim utilizo Blazeds!!
no flex não utilizo nenhum tipo de framework!! no java eu utilizo EJB+JPA+WEBBEANS !!
bom na minha concepção o OpenEntityManagerInViewFilter é a mesma coisa que o parametro EXTENDES do meu @PersistenceContext

Wallace, na verdade o OpenEntityManagerInViewFilter quem controla quando abre e fecha a entity-manager é a camada web. No caso do extends é um artificio para que stateful session beans possam usar a mesma entity manager entre as diversas chamadas, porém ainda é o container que controla a entity-manager.

rchgonzaga

Sobre o BlazeDS, eu acredito que a melhor coisa é integrar com o Spring, pois os serviços que vc deseja expor para o AMF, vc anota com @RemotingInclude.

Dessa forma, vc poderia continuar usando seu EJB, injetando o serviço do EJB dentro do Bean do Spring, ai vc nao tem problema : D

Att.
Rafael Gonzaga

flaviootoni

Ola wallace.
Gostaria de saber se vc conseguiu solucionar o problema?
Pois estou na mesma situação.

UpTheIrons

Bom, eu to usando BlazeDS + Java com EclipseLink, n tive problemas, os objetos vão, mas
numa lentidão que tô quase desistindo. Vou testar a performance do dbHibernate (com hibernate, claro),
se continuar ruim, vou fazer o q estou bastante inclinado a fazer, usar DTOs.

javaflex

UpTheIrons:
Bom, eu to usando BlazeDS + Java com EclipseLink, n tive problemas, os objetos vão, mas
numa lentidão que tô quase desistindo. Vou testar a performance do dbHibernate (com hibernate, claro),
se continuar ruim, vou fazer o q estou bastante inclinado a fazer, usar DTOs.

Também passei por problemas com Lazy no blazeDS. A solução mais “bonita” tecnologicamente foi usar Spring + OpenSessioninView, só que ficou muito lento. Já com DTOs, embora seja chato escrever mais codigo, ficou rapidão, instantâneo mesmo! Acho que cliente feliz é o que mais importa. Só estou pensando em criar um programa pra gerar codigo, assim a parte chata fica automática. Fora outras vantagens do DTO: Tráfego otimizado, liberdade pra ter classes diretamente voltadas pra interface com o usuário, onde muitas vezes as classes nao ficam iguais as de entidades. Mas e no seu caso qual foi a melhor solução?

UpTheIrons

Então, o meu prob com lentidão é apenas qdo o relacionamento entre as entidades são do tipo N x N, daí, eu quebrei essa relação em uma das pontas (no JPA, ou seja, n alterei a integridade no banco), pq n tinha importancia mesmo, mas pra casos maiores, onde há muitos registros, n tive dúvidas, parti pro DTO.

javaflex

Sobre ter quebrado a relação acho que isso prejudica muito seu modelo de classes, deixa de ter relações importantes que poderia usar no lado servidor, fora que outras aplicações que não sejam Flex/BlazeDs deixariam de aproveitar essas relações, como por exemplo aplicação JSP que se dá bem com lazy. Até onde pude saber e testar, DTO foi pra mim a saída mais otimizada pra BlazeDs.

UpTheIrons

Eh q n quis usar DTO pra tudo, e no meu caso essas “quebras” feitas, n farão diferenças, e só quero criar DTOs pros casos mais críticos, e as quebras foram feitas em casos menos relevantes.

javaflex

Entendi seu caso. Só temos que tomar cuidado nos casos em que podem haver mais sistemas a serem desenvolvidos, muitas vezes por outra equipe, para atender outro tipo de frontend, onde seria bom poderem reutilizar nossas classes modeladas de forma íntegra, podendo atender bem outros tipos de soluções que não tenham problema com lazy.

Criado 2 de outubro de 2009
Ultima resposta 7 de jan. de 2011
Respostas 17
Participantes 6