Problemas com OpenSessionView

21 views
Skip to first unread message

valdi.ads

unread,
Mar 11, 2015, 1:42:00 PM3/11/15
to ce...@googlegroups.com
Olá pessoal, estou implementando LAZY em um p:dataTable  do meu projeto JSF com Primefaces para melhorar a performance do meu App. Para isso tive que implementar OpenSessionView para que os relacionamentos fetch=FetchType.LAZY pudessem ser acessados. Até esse ponto tudo funcionou direitinho na minha dataTable consigo acessar os objetos relacionados via LAZY, entretanto na mesma tela abro um Dialog com outros Atributosobjeto do objeto listado no datatable e nesse momento a sessão com o banco já está fechada e devido o relacionamento LAZY o console me apresenta o erro ERROR: org.hibernate.LazyInitializationException..
Alguém poderia me indicar uma saída para isso?
Meu MangerBean é ViewScope.
Tecnologias do Projeto: JSF+Primefaces+Hibernat+JPA+Spring

Rafael Ponte

unread,
Mar 11, 2015, 1:47:23 PM3/11/15
to ce...@googlegroups.com
Oi valdi,

O Open Session In View (OSIV) só evita o LazyInitializationException (LIE) dentro de uma mesma requisição. Qualquer relacionamendo LAZY não inicializado na requisição anterior e que é acessado na requisição seguinte recebem o erro LIE de cara.

Uma solução para seu caso é antes de abrir o dialog você recarregar a entidade ou o seu relacionamento, dessa forma você evita o problema.

Um abraço!
 

--
Você recebeu essa mensagem porque está inscrito no grupo "CEJUG" dos Grupos do Google.
Para cancelar inscrição nesse grupo e parar de receber e-mails dele, envie um e-mail para cejug+un...@googlegroups.com.
Para postar nesse grupo, envie um e-mail para ce...@googlegroups.com.
Acesse esse grupo em http://groups.google.com/group/cejug.
Para mais opções, acesse https://groups.google.com/d/optout.



--
Rafael Ponte
TriadWorks | Formação Java
http://cursos.triadworks.com.br

valdi.ads

unread,
Mar 11, 2015, 2:06:27 PM3/11/15
to ce...@googlegroups.com
Olá Rafael Ponte, muito obrigado por tirar minha dúvida. Poderia me descrever de uma forma mais detalhada de como efetuar o recarregamento da entidade ou o relacionamento?

Rafael Ponte

unread,
Mar 11, 2015, 2:13:20 PM3/11/15
to ce...@googlegroups.com
Olá,

Seria algo semelhante ao código abaixo (na página):

<h:commandButton action="#{bean.abreModal(produto)}" value="Abrir Modal" />

E no managed bean:

public void abreModal(Produto selecionado) {
    this.produto = this.produtoDao.busca(selecionado.getId());
}

Deu para entender? Basta você recarregar a entidade, que o OSIV atual evitará o LIE.

valdi.ads

unread,
Mar 11, 2015, 2:30:26 PM3/11/15
to ce...@googlegroups.com
Olá rafael tentei fazer mais não funcionou sua ideia..veja abaixo como fiz:
O commandButton  que seta o objeto da datatable e abre o dialog:
                            <p:commandButton id="btnContrato"
                                oncomplete="dialogContrato.show();"  icon="ui-icon-search"
                                update=":formewidGetContrato:dialogContrato"
                                title="Visualizar Contrato">
                                <f:setPropertyActionListener target="#{contratoBean.contrato}"
                                    value="#{varcontrato}" />
                            </p:commandButton>
Tentei recarregar o contrato no banco no metodo get do contrao do meu Bean:
    public Contrato getContrato() {
        this.contrato = contratoService.buscarPorId(contrato.getId());
        return contrato;
    }
não deu certo..deu erro.

Em quarta-feira, 11 de março de 2015 15:13:20 UTC-3, rponte esc
reveu:

Jocelio Lima

unread,
Mar 11, 2015, 2:32:42 PM3/11/15
to Cejug
Posta o stack do erro
Att,
     Jocélio Lima

valdi.ads

