VRaptor + Erro collection is not associated with any session

Estou tendo um problema muito esporadicamente no sistema que estou desenvolvendo, num determinado momento eu recebo o seguinte erro:

[code]javax.persistence.PersistenceException: org.hibernate.HibernateException: collection is not associated with any session

14:40:57,573 ERROR [stderr] (http–0.0.0.0-8091-5) at org.hibernate.ejb.AbstractEntityManagerImpl.convert(AbstractEntityManagerImpl.java:1361)

14:40:57,573 ERROR [stderr] (http–0.0.0.0-8091-5) at org.hibernate.ejb.AbstractEntityManagerImpl.convert(AbstractEntityManagerImpl.java:1289)

14:40:57,573 ERROR [stderr] (http–0.0.0.0-8091-5) at org.hibernate.ejb.QueryImpl.getResultList(QueryImpl.java:261)

14:40:57,573 ERROR [stderr] (http–0.0.0.0-8091-5) at br.com.tranship.sgi.repository.dao.impl.EmbarcacaoDAOImpl.listarRebocadores(EmbarcacaoDAOImpl.java:375)

14:40:57,573 ERROR [stderr] (http–0.0.0.0-8091-5) at br.com.tranship.sgi.service.impl.EmbarcacaoServiceImpl.listarRebocadores(EmbarcacaoServiceImpl.java:92)

14:40:57,573 ERROR [stderr] (http–0.0.0.0-8091-5) at br.com.tranship.sgi.controller.AutotracController.list(AutotracController.java:100)

14:40:57,573 ERROR [stderr] (http–0.0.0.0-8091-5) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)

14:40:57,573 ERROR [stderr] (http–0.0.0.0-8091-5) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)

14:40:57,588 ERROR [stderr] (http–0.0.0.0-8091-5) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)

14:40:57,588 ERROR [stderr] (http–0.0.0.0-8091-5) at java.lang.reflect.Method.invoke(Method.java:606)

14:40:57,588 ERROR [stderr] (http–0.0.0.0-8091-5) at br.com.caelum.vraptor.interceptor.ExecuteMethodInterceptor.intercept(ExecuteMethodInterceptor.java:61)

14:40:57,588 ERROR [stderr] (http–0.0.0.0-8091-5) at br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:54)

14:40:57,588 ERROR [stderr] (http–0.0.0.0-8091-5) at br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:54)

14:40:57,588 ERROR [stderr] (http–0.0.0.0-8091-5) at br.com.caelum.vraptor.core.LazyInterceptorHandler.execute(LazyInterceptorHandler.java:61)

14:40:57,588 ERROR [stderr] (http–0.0.0.0-8091-5) at br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:54)

14:40:57,588 ERROR [stderr] (http–0.0.0.0-8091-5) at br.com.tranship.sgi.util.vraptor.interceptor.ExceptionInterceptor.intercept(ExceptionInterceptor.java:40)

14:40:57,588 ERROR [stderr] (http–0.0.0.0-8091-5) at br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:54)

14:40:57,588 ERROR [stderr] (http–0.0.0.0-8091-5) at br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:54)

14:40:57,588 ERROR [stderr] (http–0.0.0.0-8091-5) at br.com.tranship.sgi.util.vraptor.interceptor.NoCacheInterceptor.intercept(NoCacheInterceptor.java:43)

14:40:57,588 ERROR [stderr] (http–0.0.0.0-8091-5) at br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:54)

14:40:57,588 ERROR [stderr] (http–0.0.0.0-8091-5) at br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:54)

14:40:57,588 ERROR [stderr] (http–0.0.0.0-8091-5) at br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:56)

14:40:57,588 ERROR [stderr] (http–0.0.0.0-8091-5) at br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:54)

14:40:57,588 ERROR [stderr] (http–0.0.0.0-8091-5) at br.com.tranship.sgi.util.vraptor.interceptor.LoginInterceptor.intercept(LoginInterceptor.java:31)

14:40:57,588 ERROR [stderr] (http–0.0.0.0-8091-5) at br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:54)

14:40:57,588 ERROR [stderr] (http–0.0.0.0-8091-5) at br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:54)

14:40:57,588 ERROR [stderr] (http–0.0.0.0-8091-5) at br.com.caelum.vraptor.interceptor.FlashInterceptor.intercept(FlashInterceptor.java:83)

