como vc está pegando as Session’s nas suas classes?
se vc está usando um ComponentFactory pra isso, é só remover o método que fecha a sessão
como vc está pegando as Session’s nas suas classes?
se vc está usando um ComponentFactory pra isso, é só remover o método que fecha a sessão
faça o seguinte… tire os componentes utilitários do SpringProvider… se vc tá injetando via @PersistenceContext vc não vai precisar deles
tenta dar uma olhada na seção 12.6.3 desse site:
http://static.springsource.org/spring/docs/2.5.x/reference/orm.html
ve se isso te ajuda a resolver esse problema…
de qqer forma, se vc registrar os componentes da JPA do VRaptor, vc não precisa do OpenEntityManagerInViewFilter… eles já fazem isso, basta receber no construtor dos seus daos um EntityManager…
o único problema é que seu persistence-unit tem que se chamar “default” ou vc tem que estender o EntityManagerCreator e trocar o persistence-unit
Mesmo configurando o OpenEntityManagerInViewFilter, a sessão é fechada. Como utilizá-lo integrado ao VRaptor 3.1 ?
Como faço para que ele faça parte do stack de interceptors controlados pelo VRaptor ? O VRaptor encerra a cadeia de filtros por ele gerenciados e, posteriormente, de modo que o OpenEntityManagerInViewFilter já recebe a sessão fechada, não tem como mantê-la aberta (duh)? Como ele é o próximo declarado no web.xml, deve passar por ele ou estou enganado?
Sendo assim, como o VRaptor que inicializa o Spring internamente, ele deve estar após o filter do VRaptor, como até foi sugerido para mim pelo Lucas.
Minha configuração do web.xml
<!--
if you are using a servlet 3.0 container as glassfish 3 or jetty 8,
you dont need this filter configuration
-->
<filter>
<filter-name>vraptor</filter-name>
<filter-class>br.com.caelum.vraptor.VRaptor</filter-class>
</filter>
<!-- Filtro do Open Session In View controlado pelo Spring -->
<filter>
<display-name>Open EntityManager In View Filter</display-name>
<filter-name>OpenEntityManagerInView</filter-name>
<filter-class>org.springframework.orm.jpa.support.OpenEntityManagerInViewFilter</filter-class>
<init-param>
<param-name>flushMode</param-name>
<param-value>AUTO</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>vraptor</filter-name>
<url-pattern>/*</url-pattern>
<dispatcher>FORWARD</dispatcher>
<dispatcher>REQUEST</dispatcher>
</filter-mapping>
<filter-mapping>
<filter-name>OpenEntityManagerInView</filter-name>
<url-pattern>/*</url-pattern>
<dispatcher>REQUEST</dispatcher>
<dispatcher>FORWARD</dispatcher>
</filter-mapping>
Stacktrace
HTTP ERROR: 500
org.hibernate.SessionException: Session is closed!
RequestURI=/vraptor/advogado/home
Caused by:
br.com.caelum.vraptor.InterceptionException: org.hibernate.SessionException: Session is closed!
at br.com.caelum.vraptor.interceptor.ExecuteMethodInterceptor.intercept(ExecuteMethodInterceptor.java:77)
at br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:46)
at br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:59)
at br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:48)
at br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:59)
at br.com.caelum.vraptor.interceptor.ParametersInstantiatorInterceptor.intercept(ParametersInstantiatorInterceptor.java:77)
at br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:46)
at br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:59)
at br.com.caelum.vraptor.interceptor.InstantiateInterceptor.intercept(InstantiateInterceptor.java:42)
at br.com.caelum.vraptor.core.InstantiatedInterceptorHandler.execute(InstantiatedInterceptorHandler.java:41)
at br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:59)
at br.com.caelum.vraptor.util.jpa.JPATransactionInterceptor.intercept(JPATransactionInterceptor.java:46)
at br.com.caelum.vraptor.core.InstantiatedInterceptorHandler.execute(InstantiatedInterceptorHandler.java:41)
at br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:59)
at br.com.caelum.vraptor.interceptor.InterceptorListPriorToExecutionExtractor.intercept(InterceptorListPriorToExecutionExtractor.java:46)
at br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:46)
at br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:59)
at br.com.caelum.vraptor.interceptor.FlashInterceptor.intercept(FlashInterceptor.java:80)
at br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:46)
at br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:59)
at br.com.caelum.vraptor.interceptor.ResourceLookupInterceptor.intercept(ResourceLookupInterceptor.java:67)
at br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:46)
at br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:59)
at br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:48)
at br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:59)
at br.com.caelum.vraptor.core.DefaultRequestExecution.execute(DefaultRequestExecution.java:62)
at br.com.caelum.vraptor.VRaptor$1.insideRequest(VRaptor.java:91)
To injetando via @PersistenceContext (estou usando EntityManager) e utilizando os utilitarios do VRaptor no SpringProvider.
Vou tentar estendendo os metodos dos componentes utilitarios que fecham a sessao e dou o feedback aqui.
Obrigado camarada
Mesmo retirando qualquer utilitario do VRaptor que porventura venha a fechar a sessao ele continua o fazendo.
Esta configurando o OpenEntityManagerInView corretamente, como informa no console:
15:38:35,951 INFO [VRaptor ] VRaptor 3 successfuly initialized
15:38:35,960 DEBUG [OpenEntityManagerInViewFilter] Initializing filter 'OpenEntityManagerInView'
15:38:35,980 DEBUG [OpenEntityManagerInViewFilter] Filter 'OpenEntityManagerInView' configured successfully
15:38:55,861 DEBUG [DefaultListableBeanFactory] Autowiring by type from bean name 'executeMethodInterceptor' via constructor to bean named 'defaultValidator'
15:38:55,868 DEBUG [DefaultListableBeanFactory] Finished creating instance of bean 'executeMethodInterceptor'
15:38:55,888 DEBUG [SharedEntityManagerCreator$SharedEntityManagerInvocationHandler] Creating new EntityManager for shared EntityManager invocation
15:38:56,372 DEBUG [EntityManagerFactoryUtils] Closing JPA EntityManager
2010-01-30 15:38:56.377::WARN: /vraptor/advogado/home
br.com.caelum.vraptor.InterceptionException: org.hibernate.SessionException: Session is closed!
at br.com.caelum.vraptor.interceptor.ExecuteMethodInterceptor.intercept(ExecuteMethodInterceptor.java:77)
at br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:46)
at br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:59)
at br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:48)
at br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:59)
at br.com.caelum.vraptor.interceptor.ParametersInstantiatorInterceptor.intercept(ParametersInstantiatorInterceptor.java:77)
at br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:46)
at br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:59)
at br.com.caelum.vraptor.interceptor.InstantiateInterceptor.intercept(InstantiateInterceptor.java:42)
at br.com.caelum.vraptor.core.InstantiatedInterceptorHandler.execute(InstantiatedInterceptorHandler.java:41)
at br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:59)
at br.com.caelum.vraptor.interceptor.InterceptorListPriorToExecutionExtractor.intercept(InterceptorListPriorToExecutionExtractor.java:46)
at br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:46)
at br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:59)
at br.com.caelum.vraptor.interceptor.FlashInterceptor.intercept(FlashInterceptor.java:80)
at br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:46)
at br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:59)
at br.com.caelum.vraptor.interceptor.ResourceLookupInterceptor.intercept(ResourceLookupInterceptor.java:67)
at br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:46)
at br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:59)
at br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:48)
at br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:59)
at br.com.caelum.vraptor.core.DefaultRequestExecution.execute(DefaultRequestExecution.java:62)
at br.com.caelum.vraptor.VRaptor$1.insideRequest(VRaptor.java:91)
at br.com.caelum.vraptor.ioc.spring.SpringProvider.provideForRequest(SpringProvider.java:55)
at br.com.caelum.vraptor.VRaptor.doFilter(VRaptor.java:88)
at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1089)
at org.mortbay.jetty.servlet.ServletHandler.handle(ServletHandler.java:365)
at org.mortbay.jetty.security.SecurityHandler.handle(SecurityHandler.java:216)
at org.mortbay.jetty.servlet.SessionHandler.handle(SessionHandler.java:181)
at org.mortbay.jetty.handler.ContextHandler.handle(ContextHandler.java:712)
at org.mortbay.jetty.webapp.WebAppContext.handle(WebAppContext.java:405)
at org.mortbay.jetty.handler.ContextHandlerCollection.handle(ContextHandlerCollection.java:211)
at org.mortbay.jetty.handler.HandlerCollection.handle(HandlerCollection.java:114)
at org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:139)
at org.mortbay.jetty.Server.handle(Server.java:285)
at org.mortbay.jetty.HttpConnection.handleRequest(HttpConnection.java:502)
at org.mortbay.jetty.HttpConnection$RequestHandler.headerComplete(HttpConnection.java:821)
at org.mortbay.jetty.HttpParser.parseNext(HttpParser.java:513)
at org.mortbay.jetty.HttpParser.parseAvailable(HttpParser.java:208)
at org.mortbay.jetty.HttpConnection.handle(HttpConnection.java:378)
at org.mortbay.io.nio.SelectChannelEndPoint.run(SelectChannelEndPoint.java:368)
at org.mortbay.thread.BoundedThreadPool$PoolThread.run(BoundedThreadPool.java:442)
sinistro! 
Tirei todos, ta tudo gerenciado pelo Spring num arquivo application-datasource.xml
O erro persiste
16:06:29,535 DEBUG [DefaultListableBeanFactory] Autowiring by type from bean name 'executeMethodInterceptor' via constructor to bean named 'defaultMethodInfo'
16:06:29,535 DEBUG [DefaultListableBeanFactory] Autowiring by type from bean name 'executeMethodInterceptor' via constructor to bean named 'defaultValidator'
16:06:29,540 DEBUG [DefaultListableBeanFactory] Finished creating instance of bean 'executeMethodInterceptor'
16:06:29,563 DEBUG [SharedEntityManagerCreator$SharedEntityManagerInvocationHandler] Creating new EntityManager for shared EntityManager invocation
16:06:29,760 DEBUG [EntityManagerFactoryUtils] Closing JPA EntityManager
2010-01-30 16:06:29.765::WARN: /vraptor/advogado/home
br.com.caelum.vraptor.InterceptionException: org.hibernate.SessionException: Session is closed!
at br.com.caelum.vraptor.interceptor.ExecuteMethodInterceptor.intercept(ExecuteMethodInterceptor.java:77)
at br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:46)
at br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:59)
at br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:48)
at br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:59)
at br.com.caelum.vraptor.interceptor.ParametersInstantiatorInterceptor.intercept(ParametersInstantiatorInterceptor.java:77)
at br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:46)
at br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:59)
at br.com.caelum.vraptor.interceptor.InstantiateInterceptor.intercept(InstantiateInterceptor.java:42)
at br.com.caelum.vraptor.core.InstantiatedInterceptorHandler.execute(InstantiatedInterceptorHandler.java:41)
at br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:59)
tenta dar uma olhada na seção 12.6.3 desse site:http://static.springsource.org/spring/docs/2.5.x/reference/orm.html
ve se isso te ajuda a resolver esse problema…
de qqer forma, se vc registrar os componentes da JPA do VRaptor, vc não precisa do OpenEntityManagerInViewFilter… eles já fazem isso, basta receber no construtor dos seus daos um EntityManager…
o único problema é que seu persistence-unit tem que se chamar “default” ou vc tem que estender o EntityManagerCreator e trocar o persistence-unit
Entendi. Eu prefiro deixar o VRaptor cuidar disso para mim. Vou fazer com que o DAO receba o entitymanager no construtor e dou o feedback.
Muito obrigado lucas!
Ps. Lembrando que estou utilizando o Spring 3.0 esta documentação é do 2.5
Resolvido!
Vai valer a pena continuar insistindo no VRaptor. rs
Valeu lucas