unread,
Mar 11, 2015, 2:52:10 PM3/11/15
to ce...@googlegroups.com
<p:commandButton id="btnContrato" action="#{contratoBean.regarregarContrato(varcontrato)}"

                                oncomplete="dialogContrato.show();"  icon="ui-icon-search"
                                update=":formewidGetContrato:dialogContrato"
                                title="Visualizar Contrato">
                                <f:setPropertyActionListener target="#{contratoBean.contrato}"
                                    value="#{varcontrato}" />
                            </p:commandButton>

public void regarregarContrato(Contrato contrato2){
        System.out.println("REgarrega Contrato");
        this.contrato = contratoService.buscarPorId(contrato2.getId());
    }
STACK:
REgarrega Contrato
Hibernate: select contrato0_.id as id4_0_, contrato0_.cliente_id as cliente8_4_0_, contrato0_.contaReceber_id as contaRec9_4_0_, contrato0_.curso_id as curso10_4_0_, contrato0_.dataConcluido as dataConc2_4_0_, contrato0_.dataRegistro as dataRegi3_4_0_, contrato0_.instituicaoEnsino_id as institu11_4_0_, contrato0_.observacao as observacao4_0_, contrato0_.periodoConclusao as periodoC5_4_0_, contrato0_.situacaoContrato as situacao6_4_0_, contrato0_.tipoContrato as tipoCont7_4_0_, contrato0_.turmaFormatura_id as turmaFo12_4_0_, contrato0_.user_id as user13_4_0_ from Contrato contrato0_ where contrato0_.id=?
ERROR: org.hibernate.LazyInitializationException - could not initialize proxy - no Session
org.hibernate.LazyInitializationException: could not initialize proxy - no Session
    at org.hibernate.proxy.AbstractLazyInitializer.initialize(AbstractLazyInitializer.java:167)
    at org.hibernate.proxy.AbstractLazyInitializer.getImplementation(AbstractLazyInitializer.java:215)
    at org.hibernate.proxy.pojo.javassist.JavassistLazyInitializer.invoke(JavassistLazyInitializer.java:191)
    at br.com.locus.model.Cliente_$$_javassist_22.getPessoa(Cliente_$$_javassist_22.java)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
    at java.lang.reflect.Method.invoke(Unknown Source)
    at javax.el.BeanELResolver.getValue(BeanELResolver.java:87)
    at com.sun.faces.el.DemuxCompositeELResolver._getValue(DemuxCompositeELResolver.java:176)
    at com.sun.faces.el.DemuxCompositeELResolver.getValue(DemuxCompositeELResolver.java:203)
    at com.sun.el.parser.AstValue.getValue(AstValue.java:116)
    at com.sun.el.parser.AstValue.getValue(AstValue.java:163)
    at com.sun.el.ValueExpressionImpl.getValue(ValueExpressionImpl.java:219)
    at com.sun.faces.facelets.el.TagValueExpression.getValue(TagValueExpression.java:109)
    at javax.faces.component.ComponentStateHelper.eval(ComponentStateHelper.java:194)
    at javax.faces.component.ComponentStateHelper.eval(ComponentStateHelper.java:182)
    at javax.faces.component.UIOutput.getValue(UIOutput.java:169)
    at org.primefaces.component.outputlabel.OutputLabelRenderer.encodeEnd(OutputLabelRenderer.java:36)
    at javax.faces.component.UIComponentBase.encodeEnd(UIComponentBase.java:875)
    at javax.faces.component.UIComponent.encodeAll(UIComponent.java:1786)
    at org.primefaces.component.panelgrid.PanelGridRenderer.encodeDynamicBody(PanelGridRenderer.java:92)
    at org.primefaces.component.panelgrid.PanelGridRenderer.encodeBody(PanelGridRenderer.java:60)
    at org.primefaces.component.panelgrid.PanelGridRenderer.encodeEnd(PanelGridRenderer.java:49)
    at javax.faces.component.UIComponentBase.encodeEnd(UIComponentBase.java:875)
    at com.sun.faces.renderkit.html_basic.HtmlBasicRenderer.encodeRecursive(HtmlBasicRenderer.java:312)
    at com.sun.faces.renderkit.html_basic.GridRenderer.renderRow(GridRenderer.java:185)
    at com.sun.faces.renderkit.html_basic.GridRenderer.encodeChildren(GridRenderer.java:129)
    at javax.faces.component.UIComponentBase.encodeChildren(UIComponentBase.java:845)
    at org.primefaces.renderkit.CoreRenderer.renderChild(CoreRenderer.java:59)
    at org.primefaces.renderkit.CoreRenderer.renderChildren(CoreRenderer.java:47)
    at org.primefaces.component.fieldset.FieldsetRenderer.encodeContent(FieldsetRenderer.java:90)
    at org.primefaces.component.fieldset.FieldsetRenderer.encodeMarkup(FieldsetRenderer.java:72)
    at org.primefaces.component.fieldset.FieldsetRenderer.encodeEnd(FieldsetRenderer.java:46)
    at javax.faces.component.UIComponentBase.encodeEnd(UIComponentBase.java:875)
    at org.primefaces.renderkit.CoreRenderer.renderChild(CoreRenderer.java:63)
    at org.primefaces.renderkit.CoreRenderer.renderChildren(CoreRenderer.java:47)
    at org.primefaces.component.dialog.DialogRenderer.encodeEnd(DialogRenderer.java:40)
    at javax.faces.component.UIComponentBase.encodeEnd(UIComponentBase.java:875)
    at javax.faces.component.UIComponent.encodeAll(UIComponent.java:1786)
    at com.sun.faces.context.PartialViewContextImpl$PhaseAwareVisitCallback.visit(PartialViewContextImpl.java:518)
    at com.sun.faces.component.visit.PartialVisitContext.invokeVisitCallback(PartialVisitContext.java:183)
    at javax.faces.component.UIComponent.visitTree(UIComponent.java:1612)
    at javax.faces.component.UIComponent.visitTree(UIComponent.java:1623)
    at javax.faces.component.UIForm.visitTree(UIForm.java:371)
    at javax.faces.component.UIComponent.visitTree(UIComponent.java:1623)
    at javax.faces.component.UIComponent.visitTree(UIComponent.java:1623)
    at com.sun.faces.context.PartialViewContextImpl.processComponents(PartialViewContextImpl.java:376)
    at com.sun.faces.context.PartialViewContextImpl.processPartial(PartialViewContextImpl.java:297)
    at javax.faces.context.PartialViewContextWrapper.processPartial(PartialViewContextWrapper.java:183)
    at javax.faces.component.UIViewRoot.encodeChildren(UIViewRoot.java:981)
    at javax.faces.component.UIComponent.encodeAll(UIComponent.java:1779)
    at com.sun.faces.application.view.FaceletViewHandlingStrategy.renderView(FaceletViewHandlingStrategy.java:391)
    at com.sun.faces.application.view.MultiViewHandler.renderView(MultiViewHandler.java:125)
    at org.springframework.faces.webflow.FlowViewHandler.renderView(FlowViewHandler.java:99)
    at com.sun.faces.lifecycle.RenderResponsePhase.execute(RenderResponsePhase.java:121)
    at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:101)
    at com.sun.faces.lifecycle.LifecycleImpl.render(LifecycleImpl.java:139)
    at javax.faces.webapp.FacesServlet.service(FacesServlet.java:594)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
    at br.com.locus.filters.CharacterEncodingFilter.doFilter(CharacterEncodingFilter.java:25)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
    at org.springframework.orm.jpa.support.OpenEntityManagerInViewFilter.doFilterInternal(OpenEntityManagerInViewFilter.java:113)
    at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:76)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
    at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:368)
    at org.springframework.security.web.access.intercept.FilterSecurityInterceptor.invoke(FilterSecurityInterceptor.java:109)
    at org.springframework.security.web.access.intercept.FilterSecurityInterceptor.doFilter(FilterSecurityInterceptor.java:83)
    at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:380)
    at org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:97)
    at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:380)
    at org.springframework.security.web.session.SessionManagementFilter.doFilter(SessionManagementFilter.java:100)
    at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:380)
    at org.springframework.security.web.authentication.AnonymousAuthenticationFilter.doFilter(AnonymousAuthenticationFilter.java:78)
    at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:380)
    at org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter.doFilter(SecurityContextHolderAwareRequestFilter.java:54)
    at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:380)
    at org.springframework.security.web.savedrequest.RequestCacheAwareFilter.doFilter(RequestCacheAwareFilter.java:35)
    at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:380)
    at org.springframework.security.web.authentication.www.BasicAuthenticationFilter.doFilter(BasicAuthenticationFilter.java:177)
    at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:380)
    at org.springframework.security.web.authentication.AbstractAuthenticationProcessingFilter.doFilter(AbstractAuthenticationProcessingFilter.java:187)
    at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:380)
    at org.springframework.security.web.authentication.logout.LogoutFilter.doFilter(LogoutFilter.java:105)
    at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:380)
    at org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:79)
    at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:380)
    at org.springframework.security.web.FilterChainProxy.doFilter(FilterChainProxy.java:169)
    at org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:237)
    at org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:167)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:225)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:123)
    at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:168)
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:98)
    at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:927)
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:407)
    at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1001)
    at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:585)
    at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:312)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
    at java.lang.Thread.run(Unknown Source)