14:40:57,588 ERROR [stderr] (http–0.0.0.0-8091-5) at br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:54)

14:40:57,588 ERROR [stderr] (http–0.0.0.0-8091-5) at br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:54)

14:40:57,588 ERROR [stderr] (http–0.0.0.0-8091-5) at br.com.caelum.vraptor.interceptor.InstantiateInterceptor.intercept(InstantiateInterceptor.java:48)

14:40:57,588 ERROR [stderr] (http–0.0.0.0-8091-5) at br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:54)

14:40:57,588 ERROR [stderr] (http–0.0.0.0-8091-5) at br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:54)

14:40:57,588 ERROR [stderr] (http–0.0.0.0-8091-5) at br.com.caelum.vraptor.interceptor.ExceptionHandlerInterceptor.intercept(ExceptionHandlerInterceptor.java:71)

14:40:57,588 ERROR [stderr] (http–0.0.0.0-8091-5) at br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:54)

14:40:57,588 ERROR [stderr] (http–0.0.0.0-8091-5) at br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:54)

14:40:57,588 ERROR [stderr] (http–0.0.0.0-8091-5) at br.com.caelum.vraptor.core.LazyInterceptorHandler.execute(LazyInterceptorHandler.java:61)

14:40:57,588 ERROR [stderr] (http–0.0.0.0-8091-5) at br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:54)

14:40:57,588 ERROR [stderr] (http–0.0.0.0-8091-5) at br.com.caelum.vraptor.interceptor.ResourceLookupInterceptor.intercept(ResourceLookupInterceptor.java:69)

14:40:57,588 ERROR [stderr] (http–0.0.0.0-8091-5) at br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:54)

14:40:57,588 ERROR [stderr] (http–0.0.0.0-8091-5) at br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:54)

14:40:57,588 ERROR [stderr] (http–0.0.0.0-8091-5) at br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:56)

14:40:57,588 ERROR [stderr] (http–0.0.0.0-8091-5) at br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:54)

14:40:57,588 ERROR [stderr] (http–0.0.0.0-8091-5) at br.com.caelum.vraptor.core.EnhancedRequestExecution.execute(EnhancedRequestExecution.java:44)

14:40:57,588 ERROR [stderr] (http–0.0.0.0-8091-5) at br.com.caelum.vraptor.VRaptor$1.insideRequest(VRaptor.java:91)

14:40:57,588 ERROR [stderr] (http–0.0.0.0-8091-5) at br.com.caelum.vraptor.ioc.spring.SpringProvider.provideForRequest(SpringProvider.java:58)

14:40:57,588 ERROR [stderr] (http–0.0.0.0-8091-5) at br.com.caelum.vraptor.VRaptor.doFilter(VRaptor.java:88)

14:40:57,588 ERROR [stderr] (http–0.0.0.0-8091-5) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:280)

14:40:57,588 ERROR [stderr] (http–0.0.0.0-8091-5) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:248)

14:40:57,588 ERROR [stderr] (http–0.0.0.0-8091-5) at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:275)

14:40:57,588 ERROR [stderr] (http–0.0.0.0-8091-5) at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:161)

14:40:57,588 ERROR [stderr] (http–0.0.0.0-8091-5) at org.jboss.as.jpa.interceptor.WebNonTxEmCloserValve.invoke(WebNonTxEmCloserValve.java:50)

14:40:57,588 ERROR [stderr] (http–0.0.0.0-8091-5) at org.jboss.as.web.security.SecurityContextAssociationValve.invoke(SecurityContextAssociationValve.java:153)

14:40:57,588 ERROR [stderr] (http–0.0.0.0-8091-5) at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:155)

14:40:57,588 ERROR [stderr] (http–0.0.0.0-8091-5) at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)

14:40:57,588 ERROR [stderr] (http–0.0.0.0-8091-5) at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)

14:40:57,588 ERROR [stderr] (http–0.0.0.0-8091-5) at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:368)

14:40:57,588 ERROR [stderr] (http–0.0.0.0-8091-5) at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:877)

14:40:57,588 ERROR [stderr] (http–0.0.0.0-8091-5) at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:671)

14:40:57,588 ERROR [stderr] (http–0.0.0.0-8091-5) at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:930)

