OpenSessionInViewFilter + ViewScope

Tenho uma aplicação construída com JSF2 + Primefaces + Spring 3 + Hibernate 4. os backingbeans usam ViewScope.
Implementei o OpenSessionInView e vejo nos LOG´s que ele parece estar funcionando corretamente.
Mas tenho uma dataTable na camada de apresentação, que sob clique do usuário exibe informações adicionais sobre a entidade selecionada - navegando em seus relacionamentos. Nesse momento eu estou recebendo a exceção:

INFO: 27/04/2012 08:36:07 DEBUG org.springframework.orm.hibernate4.support.OpenSessionInViewFilter:153 lookupSessionFactory - Using SessionFactory 'sgpcSessionFactory' for OpenSessionInViewFilter

INFO: 27/04/2012 08:36:07 DEBUG org.springframework.orm.hibernate4.support.OpenSessionInViewFilter:113 doFilterInternal - Opening Hibernate Session in OpenSessionInViewFilter

INFO: 27/04/2012 08:36:07 DEBUG br.usp.icmc.sgpc.fmw.AuthenticationPhaseListener:29 afterPhase - Verificando se usuário está logado...

INFO: 27/04/2012 08:36:07 DEBUG com.prime.facestrace.phase.listener.TraceResourcePhaseListener:47 afterPhase - View Root :/projetos.xhtml

INFO: org.hibernate.LazyInitializationException: failed to lazily initialize a collection of role: br.usp.icmc.sgpc.beans.ProjetoBean.auxilios, no session or session was closed
org.hibernate.LazyInitializationException: failed to lazily initialize a collection of role: br.usp.icmc.sgpc.beans.ProjetoBean.auxilios, no session or session was closed
	at org.hibernate.collection.internal.AbstractPersistentCollection.throwLazyInitializationException(AbstractPersistentCollection.java:393)
	at org.hibernate.collection.internal.AbstractPersistentCollection.throwLazyInitializationExceptionIfNotConnected(AbstractPersistentCollection.java:385)
	at org.hibernate.collection.internal.AbstractPersistentCollection.readSize(AbstractPersistentCollection.java:125)
	at org.hibernate.collection.internal.PersistentBag.size(PersistentBag.java:242)
	at javax.faces.model.ListDataModel.isRowAvailable(ListDataModel.java:110)
	at javax.faces.model.ListDataModel.setRowIndex(ListDataModel.java:185)
	at javax.faces.model.ListDataModel.setWrappedData(ListDataModel.java:220)
	at javax.faces.model.ListDataModel.<init>(ListDataModel.java:79)
	at javax.faces.component.UIData.getDataModel(UIData.java:1804)
	at javax.faces.component.UIData.setRowIndexWithoutRowStatePreserved(UIData.java:484)
	at javax.faces.component.UIData.setRowIndex(UIData.java:473)
	at javax.faces.component.UIData.iterate(UIData.java:1927)
	at javax.faces.component.UIData.processDecodes(UIData.java:1161)
	at org.primefaces.component.datatable.DataTable.processDecodes(DataTable.java:522)
	at javax.faces.component.UIData.iterate(UIData.java:1997)
	at javax.faces.component.UIData.processDecodes(UIData.java:1161)
	at org.primefaces.component.datatable.DataTable.processDecodes(DataTable.java:522)
	at com.sun.faces.context.PartialViewContextImpl$PhaseAwareVisitCallback.visit(PartialViewContextImpl.java:506)
	at com.sun.faces.component.visit.PartialVisitContext.invokeVisitCallback(PartialVisitContext.java:183)
	at javax.faces.component.UIData.visitTree(UIData.java:1411)
	at javax.faces.component.UIComponent.visitTree(UIComponent.java:1600)
	at javax.faces.component.UIForm.visitTree(UIForm.java:344)
	at javax.faces.component.UIComponent.visitTree(UIComponent.java:1600)
	at javax.faces.component.UIComponent.visitTree(UIComponent.java:1600)
	at javax.faces.component.UIComponent.visitTree(UIComponent.java:1600)
	at com.sun.faces.context.PartialViewContextImpl.processComponents(PartialViewContextImpl.java:376)
	at com.sun.faces.context.PartialViewContextImpl.processPartial(PartialViewContextImpl.java:252)
	at javax.faces.context.PartialViewContextWrapper.processPartial(PartialViewContextWrapper.java:183)
	at javax.faces.component.UIViewRoot.processDecodes(UIViewRoot.java:931)
	at com.sun.faces.lifecycle.ApplyRequestValuesPhase.execute(ApplyRequestValuesPhase.java:78)
	at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:101)
	at com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:118)
	at javax.faces.webapp.FacesServlet.service(FacesServlet.java:593)
	at org.apache.catalina.core.StandardWrapper.service(StandardWrapper.java:1539)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:343)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:217)
	at org.springframework.orm.hibernate4.support.OpenSessionInViewFilter.doFilterInternal(OpenSessionInViewFilter.java:119)
	at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:76)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:256)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:217)
	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:279)
	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175)
	at org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:655)
	at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:595)
	at com.sun.enterprise.web.WebPipeline.invoke(WebPipeline.java:98)
	at com.sun.enterprise.web.PESessionLockingStandardPipeline.invoke(PESessionLockingStandardPipeline.java:91)
	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:162)
	at org.apache.catalina.connector.CoyoteAdapter.doService(CoyoteAdapter.java:330)
	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:231)
	at com.sun.enterprise.v3.services.impl.ContainerMapper.service(ContainerMapper.java:174)
	at com.sun.grizzly.http.ProcessorTask.invokeAdapter(ProcessorTask.java:828)
	at com.sun.grizzly.http.ProcessorTask.doProcess(ProcessorTask.java:725)
	at com.sun.grizzly.http.ProcessorTask.process(ProcessorTask.java:1019)
	at com.sun.grizzly.http.DefaultProtocolFilter.execute(DefaultProtocolFilter.java:225)
	at com.sun.grizzly.DefaultProtocolChain.executeProtocolFilter(DefaultProtocolChain.java:137)
	at com.sun.grizzly.DefaultProtocolChain.execute(DefaultProtocolChain.java:104)
	at com.sun.grizzly.DefaultProtocolChain.execute(DefaultProtocolChain.java:90)
	at com.sun.grizzly.http.HttpProtocolChain.execute(HttpProtocolChain.java:79)
	at com.sun.grizzly.ProtocolChainContextTask.doCall(ProtocolChainContextTask.java:54)
	at com.sun.grizzly.SelectionKeyContextTask.call(SelectionKeyContextTask.java:59)
	at com.sun.grizzly.ContextTask.run(ContextTask.java:71)
	at com.sun.grizzly.util.AbstractThreadPool$Worker.doWork(AbstractThreadPool.java:532)
	at com.sun.grizzly.util.AbstractThreadPool$Worker.run(AbstractThreadPool.java:513)
	at java.lang.Thread.run(Thread.java:662)