Mar 11, 2015 3:49:02 PM com.sun.faces.context.PartialViewContextImpl$PhaseAwareVisitCallback visit
SEVERE: javax.el.ELException: /restrito/listaContrato.xhtml @156,65 value="#{contratoBean.contrato.cliente.pessoa.nome}": Error reading 'pessoa' on type br.com.locus.model.Cliente_$$_javassist_22

Davi Mustafa

unread,
Mar 11, 2015, 4:28:28 PM3/11/15
to ce...@googlegroups.com
tentou Join fetch na tua consulta?
Davi Mustafa

Rafael Uchôa

unread,
Mar 11, 2015, 9:14:45 PM3/11/15
to ce...@googlegroups.com
Duas coisas:

O problema está na instância de pessoa:


"/restrito/listaContrato.xhtml @156,65 value="#{contratoBean.contrato.cliente.pessoa.nome}": Error reading 'pessoa' on type br.com.locus.model.Cliente_$$_javassist_22"

- Como foi que você que implementou o OpenSessionView ?

- A instância de pessoa dentro do cliente que está dentro do contrato, está retornando alguma coisa ? Ou seja, está cadastrado e o relacionamento está correto ?

O lazy traz logo todos os atributos do tipo primitivo (String, int, long, etc), mas os atributos do tipo de outras classes e de Lists, só quando é feito um get(), ou seja, se nenhum get foi feito, não existe cliente dentro de contrato, nem pessoa dentro de cliente.

