[RESOLVIDO] Hibernate + LazyInitializationException

Galera, estou com um problema meio estranho aqui…

Quando o usuário loga no sistema, eu jogo ele para a sessão… o problema é que se eu não fecho a conexão do hibernate, ao tentar alterar dados do usuário, apresenta erro, informando que tem duas conexões abertas. Se eu fecho a conexão do hibernate ele não consegue jogar o usuário na sessão.

Para tentar resolver o problema, eu passei a jogar o usuário para sessão, antes de encerrar a conexão de login. O problema estranho é que agora, se eu rodo a aplicação com o debbug e simplesmente vou avançando sem mexer em nada, eu logo normalmente e aplicação funciona, como deveria… Porém, se eu rodar a aplicação direto (sem debbug), ele volta o erro falando que não tem sessão…

Classe de login

[code] public TbUsuario usuarioSenha(String usuario, String senha) throws NoSuchAlgorithmException, IOException {
session = HibernateUtil.getSessionFactory().openSession();
session.beginTransaction();
/*
* Verificando se usuario existe na base
/
Criteria criterio = session.createCriteria(TbUsuario.class).add(Restrictions.eq(“login”, usuario)).add(Restrictions.eq(“senha”, senha));
TbUsuario usuarioLogado = (TbUsuario) criterio.uniqueResult();
/

* Inválido
/
if (usuarioLogado == null) {
return null;
} else {
/

* Efetuando chamada dos atributos para evitar perda de dados -
*
*/
Hibernate.initialize(usuarioLogado);
FacesContext.getCurrentInstance().getExternalContext().getSessionMap().put(“usuario”, usuarioLogado);
getSession().setAttribute(“usuarioLogado”, usuarioLogado);
FacesContext.getCurrentInstance().getExternalContext().redirect("/maclla/dashboard.jsf");
session.close();
return usuarioLogado;
}

}[/code]

Erro gerado

rave: Error Rendering View[/dashboard.xhtml]
com.sun.faces.mgbean.ManagedBeanCreationException: Não é possível criar instância para·a classe: view.managedBeans.Dashboard.
	at com.sun.faces.mgbean.BeanBuilder.newBeanInstance(BeanBuilder.java:193)
	at com.sun.faces.mgbean.BeanBuilder.build(BeanBuilder.java:102)
	at com.sun.faces.mgbean.BeanManager.createAndPush(BeanManager.java:409)
	at com.sun.faces.mgbean.BeanManager.create(BeanManager.java:269)
	at com.sun.faces.el.ManagedBeanELResolver.resolveBean(ManagedBeanELResolver.java:244)
	at com.sun.faces.el.ManagedBeanELResolver.getValue(ManagedBeanELResolver.java:116)
	at com.sun.faces.el.DemuxCompositeELResolver._getValue(DemuxCompositeELResolver.java:176)
	at com.sun.faces.el.DemuxCompositeELResolver.getValue(DemuxCompositeELResolver.java:203)
	at org.apache.el.parser.AstIdentifier.getValue(AstIdentifier.java:71)
	at org.apache.el.parser.AstValue.getValue(AstValue.java:147)
	at org.apache.el.ValueExpressionImpl.getValue(ValueExpressionImpl.java:189)
	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 com.sun.faces.renderkit.html_basic.HtmlBasicInputRenderer.getValue(HtmlBasicInputRenderer.java:205)
	at com.sun.faces.renderkit.html_basic.HtmlBasicRenderer.getCurrentValue(HtmlBasicRenderer.java:355)
	at com.sun.faces.renderkit.html_basic.HtmlBasicRenderer.encodeEnd(HtmlBasicRenderer.java:164)
	at javax.faces.component.UIComponentBase.encodeEnd(UIComponentBase.java:875)
	at javax.faces.component.UIComponent.encodeAll(UIComponent.java:1786)
	at javax.faces.render.Renderer.encodeChildren(Renderer.java:168)
	at javax.faces.component.UIComponentBase.encodeChildren(UIComponentBase.java:845)
	at javax.faces.component.UIComponent.encodeAll(UIComponent.java:1779)
	at javax.faces.component.UIComponent.encodeAll(UIComponent.java:1782)
	at com.sun.faces.application.view.FaceletViewHandlingStrategy.renderView(FaceletViewHandlingStrategy.java:424)
	at com.sun.faces.application.view.MultiViewHandler.renderView(MultiViewHandler.java:125)
	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:304)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
	at org.primefaces.webapp.filter.FileUploadFilter.doFilter(FileUploadFilter.java:79)
	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:224)
	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:169)
	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:100)
	at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:929)
	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:405)
	at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:964)
	at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:515)
	at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:304)
	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1110)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:603)
	at java.lang.Thread.run(Thread.java:722)
Caused by: org.hibernate.LazyInitializationException: could not initialize proxy - no Session
	at org.hibernate.proxy.AbstractLazyInitializer.initialize(AbstractLazyInitializer.java:149)
	at org.hibernate.proxy.AbstractLazyInitializer.getImplementation(AbstractLazyInitializer.java:195)
	at org.hibernate.proxy.pojo.javassist.JavassistLazyInitializer.invoke(JavassistLazyInitializer.java:185)
	at model.entity.TbPerfil_$$_javassist_12.getNome(TbPerfil_$$_javassist_12.java)
	at view.managedBeans.Dashboard.ativarMenu(Dashboard.java:53)
	at view.managedBeans.Dashboard.<init>(Dashboard.java:122)
	at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
	at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57)
	at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
	at java.lang.reflect.Constructor.newInstance(Constructor.java:525)
	at java.lang.Class.newInstance0(Class.java:372)
	at java.lang.Class.newInstance(Class.java:325)
	at com.sun.faces.mgbean.BeanBuilder.newBeanInstance(BeanBuilder.java:188)
	... 48 more

Olá,
Este problema acontece porque na sua view você esta tentando pegar algum atributo que depende de conexão para carrega-lo, o Hibernate.initialize não carrega todo o seu objeto com os relacionamentos,
isso você terá que fazer na mão!!!

abraço!

[quote=mmaico]Olá,
Este problema acontece porque na sua view você esta tentando pegar algum atributo que depende de conexão para carrega-lo, o Hibernate.initialize não carrega todo o seu objeto com os relacionamentos,
isso você terá que fazer na mão!!!

abraço!
[/quote]

Feito na mão amigo. Obrigado pela ajuda.
Mas ainda considero muito estranho o fato de quanto estava “debbugando”, funcionar normal…

Pode ser que você especionou o objeto que vc iria usar na sua view, quando isso acontece o hibernate entra em ação e carrega o objeto, acredito que por isso não tenha dado pau.

abraço!

[quote=Aanderson][quote=mmaico]Olá,
Este problema acontece porque na sua view você esta tentando pegar algum atributo que depende de conexão para carrega-lo, o Hibernate.initialize não carrega todo o seu objeto com os relacionamentos,
isso você terá que fazer na mão!!!

abraço!
[/quote]

Feito na mão amigo. Obrigado pela ajuda.
Mas ainda considero muito estranho o fato de quanto estava “debbugando”, funcionar normal…[/quote]Ao debugar você poderia estar disparando a ação de visualizar a lista e com isso trazer os valores. [=

É, apesar de estranho, tem lógica. Obrigado a ambos, pela ajuda.

[quote=Aanderson]É, apesar de estranho, tem lógica. Obrigado a ambos, pela ajuda. [/quote]Acho estranho não. Se você acessa a lista ele tem que fazer a pesquisa uai. O.o