INFO: org.hibernate.LazyInitializationException: failed to lazily initialize a collection of role: br.usp.icmc.sgpc.beans.ProjetoBean.auxilios, no session or session was closed
org.hibernate.LazyInitializationException: failed to lazily initialize a collection of role: br.usp.icmc.sgpc.beans.ProjetoBean.auxilios, no session or session was closed
	at org.hibernate.collection.internal.AbstractPersistentCollection.throwLazyInitializationException(AbstractPersistentCollection.java:393)
	at org.hibernate.collection.internal.AbstractPersistentCollection.throwLazyInitializationExceptionIfNotConnected(AbstractPersistentCollection.java:385)
	at org.hibernate.collection.internal.AbstractPersistentCollection.readSize(AbstractPersistentCollection.java:125)
	at org.hibernate.collection.internal.PersistentBag.size(PersistentBag.java:242)
	at javax.faces.model.ListDataModel.isRowAvailable(ListDataModel.java:110)
	at javax.faces.model.ListDataModel.setRowIndex(ListDataModel.java:185)
	at javax.faces.model.ListDataModel.setWrappedData(ListDataModel.java:220)
	at javax.faces.model.ListDataModel.<init>(ListDataModel.java:79)
	at javax.faces.component.UIData.getDataModel(UIData.java:1804)
	at javax.faces.component.UIData.setRowIndexWithoutRowStatePreserved(UIData.java:484)
	at javax.faces.component.UIData.setRowIndex(UIData.java:473)
	at javax.faces.component.UIData.iterate(UIData.java:1927)
	at javax.faces.component.UIData.processValidators(UIData.java:1204)
	at javax.faces.component.UIData.iterate(UIData.java:1999)
	at javax.faces.component.UIData.processValidators(UIData.java:1204)
	at com.sun.faces.context.PartialViewContextImpl$PhaseAwareVisitCallback.visit(PartialViewContextImpl.java:508)
	at com.sun.faces.component.visit.PartialVisitContext.invokeVisitCallback(PartialVisitContext.java:183)
	at javax.faces.component.UIData.visitTree(UIData.java:1411)
	at javax.faces.component.UIComponent.visitTree(UIComponent.java:1600)
	at javax.faces.component.UIForm.visitTree(UIForm.java:344)
	at javax.faces.component.UIComponent.visitTree(UIComponent.java:1600)
	at javax.faces.component.UIComponent.visitTree(UIComponent.java:1600)
	at javax.faces.component.UIComponent.visitTree(UIComponent.java:1600)
	at com.sun.faces.context.PartialViewContextImpl.processComponents(PartialViewContextImpl.java:376)
	at com.sun.faces.context.PartialViewContextImpl.processPartial(PartialViewContextImpl.java:252)
	at javax.faces.context.PartialViewContextWrapper.processPartial(PartialViewContextWrapper.java:183)
	at javax.faces.component.UIViewRoot.processValidators(UIViewRoot.java:1170)
	at com.sun.faces.lifecycle.ProcessValidationsPhase.execute(ProcessValidationsPhase.java:76)
	at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:101)
	at com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:118)
	at javax.faces.webapp.FacesServlet.service(FacesServlet.java:593)
	at org.apache.catalina.core.StandardWrapper.service(StandardWrapper.java:1539)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:343)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:217)
	at org.springframework.orm.hibernate4.support.OpenSessionInViewFilter.doFilterInternal(OpenSessionInViewFilter.java:119)
	at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:76)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:256)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:217)
	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:279)
	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175)
	at org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:655)
	at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:595)
	at com.sun.enterprise.web.WebPipeline.invoke(WebPipeline.java:98)
	at com.sun.enterprise.web.PESessionLockingStandardPipeline.invoke(PESessionLockingStandardPipeline.java:91)
	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:162)
	at org.apache.catalina.connector.CoyoteAdapter.doService(CoyoteAdapter.java:330)
	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:231)
	at com.sun.enterprise.v3.services.impl.ContainerMapper.service(ContainerMapper.java:174)
	at com.sun.grizzly.http.ProcessorTask.invokeAdapter(ProcessorTask.java:828)
	at com.sun.grizzly.http.ProcessorTask.doProcess(ProcessorTask.java:725)
	at com.sun.grizzly.http.ProcessorTask.process(ProcessorTask.java:1019)
	at com.sun.grizzly.http.DefaultProtocolFilter.execute(DefaultProtocolFilter.java:225)
	at com.sun.grizzly.DefaultProtocolChain.executeProtocolFilter(DefaultProtocolChain.java:137)
	at com.sun.grizzly.DefaultProtocolChain.execute(DefaultProtocolChain.java:104)
	at com.sun.grizzly.DefaultProtocolChain.execute(DefaultProtocolChain.java:90)
	at com.sun.grizzly.http.HttpProtocolChain.execute(HttpProtocolChain.java:79)
	at com.sun.grizzly.ProtocolChainContextTask.doCall(ProtocolChainContextTask.java:54)
	at com.sun.grizzly.SelectionKeyContextTask.call(SelectionKeyContextTask.java:59)
	at com.sun.grizzly.ContextTask.run(ContextTask.java:71)
	at com.sun.grizzly.util.AbstractThreadPool$Worker.doWork(AbstractThreadPool.java:532)
	at com.sun.grizzly.util.AbstractThreadPool$Worker.run(AbstractThreadPool.java:513)
	at java.lang.Thread.run(Thread.java:662)

