Exception : org.mise en veille prolongée.SessionException: Session était déjà fermé
Je développe une application à l'aide de java + spring + hibernate + oracle. quand j'ajoute ci-dessous la propriété dans mon dispatcher-servlet.xml fichier.
<prop key="hibernate.transaction.auto_close_session">true</prop>
Elle lève une exception, comme ci-dessous :
org.hibernate.SessionException: Session was already closed
at org.hibernate.impl.SessionImpl.close(SessionImpl.java:302)
at org.springframework.orm.hibernate3.SessionFactoryUtils.closeSession(SessionFactoryUtils.java:791)
at org.springframework.orm.hibernate3.SessionFactoryUtils.closeSessionOrRegisterDeferredClose(SessionFactoryUtils.java:777)
at org.springframework.orm.hibernate3.HibernateTransactionManager.doCleanupAfterCompletion(HibernateTransactionManager.java:737)
at org.springframework.transaction.support.AbstractPlatformTransactionManager.cleanupAfterCompletion(AbstractPlatformTransactionManager.java:1011)
at org.springframework.transaction.support.AbstractPlatformTransactionManager.processCommit(AbstractPlatformTransactionManager.java:804)
at org.springframework.transaction.support.AbstractPlatformTransactionManager.commit(AbstractPlatformTransactionManager.java:723)
at org.springframework.transaction.interceptor.TransactionAspectSupport.commitTransactionAfterReturning(TransactionAspectSupport.java:393)
at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:120)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:172)
at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:202)
at $Proxy354.getMenu4Priv(Unknown Source)
at com.itzcash.easy.reports.controller.SalesDistributionReportController.searchCustomerProfile(SalesDistributionReportController.java:261)
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 org.springframework.web.bind.annotation.support.HandlerMethodInvoker.invokeHandlerMethod(HandlerMethodInvoker.java:176)
at org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter.invokeHandlerMethod(AnnotationMethodHandlerAdapter.java:426)
at org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter.handle(AnnotationMethodHandlerAdapter.java:414)
at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:790)
at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:719)
at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:644)
at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:560)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:637)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at net.bull.javamelody.MonitoringFilter.doFilter(MonitoringFilter.java:208)
at net.bull.javamelody.MonitoringFilter.doFilter(MonitoringFilter.java:181)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.jboss.web.tomcat.filters.ReplyHeaderFilter.doFilter(ReplyHeaderFilter.java:96)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:235)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
at org.jboss.web.tomcat.security.SecurityAssociationValve.invoke(SecurityAssociationValve.java:190)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:433)
at org.jboss.web.tomcat.security.JaccContextValve.invoke(JaccContextValve.java:92)
at org.jboss.web.tomcat.security.SecurityContextEstablishmentValve.process(SecurityContextEstablishmentValve.java:126)
at org.jboss.web.tomcat.security.SecurityContextEstablishmentValve.invoke(SecurityContextEstablishmentValve.java:70)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
at org.jboss.web.tomcat.service.jca.CachedConnectionValve.invoke(CachedConnectionValve.java:158)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:330)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:829)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:598)
at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447)
at java.lang.Thread.run(Unknown Source)
si je supprime cette propriété fait pas exception s'est produite.
Mon code est comme ci-dessous :
@Service
Class ABCServiceImpl
{
@Transactional
void methodA()
{
//called the method in DAOImpl package -- methodB().
}
}
@Repository
Class ABCDAOImpl
{
@Autowired
SessionFectory s;
void methodB()
{
//hibernate operatoion
}
}
Merci d'avance.
pouvez-vous fournir un extrait de code où est est de lancer cette exception.
Faites-vous hibernate des opérations à l'intérieur de la transaction?Si ce n'est pas tout le fonctionnement d'une session à l'intérieur de la transaction,comme
U peut juste montrer peu de code que ce que tu fais. ?
Dans ServiceImpl package : j'ai utiliser le @Transactionnelle et à partir de ce que j'ai appelé la DAOImpl Paquet. et effectué toutes les opérations de transaction. alors comment j'ai résolu ce problème ?
J'ai ajouté un peu de base de la structure de mon code.
Faites-vous hibernate des opérations à l'intérieur de la transaction?Si ce n'est pas tout le fonctionnement d'une session à l'intérieur de la transaction,comme
hibernate.transaction.auto_close_session
va fermer la session après la transaction.U peut juste montrer peu de code que ce que tu fais. ?
Dans ServiceImpl package : j'ai utiliser le @Transactionnelle et à partir de ce que j'ai appelé la DAOImpl Paquet. et effectué toutes les opérations de transaction. alors comment j'ai résolu ce problème ?
J'ai ajouté un peu de base de la structure de mon code.
OriginalL'auteur Keval Trivedi | 2014-07-03
Vous devez vous connecter pour publier un commentaire.
OriginalL'auteur user4074470
Le problème est que vous ne pouvez pas appeler
close()
deux fois sur unSession
, la deuxième fois que vous appelez leclose()
méthode, il en sortira de cette Exception.Par la mise en
auto_close
vous sont implicitement la fermeture de la session une fois que vous l'utilisez, donc la solution serait de retirer leclose()
méthodes dans votre code, ou tout simplement supprimer queauto_close
config et fermer les sessions manuellement après utilisation.ah, alors le problème est que getCurrentSession est de vous obtenir de la précédente session, qui a été fermée automatiquement à cause de cela, donc essayer de l'utiliser à nouveau (même s'il est fermé) vous donne que trop. Mais tout cela, c'est à peu près deviner puisque nous ne voyons aucun code que nous avons pu analyser.
c'est simple à ouvrir sesstion nouveau 😉
Je veux fermer la connexion implicitement. parce que quand je l'extraction de la grande quantité de données provenant de la base de données prend beaucoup de temps. si je implicitement fermer la connexion après la transaction. il me donne une réponse rapide.
OriginalL'auteur Ed Morales
Si cette option est définie à true, alors la session sera automatiquement fermé au cours de l'après achèvement de la phase de la transaction. D'accord avec Edward sur ce que vous essayez implicite de fermer la connexion à jeter cette Exception.
OriginalL'auteur RexSmith