Se isso está dentro do mesmo request, o lazy não está configurado corretamente.

Valdi Junior

unread,
Mar 11, 2015, 9:56:43 PM3/11/15
to ce...@googlegroups.com
- Como foi que você que implementou o OpenSessionView ? configurei através do filtro do Spring
- A instância de pessoa dentro do cliente que está dentro do contrato, está retornando alguma coisa ?Sim... Ou seja, está cadastrado e o relacionamento está correto ? Sim..na dataTalbe que tenho funciona tudo, ou seja na primeira requisição quando a sessão com o banco está aberta ..so não consigo acessar quando abro o dialog.


--
Você recebeu essa mensagem porque está inscrito em um tópico no grupo "CEJUG" dos Grupos do Google.
Para cancelar inscrição nesse tópico, acesse https://groups.google.com/d/topic/cejug/oTYqw070qq0/unsubscribe.
Para cancelar inscrição nesse grupo e todos os seus tópicos, envie um e-mail para cejug+un...@googlegroups.com.

Para postar nesse grupo, envie um e-mail para ce...@googlegroups.com.
Acesse esse grupo em http://groups.google.com/group/cejug.
Para mais opções, acesse https://groups.google.com/d/optout.



--

--
Atenciosamente,
Valdi Geraldo Teixeira Junior.
Graduado em Análise e Desenvolvimento de Sistemas;
Pós-Graduando MBA Gerenciamento de Projetos.
Analista Desenvolvedor de Sistemas Faculdade Leão Sampaio
Gerente de Projetos CenterSoftware

Davi Mustafa

unread,
Mar 11, 2015, 10:01:27 PM3/11/15
to ce...@googlegroups.com
Quando tu debuga, tu aperta o botão pra abrir o dialog, ele quebra na hora de retornar o valor pra pagina ou em outro lugar do método?

Digo, tu já viu em que ponto exato ele ta quebrando no código?

Valdi Junior

unread,
Mar 11, 2015, 10:02:48 PM3/11/15
to ce...@googlegroups.com
não..vou investigar isso..
Reply all
Reply to author
Forward
0 new messages