INFO: org.hibernate.LazyInitializationException: failed to lazily initialize a collection of role: br.usp.icmc.sgpc.beans.ProjetoBean.auxilios, no session or session was closed
org.hibernate.LazyInitializationException: failed to lazily initialize a collection of role: br.usp.icmc.sgpc.beans.ProjetoBean.auxilios, no session or session was closed
	at org.hibernate.collection.internal.AbstractPersistentCollection.throwLazyInitializationException(AbstractPersistentCollection.java:393)
	at org.hibernate.collection.internal.AbstractPersistentCollection.throwLazyInitializationExceptionIfNotConnected(AbstractPersistentCollection.java:385)
	at org.hibernate.collection.internal.AbstractPersistentCollection.readSize(AbstractPersistentCollection.java:125)
	at org.hibernate.collection.internal.PersistentBag.size(PersistentBag.java:242)
	at javax.faces.model.ListDataModel.isRowAvailable(ListDataModel.java:110)
	at javax.faces.model.ListDataModel.setRowIndex(ListDataModel.java:185)
	at javax.faces.model.ListDataModel.setWrappedData(ListDataModel.java:220)
	at javax.faces.model.ListDataModel.<init>(ListDataModel.java:79)
	at javax.faces.component.UIData.getDataModel(UIData.java:1804)
	at javax.faces.component.UIData.setRowIndexWithoutRowStatePreserved(UIData.java:484)
	at javax.faces.component.UIData.setRowIndex(UIData.java:473)
	at javax.faces.component.UIData.iterate(UIData.java:1927)
	at javax.faces.component.UIData.processUpdates(UIData.java:1253)
	at org.primefaces.component.datatable.DataTable.processUpdates(DataTable.java:528)
	at javax.faces.component.UIData.iterate(UIData.java:2001)
	at javax.faces.component.UIData.processUpdates(UIData.java:1253)
	at org.primefaces.component.datatable.DataTable.processUpdates(DataTable.java:528)
	at com.sun.faces.context.PartialViewContextImpl$PhaseAwareVisitCallback.visit(PartialViewContextImpl.java:510)
	at com.sun.faces.component.visit.PartialVisitContext.invokeVisitCallback(PartialVisitContext.java:183)
	at javax.faces.component.UIData.visitTree(UIData.java:1411)
	at javax.faces.component.UIComponent.visitTree(UIComponent.java:1600)
	at javax.faces.component.UIForm.visitTree(UIForm.java:344)
	at javax.faces.component.UIComponent.visitTree(UIComponent.java:1600)
	at javax.faces.component.UIComponent.visitTree(UIComponent.java:1600)
	at javax.faces.component.UIComponent.visitTree(UIComponent.java:1600)
	at com.sun.faces.context.PartialViewContextImpl.processComponents(PartialViewContextImpl.java:376)
	at com.sun.faces.context.PartialViewContextImpl.processPartial(PartialViewContextImpl.java:252)
	at javax.faces.context.PartialViewContextWrapper.processPartial(PartialViewContextWrapper.java:183)
	at javax.faces.component.UIViewRoot.processUpdates(UIViewRoot.java:1229)
	at com.sun.faces.lifecycle.UpdateModelValuesPhase.execute(UpdateModelValuesPhase.java:78)
	at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:101)
	at com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:118)
	at javax.faces.webapp.FacesServlet.service(FacesServlet.java:593)
	at org.apache.catalina.core.StandardWrapper.service(StandardWrapper.java:1539)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:343)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:217)
	at org.springframework.orm.hibernate4.support.OpenSessionInViewFilter.doFilterInternal(OpenSessionInViewFilter.java:119)
	at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:76)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:256)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:217)
	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:279)
	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175)
	at org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:655)
	at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:595)
	at com.sun.enterprise.web.WebPipeline.invoke(WebPipeline.java:98)
	at com.sun.enterprise.web.PESessionLockingStandardPipeline.invoke(PESessionLockingStandardPipeline.java:91)
	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:162)
	at org.apache.catalina.connector.CoyoteAdapter.doService(CoyoteAdapter.java:330)
	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:231)
	at com.sun.enterprise.v3.services.impl.ContainerMapper.service(ContainerMapper.java:174)
	at com.sun.grizzly.http.ProcessorTask.invokeAdapter(ProcessorTask.java:828)
	at com.sun.grizzly.http.ProcessorTask.doProcess(ProcessorTask.java:725)
	at com.sun.grizzly.http.ProcessorTask.process(ProcessorTask.java:1019)
	at com.sun.grizzly.http.DefaultProtocolFilter.execute(DefaultProtocolFilter.java:225)
	at com.sun.grizzly.DefaultProtocolChain.executeProtocolFilter(DefaultProtocolChain.java:137)
	at com.sun.grizzly.DefaultProtocolChain.execute(DefaultProtocolChain.java:104)
	at com.sun.grizzly.DefaultProtocolChain.execute(DefaultProtocolChain.java:90)
	at com.sun.grizzly.http.HttpProtocolChain.execute(HttpProtocolChain.java:79)
	at com.sun.grizzly.ProtocolChainContextTask.doCall(ProtocolChainContextTask.java:54)
	at com.sun.grizzly.SelectionKeyContextTask.call(SelectionKeyContextTask.java:59)
	at com.sun.grizzly.ContextTask.run(ContextTask.java:71)
	at com.sun.grizzly.util.AbstractThreadPool$Worker.doWork(AbstractThreadPool.java:532)
	at com.sun.grizzly.util.AbstractThreadPool$Worker.run(AbstractThreadPool.java:513)
	at java.lang.Thread.run(Thread.java:662)

INFO: 27/04/2012 08:36:08 DEBUG br.usp.icmc.sgpc.fmw.CloseDialogPhaseListener:26 beforePhase - Setando atributos para funcionamento de componentes dialog...

GRAVE: org.hibernate.LazyInitializationException: failed to lazily initialize a collection of role: br.usp.icmc.sgpc.beans.ProjetoBean.auxilios, no session or session was closed
INFO: 27/04/2012 08:36:08 DEBUG org.springframework.orm.hibernate4.support.OpenSessionInViewFilter:126 doFilterInternal - Closing Hibernate Session in OpenSessionInViewFilter

Alguma idéia sobre o que pode estar acontecendo? Minha suspeita é de que o problema é com o ViewScope.

Obs: eu estava usando JPA, com OpenEntityManagerInViewFilter, e tudo funcionava bem. Mas decidimos migrar pra Hibernate puro…

Obrigado

Altere o escopo do seu Bean para Session e teste, se ocorrer o mesmo erro, o problema não é o escopo.

Olha, cara, esse não é o primeiro tópico que eu vejo ser aberto que comenta sobre comportamentos “estranhos” em lugares onde o Hibernate 4 está sendo usado.

No projeto que eu estou agora nós tentamos migrar do Hibernate 3 para o 4 e ocorreu um problema que depois de pesquisar eu descobri que era um bug do Hibernate que só seria corrigido no lançamento do Hibernate 5.

Não estou dizendo que esse é o problema, mas eu particularmente não recomendo o uso do Hibernate 4.

Mesmo problema aqui.
Só que ao invés de DataTable o erro ocorre nos combobox.
:cry:

só pra testar, eu mudei pra Session. mas o problema continua.
mas minha desconfiança quanto ao escopo é justamente o oposto: estive supondo que o OSIV só atendesse RequestScope.
Já a suspeita sobre o Hibernate4 é bastante válida.

Fora isso, li em algum lugar que pra usar OSIV é necessário que todo acesso ao banco seja feito dentro de uma transação. Então adicionei no applicationContext

    <bean id="sgpcTransactionManager" class="org.springframework.orm.hibernate4.HibernateTransactionManager">
        <property name="sessionFactory" ref="sgpcSessionFactory"/>
    </bean>
    <tx:annotation-driven transaction-manager="sgpcTransactionManager"/>

e em todos os métodos de DAO (inclusive os que só fazem consulta)

@Transactional(readOnly = true)

(claro que nos de insert, update e delete eu coloquei o “readOnly=false”)

é só isso que é necessário mesmo? como eu posso ter ctz q está funcionando?

O que me parece é que o OSIV funciona direito, mas os lazyloading usam uma sessão diferente daquela do OSIV.

meus métodos de DAO são parecidos com:

@Transactional(readOnly = true)
    public List<ObjetoProtegidoBean> pesquisar() {
        List<ObjetoProtegidoBean> objetosProtegidos = null;
        Session sess = getSessionFactory().getCurrentSession();
        try {
            Query q = sess.getNamedQuery("ObjetoProtegidoBean.findAll");
            objetosProtegidos = q.list();
        } catch (Exception e) {
            logger.debug(e);
        }
        return objetosProtegidos;
    }

alguns métodos usam criteria, mas o acesso à sessão é idêntico. falta algo? preciso explicitar o uso da transação?

