多次点击一个查询按钮,点击的快了,就会出现session is closed异常,在方法里看了一下,是因为同时进行了两次getSession,前一次的session.close()把session关闭了,第二个session就得不到了,有没有什么好的解决办法
解决方案 »
- birt分组排序和导出excel问题-------------------------急!!!!
- Java人,来开会了!请正在找Java方面工作的人,和刚刚开始Java工作的人
- hibernate 一对多关系的疑问!!!!前辈入!!!!!
- 高分求陈天河《struts hibernate spring集成开发宝典》随书源码
- 请教Struts和hiberante的问题?
- 在本地是好的,换到服务器上面就出现如下错误,不晓得问题出在哪里?请帮忙看一下,谢谢
- EJB怎么记录log呢????
- Spring的Bean配置中,为什么会找不到类?(高分求解)
- 一个很小的问题
- 应用程序中大量业务参数的存储和访问问题
- 简单区别一下session,request.getSession()的区别
- 中英网站之间如何切换
http://blogger.org.cn/blog/more.asp?name=lhwork&id=20911
个人感觉不会是你说的原因的。除非你点击的速度是光速。可能是你程式的架构有问题,要不然的话,不管你点击多少次,最多只会请求多个Sesssin而已,不会出现共用Session现象吧。你是自己手动管理 Session吗?
建议你用spring 吧,让他来管理你的session
就是调用同一个查询方法,我在方法开始和结束加了两个输出
[SessionImpl(PersistenceContext[entityKeys=[],collectionKeys=[]];ActionQueue[insertions=[] updates=[] deletions=[] collectionCreations=[] collectionRemovals=[] collectionUpdates=[]])]session is open:true
[SessionImpl(PersistenceContext[entityKeys=[],collectionKeys=[]];ActionQueue[insertions=[] updates=[] deletions=[] collectionCreations=[] collectionRemovals=[] collectionUpdates=[]])]session is open:true
[SessionImpl(<closed>)]session is open:false
2009-11-5 9:52:44 org.apache.catalina.core.StandardWrapperValve invoke
严重: Servlet.service() for servlet action threw exception
org.hibernate.SessionException: Session is closed!
我是用的spring+hibernate,应该怎样对session管理才能不会出这样的错
session当成类变量? session根本就不应该实现声明成类变量,成员变量,静态变量等,只能是局部变量,随时用,随时取得,随时关闭就好了。用了 Spring,为为什么还要自己管理 Session关闭?在 Spring配置文件为 Hibernate 配置 SessionFactory,然后用 Spring 提供的工具类获取 Session就可以了,不用考虑关闭,Spring会帮你做。Session session = SessionFactoryUtils.getSession(getSessionFactory(), false);
我用super.getSession()得到session,可以不用关闭么,是spring自动关闭了么
<filter-name>hibernateFilter</filter-name>
<filter-class> org.springframework.orm.hibernate3.support.OpenSessionInViewFilter
</filter-class> <init-param>
<param-name>singleSession</param-name>
<param-value>false</param-value>
</init-param></filter>
session当成类变量?没见过这么做的
自己开关闭session?我的建议:
如果你用了Spring对事物进行了管理,即在Spring的配置文件里面配置了sessionfactory 事务传播特性,哪些包下的那些函数参与事务,然后再你的用你的dao继承hibernatedaosupport ,这样下来你就不用关心事务了,随便用就行了,不用开启关闭。
将session绑定request这个不错
<bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
<property name="configLocation">
<value>classpath:hibernate.cfg.xml</value>
</property>
</bean>
<!-- 配置事务管理器 -->
<bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager">
<property name="sessionFactory">
<ref bean="sessionFactory"/>
</property>
</bean>
<!--事务管理对象1.注解2.xml配置-->
<tx:annotation-driven transaction-manager="transactionManager"/>
<!-- 配置事务的传播特性 -->
<tx:advice id="txAdvice" transaction-manager="transactionManager">
<tx:attributes>
<tx:method name="save*" propagation="REQUIRED"/>
<tx:method name="del*" propagation="REQUIRED"/>
<tx:method name="update*" propagation="REQUIRED"/>
<tx:method name="*" read-only="true"/>
</tx:attributes>
</tx:advice>
<!-- jianmin -->
<!-- 那些类的哪些方法参与事务 -->
<aop:config>
<aop:pointcut id="allManagerMethod" expression="execution(* com.crm.service.saleManage.*.*(..) ) "/>
<aop:advisor pointcut-ref="allManagerMethod" advice-ref="txAdvice"/>
</aop:config>
<aop:config>
<aop:pointcut id="managerMethod" expression="execution(* com.crm.service.fu.base.*.*(..))"/>
<aop:advisor pointcut-ref="managerMethod" advice-ref="txAdvice"/>
</aop:config>
这个什么错误????
userName=sa
userPassword=sa
session=SessionImpl(PersistenceContext[entityKeys=[],collectionKeys=[]];ActionQueue[insertions=[] updates=[] deletions=[] collectionCreations=[] collectionRemovals=[] collectionUpdates=[]])
query=QueryImpl(from User user where user.userName=? and user.password=?)
org.hibernate.exception.GenericJDBCException: Cannot open connection
at org.hibernate.exception.SQLStateConverter.handledNonSpecificException(SQLStateConverter.java:103)
at org.hibernate.exception.SQLStateConverter.convert(SQLStateConverter.java:91)
at org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:43)
at org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:29)
at org.hibernate.jdbc.ConnectionManager.openConnection(ConnectionManager.java:426)
at org.hibernate.jdbc.ConnectionManager.getConnection(ConnectionManager.java:144)
at org.hibernate.jdbc.AbstractBatcher.prepareQueryStatement(AbstractBatcher.java:139)
at org.hibernate.loader.Loader.prepareQueryStatement(Loader.java:1547)
at org.hibernate.loader.Loader.doQuery(Loader.java:673)
at org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:236)
at org.hibernate.loader.Loader.doList(Loader.java:2220)
at org.hibernate.loader.Loader.listIgnoreQueryCache(Loader.java:2104)
at org.hibernate.loader.Loader.list(Loader.java:2099)
at org.hibernate.loader.hql.QueryLoader.list(QueryLoader.java:378)
at org.hibernate.hql.ast.QueryTranslatorImpl.list(QueryTranslatorImpl.java:338)
at org.hibernate.engine.query.HQLQueryPlan.performList(HQLQueryPlan.java:172)
at org.hibernate.impl.SessionImpl.list(SessionImpl.java:1121)
at org.hibernate.impl.QueryImpl.list(QueryImpl.java:79)
at com.my.dao.impl.UserLoginDAO.isValidUser(UserLoginDAO.java:25)
at com.my.service.impl.UserLoginService.isValidUser(UserLoginService.java:26)
at com.my.action.LoginAction.login(LoginAction.java:192)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at com.opensymphony.xwork2.DefaultActionInvocation.invokeAction(DefaultActionInvocation.java:404)
at com.opensymphony.xwork2.DefaultActionInvocation.invokeActionOnly(DefaultActionInvocation.java:267)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:229)
at com.opensymphony.xwork2.interceptor.DefaultWorkflowInterceptor.doIntercept(DefaultWorkflowInterceptor.java:221)
at com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:86)
at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:224)
at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:223)
at com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(UtilTimerStack.java:455)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:221)
at com.opensymphony.xwork2.validator.ValidationInterceptor.doIntercept(ValidationInterceptor.java:150)
at org.apache.struts2.interceptor.validation.AnnotationValidationInterceptor.doIntercept(AnnotationValidationInterceptor.java:48)
at com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:86)
at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:224)
at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:223)
at com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(UtilTimerStack.java:455)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:221)
at com.opensymphony.xwork2.interceptor.ConversionErrorInterceptor.intercept(ConversionErrorInterceptor.java:123)
at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:224)
at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:223)
at com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(