14:40:57,588 ERROR [stderr] (http–0.0.0.0-8091-5) at java.lang.Thread.run(Thread.java:724)

14:40:57,588 ERROR [stderr] (http–0.0.0.0-8091-5) Caused by: org.hibernate.HibernateException: collection is not associated with any session

14:40:57,588 ERROR [stderr] (http–0.0.0.0-8091-5) at org.hibernate.collection.internal.AbstractPersistentCollection.forceInitialization(AbstractPersistentCollection.java:484)

14:40:57,588 ERROR [stderr] (http–0.0.0.0-8091-5) at org.hibernate.engine.internal.StatefulPersistenceContext.initializeNonLazyCollections(StatefulPersistenceContext.java:906)

14:40:57,588 ERROR [stderr] (http–0.0.0.0-8091-5) at org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:294)

14:40:57,588 ERROR [stderr] (http–0.0.0.0-8091-5) at org.hibernate.loader.Loader.doList(Loader.java:2463)

14:40:57,588 ERROR [stderr] (http–0.0.0.0-8091-5) at org.hibernate.loader.Loader.doList(Loader.java:2449)

14:40:57,588 ERROR [stderr] (http–0.0.0.0-8091-5) at org.hibernate.loader.Loader.listIgnoreQueryCache(Loader.java:2279)

14:40:57,588 ERROR [stderr] (http–0.0.0.0-8091-5) at org.hibernate.loader.Loader.list(Loader.java:2274)

14:40:57,588 ERROR [stderr] (http–0.0.0.0-8091-5) at org.hibernate.loader.hql.QueryLoader.list(QueryLoader.java:470)

14:40:57,588 ERROR [stderr] (http–0.0.0.0-8091-5) at org.hibernate.hql.internal.ast.QueryTranslatorImpl.list(QueryTranslatorImpl.java:355)

14:40:57,588 ERROR [stderr] (http–0.0.0.0-8091-5) at org.hibernate.engine.query.spi.HQLQueryPlan.performList(HQLQueryPlan.java:196)

14:40:57,588 ERROR [stderr] (http–0.0.0.0-8091-5) at org.hibernate.internal.SessionImpl.list(SessionImpl.java:1115)

14:40:57,588 ERROR [stderr] (http–0.0.0.0-8091-5) at org.hibernate.internal.QueryImpl.list(QueryImpl.java:101)

14:40:57,588 ERROR [stderr] (http–0.0.0.0-8091-5) at org.hibernate.ejb.QueryImpl.getResultList(QueryImpl.java:252)

14:40:57,588 ERROR [stderr] (http–0.0.0.0-8091-5) … 57 more[/code]

Sendo que, ele pode acontecer a qualquer momento e em qualquer parte do sistema.

Pelo que eu sei esse erro só acontece quando tentamos recuperar uma lista lazy e uma sessão está fechada, já procurei em todas as classes e em nenhum momento acontece um session.close() ou entityManager.close(), alguém já passou por isso?

Estou usando o VRaptor 3.4.1 + JPA 2.0 + Hibernate 4 + JBoss 7.

Desde já agradeço a ajuda de todos.

como vc está controlando as sessões/transações? com o plugin do próprio vraptor?

Não estamos usando o plugin do vraptor.

Segue um exemplo de código para listar algum objeto:

[code]
public T findById(Integer id) throws GeralException {

	try{
		Query query = manager.createQuery("select value from "
				+ ((Class) ((ParameterizedType) this.getClass()
						.getGenericSuperclass()).getActualTypeArguments()[0])
						.getSimpleName() + " value where value.id = :value");
		query.setParameter("value", id);
			return (T) query.getSingleResult();
	}catch(NoResultException e){
		System.out.println("Objeto não encontrato:" + id);
		e.printStackTrace();
		return null;
	}catch(Exception e){
		trataErro(e);
		return null;
	}	
}[/code]

Agora outro exemplo para inserir ou atualizar:

[code]public void persist(T unsaved) throws GeralException {
try{

		unsaved = manager.merge(unsaved);
		manager.persist(unsaved);
		manager.flush();
	}catch(Exception e){
		trataErro(e);
	}	
}[/code]

Um outro problema que eu achei, a cada 12 horas (mais ou menos) sem atividade no sistema o mysql mata a conexão com o aplicativo.