Obrigado,

[quote=digaoneves]Altere o escopo do seu Bean para Session e teste, se ocorrer o mesmo erro, o problema não é o escopo.

Olha, cara, esse não é o primeiro tópico que eu vejo ser aberto que comenta sobre comportamentos “estranhos” em lugares onde o Hibernate 4 está sendo usado.

No projeto que eu estou agora nós tentamos migrar do Hibernate 3 para o 4 e ocorreu um problema que depois de pesquisar eu descobri que era um bug do Hibernate que só seria corrigido no lançamento do Hibernate 5.

Não estou dizendo que esse é o problema, mas eu particularmente não recomendo o uso do Hibernate 4.[/quote]
Tenho a impressão de que a JBoss se precipitou ao disponibilizar o Hibernate 4.
Não apenas tópicos que apresentam problemas com integração, mas muitos em que esta versão é utilizada apresentam problemas.

[quote=drsmachado]Tenho a impressão de que a JBoss se precipitou ao disponibilizar o Hibernate 4.
Não apenas tópicos que apresentam problemas com integração, mas muitos em que esta versão é utilizada apresentam problemas.[/quote]

Sinceramente eu concordo.

Depois que vi uma exceção que dizia: [quote]ERROR hibernate.AssertionFailure - an assertion failure occured (this may indicate a bug in Hibernate…[/quote]
decidi que não tentaria mais nada com o Hibernate 4

vou abrir um branch e tentar reverter pra Hibernate3, pra ver se resolve.
Quaisquer outras idéias serão bem vindas!! :slight_smile:

Valeu!!

Olá ArturSampaio,

Sinceramente, não conheço muito de Spring mas tenho um conhecimento razoável no Hibernate 3 e 4 e acho que posso lhe ajudar. O que eu lhe peço é que se possível enviar a versão completa de cada framework que você utiliza e eu posso tentar criar um projeto de teste para verificar se isso realmente é um problema do Hibernate ou não e como tentar um workaround disso. É importante saber se não há nenhum módulo Spring dentro da sua aplicação e se tiver quais são.

  • Primefaces
  • Spring 3
  • Hibernate 4

web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
    <context-param>
        <param-name>javax.faces.PROJECT_STAGE</param-name>
        <param-value>Production</param-value>
    </context-param>
    
    <listener>
        <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
    </listener>
    <listener>
        <listener-class>org.springframework.web.context.request.RequestContextListener</listener-class>
    </listener>

    <filter>
        <filter-name>hibernateOpenSessionInViewFilter</filter-name>
        <filter-class>
            org.springframework.orm.hibernate4.support.OpenSessionInViewFilter
        </filter-class>
        <init-param>
            <param-name>sessionFactoryBeanName</param-name>
            <param-value>sgpcSessionFactory</param-value>
        </init-param>
    </filter>
    <filter-mapping>
        <filter-name>hibernateOpenSessionInViewFilter</filter-name>
        <url-pattern>*.xhtml</url-pattern>
    </filter-mapping>

    <servlet>
        <servlet-name>Faces Servlet</servlet-name>
        <servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
        <load-on-startup>1</load-on-startup>
    </servlet>
    <servlet-mapping>
        <servlet-name>Faces Servlet</servlet-name>
        <url-pattern>/faces/*</url-pattern>
    </servlet-mapping>

    <session-config>
        <session-timeout>
            30
        </session-timeout>
    </session-config>
    <welcome-file-list>
        <welcome-file>faces/login.xhtml</welcome-file>
    </welcome-file-list>
    
    <servlet>
        <servlet-name>ResourceServlet</servlet-name>
        <servlet-class>org.primefaces.resource.ResourceServlet</servlet-class>
    </servlet>

    <servlet-mapping>
        <servlet-name>ResourceServlet</servlet-name>
        <url-pattern>/primefaces_resource/*</url-pattern>
    </servlet-mapping>
    
</web-app>

applicationContext.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:context="http://www.springframework.org/schema/context"
       xmlns:tx="http://www.springframework.org/schema/tx"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
       http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
       http://www.springframework.org/schema/context
       http://www.springframework.org/schema/context/spring-context-3.0.xsd
       http://www.springframework.org/schema/tx
       http://www.springframework.org/schema/tx/spring-tx-3.0.xsd">

  <bean id="sgpcDataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
	<property name="driverClassName" value="org.postgresql.Driver" />
	<property name="url" value="jdbc:postgresql://localhost:5432/sgpcdev" />
	<property name="username" value="" />
	<property name="password" value="" />
  </bean>

    <bean id="sgpcSessionFactory" class="org.springframework.orm.hibernate4.LocalSessionFactoryBean">
        <property name="dataSource">
            <ref bean="sgpcDataSource"/>
        </property>
        <property name="packagesToScan">
            <list>
                <value>br.usp.icmc.sgpc.beans</value>
                <value>br.usp.icmc.sgpc.security.beans</value>
            </list>
        </property>
        <property name="hibernateProperties">
            <props>
                <prop key="hibernate.dialect">org.hibernate.dialect.PostgreSQLDialect</prop>
                <prop key="hibernate.show_sql">true</prop>

                <prop key="hibernate.connection.release_mode">auto</prop> <!--after_transaction-->
                <!--prop key="hibernate.cache.provider_class">org.hibernate.cache.SingletonEhCacheProvider</prop-->
                <!--prop key="hibernate.cache.region.factory_class">net.sf.ehcache.hibernate.SingletonEhCacheRegionFactory</prop-->
                <prop key="hibernate.cache.region.factory_class">org.hibernate.cache.ehcache.SingletonEhCacheRegionFactory</prop>
                <prop key="hibernate.cache.use_second_level_cache">true</prop>
                <prop key="hibernate.cache.use_query_cache">true</prop>
                <prop key="hibernate.show_sql">false</prop>
                <prop key="hibernate.use_sql_comments">false</prop>
                <prop key="hibernate.format_sql">false</prop>
                <prop key="hibernate.c3p0.min_size">5</prop>
                <prop key="hibernate.c3p0.max_size">40</prop>
                <prop key="hibernate.c3p0.timeout">300</prop>
                <prop key="hibernate.c3p0.max_statements">50</prop>
                <prop key="hibernate.c3p0.maxStatementsPerConnection">1000</prop>
                <prop key="hibernate.c3p0.idle_test_period">30</prop>
                <prop key="hibernate.c3p0.acquire_increment">2</prop>
                <prop key="hibernate.hbm2ddl.auto">validate</prop>
                <prop key="hibernate.jdbc.batch_size">5</prop>

            </props>
        </property>
    </bean>
    <bean id="sgpcTransactionManager" class="org.springframework.orm.hibernate4.HibernateTransactionManager">
        <property name="sessionFactory" ref="sgpcSessionFactory"/>
    </bean>
    <tx:annotation-driven transaction-manager="sgpcTransactionManager"/>

    <bean id="applicationContextProvider" class="br.usp.icmc.sgpc.fmw.ApplicationContextProvider"/>
    <context:annotation-config />
</beans>

GenericHibernateDao

@Transactional(readOnly = true)
public class GenericHibernateDao<tipo>{

    private Class<? extends tipo> clazz = null;
    protected Logger logger = Logger.getLogger(this.getClass());
    private SessionFactory sessionFactory;

    public GenericHibernateDao(Class<? extends tipo> clazz) {
        this.clazz = clazz;
        init(clazz, "sgpcSessionFactory");
    }
    public GenericHibernateDao(Class<? extends tipo> clazz, String sessionFactoryName) {
        this.clazz = clazz;
        init(clazz, sessionFactoryName);
    }

    public void setSessionFactory(SessionFactory sessionFactory) {
        this.sessionFactory = sessionFactory;
    }
    public SessionFactory getSessionFactory() {
        return this.sessionFactory;
    }

    private void init(Class<? extends tipo> clazz, String sessionFactoryName) {
        this.clazz = clazz;
        FacesContext fc = FacesContext.getCurrentInstance();
        ApplicationContext ctx = ApplicationContextProvider.getApplicationContext();
        setSessionFactory((SessionFactory) ctx.getBean(sessionFactoryName));
        logger = Logger.getLogger(this.getClass());
    }

@Transactional(readOnly = false, propagation = Propagation.REQUIRES_NEW)
    public void create(tipo p) {
        Session sess = sessionFactory.getCurrentSession();
            sess.save(p);
    }

@Transactional(readOnly = false, propagation = Propagation.REQUIRES_NEW)
    public void update(tipo p) {
        Session sess = sessionFactory.getCurrentSession();
            sess.update(p);
    }
@Transactional(readOnly = false, propagation = Propagation.REQUIRES_NEW)
    public void delete(tipo p) {
            sess.delete(p);
    }

    public tipo findEntity(Serializable id) {
        Session sess = sessionFactory.getCurrentSession();
        tipo retorno = null;
            retorno = (tipo) sess.get(clazz, id);
        return retorno;
    }

PessoaHibernateDao


public class PessoaHibernateDao extends GenericHibernateDao<PessoaBean> {

    public PessoaHibernateDao() {
        super(PessoaBean.class);
    }
@Transactional(readOnly = true)
    public PessoaBean findByUsername(String username) throws USPException {
        PessoaBean pessoa = null;
        Session sess = getSessionFactory().getCurrentSession();
        Transaction tx = null;
        try {
            Query q = sess.getNamedQuery("PessoaBean.findByUsername");
            q.setParameter("username", username);
            pessoa = (PessoaBean) q.uniqueResult();
        } catch (Exception e) {
            if (tx != null) {
                tx.rollback();
            }
            logger.debug(e);
        } finally {
            //sess.close();
        }

        return pessoa;
    }
@Transactional(readOnly = true)
    public List<PessoaBean> pesquisar() {
        List<PessoaBean> lstPessoas = null;
        Session sess = getSessionFactory().getCurrentSession();
        Transaction tx = null;
        try {
            Query q = sess.getNamedQuery("PessoaBean.findAll");
            lstPessoas = q.list();
        } catch (Exception e) {
            if (tx != null) {
                tx.rollback();
            }
            logger.debug(e);
        } finally {
            //sess.close();
        }
        return lstPessoas;
    }
@Transactional(readOnly = true)
    public List<PessoaBean> pesquisar(String termoPesquisa) {
        List<PessoaBean> lstPessoas = null;
        Session sess = getSessionFactory().getCurrentSession();
        Transaction tx = null;
        try {
            Query q = sess.getNamedQuery("PessoaBean.findByKeyword");
            q.setParameter("keyword", "%" + termoPesquisa + "%");
            lstPessoas = q.list();
        } catch (Exception e) {
            if (tx != null) {
                tx.rollback();
            }
            logger.debug(e);
        } finally {
            //sess.close();
        }
        return lstPessoas;
    }
@Transactional(readOnly = true)
    public PessoaBean findByEmail(String email) throws USPException {
        PessoaBean pessoa = null;
        Session sess = getSessionFactory().getCurrentSession();
        Transaction tx = null;
        try {
            Query q = sess.getNamedQuery("PessoaBean.findByEmail");
            q.setParameter("email", email);
            pessoa = (PessoaBean) q.list();
        } catch (Exception e) {
            if (tx != null) {
                tx.rollback();
            }
            logger.debug(e);
        } finally {
            //sess.close();
        }

        return pessoa;
    }
@Transactional(readOnly = true)
    public PessoaBean findByCpf(String cpf) throws USPException {
        PessoaBean pessoa = null;
        Session sess = getSessionFactory().getCurrentSession();
        Transaction tx = null;
        try {
            Query q = sess.getNamedQuery("PessoaBean.findByCpf");
            q.setParameter("cpf", cpf);
            pessoa = (PessoaBean) q.uniqueResult();

        } catch (Exception e) {
            if (tx != null) {
                tx.rollback();
            }
            logger.debug(e);
        } finally {
            //sess.close();
        }

        return pessoa;
    }
@Transactional(readOnly = true)
    public List<PessoaBean> pesquisarGrupo(PapelBean papel) {
        List<PessoaBean> lstPessoas = null;
        Session sess = getSessionFactory().getCurrentSession();
        Transaction tx = null;

        try {
            Query q = sess.getNamedQuery("PessoaBean.findByGroup");
            q.setParameter("papel", papel);
            lstPessoas = q.list();
        } catch (Exception e) {
            if (tx != null) {
                tx.rollback();
            }
            logger.debug(e);
        } finally {
            //sess.close();
        }
        return lstPessoas;
    }
@Transactional(readOnly = true)
    public List<PessoaBean> pesquisarCriteria(String termoPesquisa, InstituicaoBean instituicao, UnidadeBean unidade, DepartamentoBean departamento, PapelBean papel) {

        List<PessoaBean> lstPessoas = null;

        Session sess = getSessionFactory().getCurrentSession();
        Transaction tx = null;

        Criteria crit = sess.createCriteria(PessoaBean.class);
        
        crit.createAlias("fkDepartamento", "departamento");
        crit.createAlias("departamento.fkUnidade", "unidade");
        crit.createAlias("unidade.fkInstituicao", "instituicao");

        if (!"".equals(termoPesquisa) && termoPesquisa != null) {
            Criterion username = Restrictions.ilike("username","%" + termoPesquisa + "%");
            Criterion nome = Restrictions.ilike("nome","%" + termoPesquisa + "%");
            Criterion rg = Restrictions.ilike("rg","%" + termoPesquisa + "%");
            Criterion cpf = Restrictions.ilike("cpf","%" + termoPesquisa + "%");
            Criterion email = Restrictions.ilike("email","%" + termoPesquisa + "%");

            Disjunction disjunction = Restrictions.disjunction();
            disjunction.add(username);
            disjunction.add(nome);
            disjunction.add(rg);
            disjunction.add(cpf);
            disjunction.add(email);

            crit.add(disjunction);
        }
        if (instituicao != null) {

            crit.add(Restrictions.eq("instituicao",instituicao));

            if (unidade != null) {
                crit.add(Restrictions.eq("unidade",unidade));

                if (departamento != null) {
                    crit.add(Restrictions.eq("departamento",departamento));
                }
            }
        }

        if (papel != null) {
            //crit.add(Restrictions.in("papeis", papel));
            crit.createCriteria("papeis").add(Restrictions.eq("id",papel.getId()));
        }

        crit.addOrder(Order.asc("nome"));

        lstPessoas = crit.list();

        return lstPessoas;
    }
@Transactional(readOnly = true)
    public PessoaBean findByNome(String nome) {
        PessoaBean pessoa = null;
        Session sess = getSessionFactory().getCurrentSession();
        Transaction tx = null;
        try {
            Query q = sess.getNamedQuery("PessoaBean.findByNome");
            q.setParameter("nome", nome);
            pessoa = (PessoaBean) q.uniqueResult();
        } catch (Exception e) {
            if (tx != null) {
                tx.rollback();
            }
            logger.debug(e);
        } finally {
            //sess.close();
        }

        return pessoa;
    }
}

Perceba que tenho dúvidas sobre como deve ser um método de DAO (e por isso tenho códigos comentados, try-catch, etc):

  • preciso lidar com a transação (tx.beginTransaction();tx.commit();etc)… ou o @Transactional vai cuidar disso sozinho?
  • se a transação for controlada pelo @Transactional, como devo lidar com Exceptions (por exemplo NoResultException, pra saber se o resultado não foi encontrado)

a arquitetura da aplicação está assim:
Interface de usuário (.xhtml) <–> BackingBean (@ViewScoped) <–> Service <–> DAO <–> Postgres

escolhi fazer uma camada de Service independente pra poder implementar webservices no futuro. senão o próprio backingBean poderia acessar o DAO

Fiz a experiência com Hibernate3, e o erro permanece.
Insisto em 2 possibilidades:
1 - o lazyLoading não está usando a mesma sessão que o OSIV mantém aberta
2 - o OSIV mantém a sessão apenas para RequestScope. o problema ocorre pq uso ViewScope

ou ainda uma 3a:

  • estou errando em algum ponto e ainda não enxerguei!!! :slight_smile:

Muito obrigado a todos que tem ajudado!!

habilitei logs mais detalhados, pra tentar descobrir algo. agora usando hibernate 3, e não mais o 4.

INFO: 27/04/2012 16:36:54 DEBUG org.springframework.orm.hibernate3.support.OpenSessionInViewFilter:239 lookupSessionFactory - Using SessionFactory 'sgpcSessionFactory' for OpenSessionInViewFilter

INFO: 27/04/2012 16:36:54 DEBUG org.springframework.beans.factory.support.DefaultListableBeanFactory:245 doGetBean - Returning cached instance of singleton bean 'sgpcSessionFactory'

INFO: 27/04/2012 16:36:54 DEBUG org.springframework.orm.hibernate3.support.OpenSessionInViewFilter:181 doFilterInternal - Opening single Hibernate Session in OpenSessionInViewFilter

INFO: 27/04/2012 16:36:54 DEBUG org.springframework.orm.hibernate3.SessionFactoryUtils:322 doGetSession - Opening Hibernate Session

INFO: 27/04/2012 16:36:54 DEBUG org.hibernate.impl.SessionImpl:265 <init> - opened session at timestamp: 5470434977701888

INFO: 27/04/2012 16:36:54 DEBUG br.usp.icmc.sgpc.fmw.AuthenticationPhaseListener:29 afterPhase - Verificando se usuário está logado...

INFO: 27/04/2012 16:36:54 DEBUG com.prime.facestrace.phase.listener.TraceResourcePhaseListener:47 afterPhase - View Root :/projetos.xhtml

INFO: org.hibernate.LazyInitializationException: failed to lazily initialize a collection of role: br.usp.icmc.sgpc.beans.ProjetoBean.auxilios, no session or session was closed
org.hibernate.LazyInitializationException: failed to lazily initialize a collection of role: br.usp.icmc.sgpc.beans.ProjetoBean.auxilios, no session or session was closed
	at org.hibernate.collection.AbstractPersistentCollection.throwLazyInitializationException(AbstractPersistentCollection.java:383)
	at org.hibernate.collection.AbstractPersistentCollection.throwLazyInitializationExceptionIfNotConnected(AbstractPersistentCollection.java:375)
	at org.hibernate.collection.AbstractPersistentCollection.readSize(AbstractPersistentCollection.java:122)
	at org.hibernate.collection.PersistentBag.size(PersistentBag.java:248)
	at javax.faces.model.ListDataModel.isRowAvailable(ListDataModel.java:110)
	at javax.faces.model.ListDataModel.setRowIndex(ListDataModel.java:185)
	at javax.faces.model.ListDataModel.setWrappedData(ListDataModel.java:220)
	at javax.faces.model.ListDataModel.<init>(ListDataModel.java:79)
	at javax.faces.component.UIData.getDataModel(UIData.java:1804)
	at javax.faces.component.UIData.setRowIndexWithoutRowStatePreserved(UIData.java:484)
	at javax.faces.component.UIData.setRowIndex(UIData.java:473)
	at javax.faces.component.UIData.iterate(UIData.java:1927)
	at javax.faces.component.UIData.processDecodes(UIData.java:1161)
	at org.primefaces.component.datatable.DataTable.processDecodes(DataTable.java:522)
	at javax.faces.component.UIData.iterate(UIData.java:1997)
	at javax.faces.component.UIData.processDecodes(UIData.java:1161)
	at org.primefaces.component.datatable.DataTable.processDecodes(DataTable.java:522)
	at com.sun.faces.context.PartialViewContextImpl$PhaseAwareVisitCallback.visit(PartialViewContextImpl.java:506)
	at com.sun.faces.component.visit.PartialVisitContext.invokeVisitCallback(PartialVisitContext.java:183)
	at javax.faces.component.UIData.visitTree(UIData.java:1411)
	at javax.faces.component.UIComponent.visitTree(UIComponent.java:1600)
	at javax.faces.component.UIForm.visitTree(UIForm.java:344)
	at javax.faces.component.UIComponent.visitTree(UIComponent.java:1600)
	at javax.faces.component.UIComponent.visitTree(UIComponent.java:1600)
	at javax.faces.component.UIComponent.visitTree(UIComponent.java:1600)
	at com.sun.faces.context.PartialViewContextImpl.processComponents(PartialViewContextImpl.java:376)
	at com.sun.faces.context.PartialViewContextImpl.processPartial(PartialViewContextImpl.java:252)
	at javax.faces.context.PartialViewContextWrapper.processPartial(PartialViewContextWrapper.java:183)
	at javax.faces.component.UIViewRoot.processDecodes(UIViewRoot.java:931)
	at com.sun.faces.lifecycle.ApplyRequestValuesPhase.execute(ApplyRequestValuesPhase.java:78)
	at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:101)
	at com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:118)
	at javax.faces.webapp.FacesServlet.service(FacesServlet.java:593)
	at org.apache.catalina.core.StandardWrapper.service(StandardWrapper.java:1539)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:343)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:217)
	at org.springframework.orm.hibernate3.support.OpenSessionInViewFilter.doFilterInternal(OpenSessionInViewFilter.java:198)
	at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:76)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:256)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:217)
	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:279)
	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175)
	at org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:655)
	at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:595)
	at com.sun.enterprise.web.WebPipeline.invoke(WebPipeline.java:98)
	at com.sun.enterprise.web.PESessionLockingStandardPipeline.invoke(PESessionLockingStandardPipeline.java:91)
	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:162)
	at org.apache.catalina.connector.CoyoteAdapter.doService(CoyoteAdapter.java:330)
	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:231)
	at com.sun.enterprise.v3.services.impl.ContainerMapper.service(ContainerMapper.java:174)
	at com.sun.grizzly.http.ProcessorTask.invokeAdapter(ProcessorTask.java:828)
	at com.sun.grizzly.http.ProcessorTask.doProcess(ProcessorTask.java:725)
	at com.sun.grizzly.http.ProcessorTask.process(ProcessorTask.java:1019)
	at com.sun.grizzly.http.DefaultProtocolFilter.execute(DefaultProtocolFilter.java:225)
	at com.sun.grizzly.DefaultProtocolChain.executeProtocolFilter(DefaultProtocolChain.java:137)
	at com.sun.grizzly.DefaultProtocolChain.execute(DefaultProtocolChain.java:104)
	at com.sun.grizzly.DefaultProtocolChain.execute(DefaultProtocolChain.java:90)
	at com.sun.grizzly.http.HttpProtocolChain.execute(HttpProtocolChain.java:79)
	at com.sun.grizzly.ProtocolChainContextTask.doCall(ProtocolChainContextTask.java:54)
	at com.sun.grizzly.SelectionKeyContextTask.call(SelectionKeyContextTask.java:59)
	at com.sun.grizzly.ContextTask.run(ContextTask.java:71)
	at com.sun.grizzly.util.AbstractThreadPool$Worker.doWork(AbstractThreadPool.java:532)
	at com.sun.grizzly.util.AbstractThreadPool$Worker.run(AbstractThreadPool.java:513)
	at java.lang.Thread.run(Thread.java:662)

INFO: org.hibernate.LazyInitializationException: failed to lazily initialize a collection of role: br.usp.icmc.sgpc.beans.ProjetoBean.auxilios, no session or session was closed
org.hibernate.LazyInitializationException: failed to lazily initialize a collection of role: br.usp.icmc.sgpc.beans.ProjetoBean.auxilios, no session or session was closed
	at org.hibernate.collection.AbstractPersistentCollection.throwLazyInitializationException(AbstractPersistentCollection.java:383)
	at org.hibernate.collection.AbstractPersistentCollection.throwLazyInitializationExceptionIfNotConnected(AbstractPersistentCollection.java:375)
	at org.hibernate.collection.AbstractPersistentCollection.readSize(AbstractPersistentCollection.java:122)
	at org.hibernate.collection.PersistentBag.size(PersistentBag.java:248)
	at javax.faces.model.ListDataModel.isRowAvailable(ListDataModel.java:110)
	at javax.faces.model.ListDataModel.setRowIndex(ListDataModel.java:185)
	at javax.faces.model.ListDataModel.setWrappedData(ListDataModel.java:220)
	at javax.faces.model.ListDataModel.<init>(ListDataModel.java:79)
	at javax.faces.component.UIData.getDataModel(UIData.java:1804)
	at javax.faces.component.UIData.setRowIndexWithoutRowStatePreserved(UIData.java:484)
	at javax.faces.component.UIData.setRowIndex(UIData.java:473)
	at javax.faces.component.UIData.iterate(UIData.java:1927)
	at javax.faces.component.UIData.processValidators(UIData.java:1204)
	at javax.faces.component.UIData.iterate(UIData.java:1999)
	at javax.faces.component.UIData.processValidators(UIData.java:1204)
	at com.sun.faces.context.PartialViewContextImpl$PhaseAwareVisitCallback.visit(PartialViewContextImpl.java:508)
	at com.sun.faces.component.visit.PartialVisitContext.invokeVisitCallback(PartialVisitContext.java:183)
	at javax.faces.component.UIData.visitTree(UIData.java:1411)
	at javax.faces.component.UIComponent.visitTree(UIComponent.java:1600)
	at javax.faces.component.UIForm.visitTree(UIForm.java:344)
	at javax.faces.component.UIComponent.visitTree(UIComponent.java:1600)
	at javax.faces.component.UIComponent.visitTree(UIComponent.java:1600)
	at javax.faces.component.UIComponent.visitTree(UIComponent.java:1600)
	at com.sun.faces.context.PartialViewContextImpl.processComponents(PartialViewContextImpl.java:376)
	at com.sun.faces.context.PartialViewContextImpl.processPartial(PartialViewContextImpl.java:252)
	at javax.faces.context.PartialViewContextWrapper.processPartial(PartialViewContextWrapper.java:183)
	at javax.faces.component.UIViewRoot.processValidators(UIViewRoot.java:1170)
	at com.sun.faces.lifecycle.ProcessValidationsPhase.execute(ProcessValidationsPhase.java:76)
	at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:101)
	at com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:118)
	at javax.faces.webapp.FacesServlet.service(FacesServlet.java:593)
	at org.apache.catalina.core.StandardWrapper.service(StandardWrapper.java:1539)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:343)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:217)
	at org.springframework.orm.hibernate3.support.OpenSessionInViewFilter.doFilterInternal(OpenSessionInViewFilter.java:198)
	at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:76)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:256)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:217)
	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:279)
	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175)
	at org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:655)
	at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:595)
	at com.sun.enterprise.web.WebPipeline.invoke(WebPipeline.java:98)
	at com.sun.enterprise.web.PESessionLockingStandardPipeline.invoke(PESessionLockingStandardPipeline.java:91)
	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:162)
	at org.apache.catalina.connector.CoyoteAdapter.doService(CoyoteAdapter.java:330)
	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:231)
	at com.sun.enterprise.v3.services.impl.ContainerMapper.service(ContainerMapper.java:174)
	at com.sun.grizzly.http.ProcessorTask.invokeAdapter(ProcessorTask.java:828)
	at com.sun.grizzly.http.ProcessorTask.doProcess(ProcessorTask.java:725)
	at com.sun.grizzly.http.ProcessorTask.process(ProcessorTask.java:1019)
	at com.sun.grizzly.http.DefaultProtocolFilter.execute(DefaultProtocolFilter.java:225)
	at com.sun.grizzly.DefaultProtocolChain.executeProtocolFilter(DefaultProtocolChain.java:137)
	at com.sun.grizzly.DefaultProtocolChain.execute(DefaultProtocolChain.java:104)
	at com.sun.grizzly.DefaultProtocolChain.execute(DefaultProtocolChain.java:90)
	at com.sun.grizzly.http.HttpProtocolChain.execute(HttpProtocolChain.java:79)
	at com.sun.grizzly.ProtocolChainContextTask.doCall(ProtocolChainContextTask.java:54)
	at com.sun.grizzly.SelectionKeyContextTask.call(SelectionKeyContextTask.java:59)
	at com.sun.grizzly.ContextTask.run(ContextTask.java:71)
	at com.sun.grizzly.util.AbstractThreadPool$Worker.doWork(AbstractThreadPool.java:532)
	at com.sun.grizzly.util.AbstractThreadPool$Worker.run(AbstractThreadPool.java:513)
	at java.lang.Thread.run(Thread.java:662)

INFO: org.hibernate.LazyInitializationException: failed to lazily initialize a collection of role: br.usp.icmc.sgpc.beans.ProjetoBean.auxilios, no session or session was closed
org.hibernate.LazyInitializationException: failed to lazily initialize a collection of role: br.usp.icmc.sgpc.beans.ProjetoBean.auxilios, no session or session was closed
	at org.hibernate.collection.AbstractPersistentCollection.throwLazyInitializationException(AbstractPersistentCollection.java:383)
	at org.hibernate.collection.AbstractPersistentCollection.throwLazyInitializationExceptionIfNotConnected(AbstractPersistentCollection.java:375)
	at org.hibernate.collection.AbstractPersistentCollection.readSize(AbstractPersistentCollection.java:122)
	at org.hibernate.collection.PersistentBag.size(PersistentBag.java:248)
	at javax.faces.model.ListDataModel.isRowAvailable(ListDataModel.java:110)
	at javax.faces.model.ListDataModel.setRowIndex(ListDataModel.java:185)
	at javax.faces.model.ListDataModel.setWrappedData(ListDataModel.java:220)
	at javax.faces.model.ListDataModel.<init>(ListDataModel.java:79)
	at javax.faces.component.UIData.getDataModel(UIData.java:1804)
	at javax.faces.component.UIData.setRowIndexWithoutRowStatePreserved(UIData.java:484)
	at javax.faces.component.UIData.setRowIndex(UIData.java:473)
	at javax.faces.component.UIData.iterate(UIData.java:1927)
	at javax.faces.component.UIData.processUpdates(UIData.java:1253)
	at org.primefaces.component.datatable.DataTable.processUpdates(DataTable.java:528)
	at javax.faces.component.UIData.iterate(UIData.java:2001)
	at javax.faces.component.UIData.processUpdates(UIData.java:1253)
	at org.primefaces.component.datatable.DataTable.processUpdates(DataTable.java:528)
	at com.sun.faces.context.PartialViewContextImpl$PhaseAwareVisitCallback.visit(PartialViewContextImpl.java:510)
	at com.sun.faces.component.visit.PartialVisitContext.invokeVisitCallback(PartialVisitContext.java:183)
	at javax.faces.component.UIData.visitTree(UIData.java:1411)
	at javax.faces.component.UIComponent.visitTree(UIComponent.java:1600)
	at javax.faces.component.UIForm.visitTree(UIForm.java:344)
	at javax.faces.component.UIComponent.visitTree(UIComponent.java:1600)
	at javax.faces.component.UIComponent.visitTree(UIComponent.java:1600)
	at javax.faces.component.UIComponent.visitTree(UIComponent.java:1600)
	at com.sun.faces.context.PartialViewContextImpl.processComponents(PartialViewContextImpl.java:376)
	at com.sun.faces.context.PartialViewContextImpl.processPartial(PartialViewContextImpl.java:252)
	at javax.faces.context.PartialViewContextWrapper.processPartial(PartialViewContextWrapper.java:183)
	at javax.faces.component.UIViewRoot.processUpdates(UIViewRoot.java:1229)
	at com.sun.faces.lifecycle.UpdateModelValuesPhase.execute(UpdateModelValuesPhase.java:78)
	at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:101)
	at com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:118)
	at javax.faces.webapp.FacesServlet.service(FacesServlet.java:593)
	at org.apache.catalina.core.StandardWrapper.service(StandardWrapper.java:1539)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:343)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:217)
	at org.springframework.orm.hibernate3.support.OpenSessionInViewFilter.doFilterInternal(OpenSessionInViewFilter.java:198)
	at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:76)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:256)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:217)
	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:279)
	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175)
	at org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:655)
	at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:595)
	at com.sun.enterprise.web.WebPipeline.invoke(WebPipeline.java:98)
	at com.sun.enterprise.web.PESessionLockingStandardPipeline.invoke(PESessionLockingStandardPipeline.java:91)
	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:162)
	at org.apache.catalina.connector.CoyoteAdapter.doService(CoyoteAdapter.java:330)
	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:231)
	at com.sun.enterprise.v3.services.impl.ContainerMapper.service(ContainerMapper.java:174)
	at com.sun.grizzly.http.ProcessorTask.invokeAdapter(ProcessorTask.java:828)
	at com.sun.grizzly.http.ProcessorTask.doProcess(ProcessorTask.java:725)
	at com.sun.grizzly.http.ProcessorTask.process(ProcessorTask.java:1019)
	at com.sun.grizzly.http.DefaultProtocolFilter.execute(DefaultProtocolFilter.java:225)
	at com.sun.grizzly.DefaultProtocolChain.executeProtocolFilter(DefaultProtocolChain.java:137)
	at com.sun.grizzly.DefaultProtocolChain.execute(DefaultProtocolChain.java:104)
	at com.sun.grizzly.DefaultProtocolChain.execute(DefaultProtocolChain.java:90)
	at com.sun.grizzly.http.HttpProtocolChain.execute(HttpProtocolChain.java:79)
	at com.sun.grizzly.ProtocolChainContextTask.doCall(ProtocolChainContextTask.java:54)
	at com.sun.grizzly.SelectionKeyContextTask.call(SelectionKeyContextTask.java:59)
	at com.sun.grizzly.ContextTask.run(ContextTask.java:71)
	at com.sun.grizzly.util.AbstractThreadPool$Worker.doWork(AbstractThreadPool.java:532)
	at com.sun.grizzly.util.AbstractThreadPool$Worker.run(AbstractThreadPool.java:513)
	at java.lang.Thread.run(Thread.java:662)

INFO: 27/04/2012 16:36:54 DEBUG br.usp.icmc.sgpc.fmw.CloseDialogPhaseListener:26 beforePhase - Setando atributos para funcionamento de componentes dialog...

GRAVE: org.hibernate.LazyInitializationException: failed to lazily initialize a collection of role: br.usp.icmc.sgpc.beans.ProjetoBean.auxilios, no session or session was closed
INFO: 27/04/2012 16:36:54 DEBUG org.springframework.orm.hibernate3.support.OpenSessionInViewFilter:207 doFilterInternal - Closing single Hibernate Session in OpenSessionInViewFilter

INFO: 27/04/2012 16:36:54 DEBUG org.springframework.orm.hibernate3.SessionFactoryUtils:800 closeSession - Closing Hibernate Session

Fica bastante evidente que o OSIV está funcionando. Ele abre a sessão corretamente… Então só posso concluir que o lazy loading é que está fazendo algo errado e não enxerga a session aberta. Seria o caso de a entidade estar detached? alguma idéia?