这异常时我连接SQL server2005数据库的时候抛出来的.不晓得怎么解决.2009-07-09 14:37:41 [ERROR]-[org.hibernate.util.JDBCExceptionReporter] 使用 DBComms.receive 方法期间发生异常。操作:Connection reset。上下文:(2) [Thread[http-8080-8,5,main], IO:c4217, Dbc:71da3]。PktNum:0。TotalReceived:0。PktSize:4,096。
2009-07-09 14:37:41 [ERROR]-[org.hibernate.util.JDBCExceptionReporter] 该连接已关闭。
2009-07-09 14:37:41 [ERROR]-[org.hibernate.util.JDBCExceptionReporter] Already closed.
2009-07-09 14:37:42 [ERROR]-[org.hibernate.util.JDBCExceptionReporter] Already closed.
2009-07-09 14:37:42 [ERROR]-[org.springframework.orm.hibernate3.SessionFactoryUtils] Could not close Hibernate Session
org.hibernate.exception.GenericJDBCException: Cannot close connection
at org.hibernate.exception.SQLStateConverter.handledNonSpecificException(SQLStateConverter.java:82)
at org.hibernate.exception.SQLStateConverter.convert(SQLStateConverter.java:70)
at org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:43)
at org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:29)
at org.hibernate.jdbc.ConnectionManager.closeConnection(ConnectionManager.java:331)
at org.hibernate.jdbc.ConnectionManager.cleanup(ConnectionManager.java:262)
at org.hibernate.jdbc.ConnectionManager.close(ConnectionManager.java:194)
at org.hibernate.impl.SessionImpl.close(SessionImpl.java:289)
at org.springframework.orm.hibernate3.SessionFactoryUtils.doClose(SessionFactoryUtils.java:787)
at org.springframework.orm.hibernate3.SessionFactoryUtils.closeSessionOrRegisterDeferredClose(SessionFactoryUtils.java:775)
at org.springframework.orm.hibernate3.SessionFactoryUtils.access$100(SessionFactoryUtils.java:87)
at org.springframework.orm.hibernate3.SessionFactoryUtils$SpringSessionSynchronization.afterCompletion(SessionFactoryUtils.java:966)
at org.springframework.transaction.support.AbstractPlatformTransactionManager.invokeAfterCompletion(AbstractPlatformTransactionManager.java:729)
at org.springframework.transaction.support.AbstractPlatformTransactionManager.triggerAfterCompletion(AbstractPlatformTransactionManager.java:701)
at org.springframework.transaction.support.AbstractPlatformTransactionManager.processRollback(AbstractPlatformTransactionManager.java:612)
at org.springframework.transaction.support.AbstractPlatformTransactionManager.rollback(AbstractPlatformTransactionManager.java:560)
at org.springframework.transaction.interceptor.TransactionAspectSupport.doCloseTransactionAfterThrowing(TransactionAspectSupport.java:285)
at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:100)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:144)
at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:174)
at $Proxy21.findXxFlowbillByCaller(Unknown Source)
at com.yz.customer.action.play.PlayerAction.listPlayer(PlayerAction.java:131)
at sun.reflect.GeneratedMethodAccessor110.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)

解决方案 »

  1.   

    该连接已关闭。看来又是lazy干的好事。 你不能在事务的外面,第一次调用那些lazy的东西
      

  2.   


    2009-07-09 14:37:41 [ERROR]-[org.hibernate.util.JDBCExceptionReporter] 使用 DBComms.receive 方法期间发生异常。操作:Connection reset。上下文:(2) [Thread[http-8080-8,5,main], IO:c4217, Dbc:71da3]。PktNum:0。TotalReceived:0。PktSize:4,096。 
    2009-07-09 14:37:41 [ERROR]-[org.hibernate.util.JDBCExceptionReporter] 该连接已关闭。 
    2009-07-09 14:37:41 [ERROR]-[org.hibernate.util.JDBCExceptionReporter] Already closed. 
    2009-07-09 14:37:42 [ERROR]-[org.hibernate.util.JDBCExceptionReporter] Already closed. 
    2009-07-09 14:37:42 [ERROR]-[org.springframework.orm.hibernate3.SessionFactoryUtils] Could not close Hibernate Session 
    org.hibernate.exception.GenericJDBCException: Cannot close connection 关闭session或connection前看看他们是不是已经关了。
    lazy的数据不能在关闭session后访问,要访问就把lazy取消,或保持session打开状态
    目前只会这些
    ⊙﹏⊙b汗ing
      

  3.   

    代理对象是用依赖于SESSION的,也就是说SESSION关闭后这个代理对象不可用!
      

  4.   

    我配置文件是这样配置的:
    <bean id="sqlserverDataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
    <property name="driverClassName" value="${jdbc.customerCallcenter.driver}"/>
    <property name="url" value="${jdbc.customerCallcenter.url}"/>
    <property name="username" value="${jdbc.customerCallcenter.username}"/>
    <property name="password" value="${jdbc.customerCallcenter.password}"/>
                    <property name="maxActive" value="5"/>
    </bean> <bean id="sqlserverSpringSessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
    <property name="dataSource">
    <ref local="sqlserverDataSource"/>
    </property>
    <property name="mappingResources">
    <list>
    <value>com/yz/customer/pojo/XxFlowbill.hbm.xml</value>
    <value>com/yz/customer/pojo/XxAgentinfo.hbm.xml</value>
    <value>com/yz/customer/pojo/TRoleGroup.hbm.xml</value>
    </list>
    </property>
    <property name="hibernateProperties">
                <props>
                    <prop key="hibernate.dialect">${jdbc.customerCallcenter.dialect}</prop>
                    <prop key="hibernate.query.substitutions">true=1 false=0</prop>
                    <prop key="hibernate.show_sql">false</prop>
                </props>
            </property>
    </bean>
    <bean id="xxFlowbillDao"
    class="com.yz.customer.dao.impl.XxFlowbillDaoImpl">
    <property name="sessionFactory">
    <ref bean="sqlserverSpringSessionFactory" />
    </property>
    </bean>
      

  5.   

    数据库连接已经关闭了吧?或者期间你重启过数据库?
    感觉不像是lazy的问题,lazy会报session已经关闭,而这里报的是session关闭异常.楼主还是查一下数据库连接.重启数据库\重启应用,然后看一下行不行.
      

  6.   

    我连接的数据库是局域网内的一台服务器,数据库是sqlserver2005的,我的程序在启动的时候没有出现什么问题,过了一段时间,这个一段时间是在1天之内就会有这样的异常。。我服务器是7.8号启动,第二天就有异常.
    2009-7-8 10:29:21 org.apache.catalina.core.StandardEngine start
    信息: Starting Servlet Engine: Apache Tomcat/6.0.13
    07-08 10:29:59 INFO  [main] filter.GenericFilterBean - Filter 'encodingFilter' configured successfully
    2009-7-8 10:29:59 org.apache.coyote.http11.Http11Protocol start
    信息: Starting Coyote HTTP/1.1 on http-8080
    2009-7-8 10:29:59 org.apache.jk.common.ChannelSocket init
    信息: JK: ajp13 listening on /0.0.0.0:8009
    2009-7-8 10:29:59 org.apache.jk.server.JkMain start
    信息: Jk running ID=0 time=0/79  config=null
    2009-7-8 10:29:59 org.apache.catalina.startup.Catalina start
    信息: Server startup in 38500 ms
    07-09 14:37:41 ERROR [http-8080-8] util.JDBCExceptionReporter - 使用 DBComms.receive 方法期间发生异常。操作:Connection reset。上下文:(2) [Thread[http-8080-8,5,main], IO:c4217, Dbc:71da3]。PktNum:0。TotalReceived:0。PktSize:4,096。
    07-09 14:37:41 ERROR [http-8080-8] util.JDBCExceptionReporter - 该连接已关闭。
    07-09 14:37:41 ERROR [http-8080-8] util.JDBCExceptionReporter - Already closed.
    07-09 14:37:42 ERROR [http-8080-8] util.JDBCExceptionReporter - Already closed.
    07-09 14:37:42 ERROR [http-8080-8] hibernate3.SessionFactoryUtils - Could not close Hibernate Session
    org.hibernate.exception.GenericJDBCException: Cannot close connection
    at org.hibernate.exception.SQLStateConverter.handledNonSpecificException(SQLStateConverter.java:82)
    at org.hibernate.exception.SQLStateConverter.convert(SQLStateConverter.java:70)
    at org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:43)
    at org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:29)
    at org.hibernate.jdbc.ConnectionManager.closeConnection(ConnectionManager.java:331)
    at org.hibernate.jdbc.ConnectionManager.cleanup(ConnectionManager.java:262)
    at org.hibernate.jdbc.ConnectionManager.close(ConnectionManager.java:194)
    at org.hibernate.impl.SessionImpl.close(SessionImpl.java:289)
    at org.springframework.orm.hibernate3.SessionFactoryUtils.doClose(SessionFactoryUtils.java:787)
    at org.springframework.orm.hibernate3.SessionFactoryUtils.closeSessionOrRegisterDeferredClose(SessionFactoryUtils.java:775)
    at org.springframework.orm.hibernate3.SessionFactoryUtils.access$100(SessionFactoryUtils.java:87)
    at org.springframework.orm.hibernate3.SessionFactoryUtils$SpringSessionSynchronization.afterCompletion(SessionFactoryUtils.java:966)
    at org.springframework.transaction.support.AbstractPlatformTransactionManager.invokeAfterCompletion(AbstractPlatformTransactionManager.java:729)
    at org.springframework.transaction.support.AbstractPlatformTransactionManager.triggerAfterCompletion(AbstractPlatformTransactionManager.java:701)
    at org.springframework.transaction.support.AbstractPlatformTransactionManager.processRollback(AbstractPlatformTransactionManager.java:612)
    at org.springframework.transaction.support.AbstractPlatformTransactionManager.rollback(AbstractPlatformTransactionManager.java:560)
    at org.springframework.transaction.interceptor.TransactionAspectSupport.doCloseTransactionAfterThrowing(TransactionAspectSupport.java:285)
    at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:100)
    at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:144)
    at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:174)
    at $Proxy21.findXxFlowbillByCaller(Unknown Source)
    at com.yz.customer.action.play.PlayerAction.listPlayer(PlayerAction.java:131)
    at sun.reflect.GeneratedMethodAccessor110.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    at java.lang.reflect.Method.invoke(Method.java:597)
    at org.springframework.web.servlet.mvc.multiaction.MultiActionController.invokeNamedMethod(MultiActionController.java:393)
    at org.springframework.web.servlet.mvc.multiaction.MultiActionController.handleRequestInternal(MultiActionController.java:331)
    at org.springframework.web.servlet.mvc.AbstractController.handleRequest(AbstractController.java:153)
    at org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter.handle(SimpleControllerHandlerAdapter.java:44)
    at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:723)
    at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:663)
    at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:394)
    at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:348)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:690)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
    at org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:654)
    at org.apache.catalina.core.ApplicationDispatcher.processRequest(ApplicationDispatcher.java:445)
    at org.apache.catalina.core.ApplicationDispatcher.doForward(ApplicationDispatcher.java:379)
    at org.apache.catalina.core.ApplicationDispatcher.forward(ApplicationDispatcher.java:292)
    at com.yz.customer.action.ClientAction.handleRequestInternal(ClientAction.java:46)
    at org.springframework.web.servlet.mvc.AbstractController.handleRequest(AbstractController.java:153)
    at org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter.handle(SimpleControllerHandlerAdapter.java:44)
    at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:723)
    at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:663)
    at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:394)
    at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:348)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:690)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
    at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:75)
    at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:77)
    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:230)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:104)
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:261)
    at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:844)
    at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:581)
    at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447)
    at java.lang.Thread.run(Thread.java:619)
    Caused by: java.sql.SQLException: Already closed.
    at org.apache.commons.dbcp.PoolableConnection.close(PoolableConnection.java:77)
    at org.apache.commons.dbcp.PoolingDataSource$PoolGuardConnectionWrapper.close(PoolingDataSource.java:180)
    at org.springframework.orm.hibernate3.LocalDataSourceConnectionProvider.closeConnection(LocalDataSourceConnectionProvider.java:95)
    at org.hibernate.jdbc.ConnectionManager.closeConnection(ConnectionManager.java:327)
    ... 61 more
      

  7.   

         保持你的session在整个流程中是一直开启着的!
     
      

  8.   

    怎么让session在程序中一直开着,一直开着那不是浪费资源吗?
    我的数据库配置如下:
    <!--message dataSource CustomerUUrmas  start -->
    <bean id="sqlserverDataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
    <property name="driverClassName" value="${jdbc.customerCallcenter.driver}"/>
    <property name="url" value="${jdbc.customerCallcenter.url}"/>
    <property name="username" value="${jdbc.customerCallcenter.username}"/>
    <property name="password" value="${jdbc.customerCallcenter.password}"/>
            <property name="maxActive" value="5"/>
    </bean> <bean id="sqlserverSpringSessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
    <property name="dataSource">
    <ref local="sqlserverDataSource"/>
    </property>
    <property name="mappingResources">
    <list>
    <value>com/yz/customer/pojo/XxFlowbill.hbm.xml</value>
    <value>com/yz/customer/pojo/XxAgentinfo.hbm.xml</value>
    <value>com/yz/customer/pojo/TRoleGroup.hbm.xml</value>
    </list>
    </property>
    <property name="hibernateProperties">
                <props>
                    <prop key="hibernate.dialect">${jdbc.customerCallcenter.dialect}</prop>
                    <prop key="hibernate.query.substitutions">true=1 false=0</prop>
                    <prop key="hibernate.show_sql">false</prop>
                </props>
            </property>
    </bean>
    <bean id="xxFlowbillDao"
    class="com.yz.customer.dao.impl.XxFlowbillDaoImpl">
    <property name="sessionFactory">
    <ref bean="sqlserverSpringSessionFactory" />
    </property>
    </bean>
      

  9.   

       自己写一个Filter类范围是整个WEB项目,创建一个线程池,把session保存在这个线程池里面,你程序不用了的话会自动关闭当前session的
      

  10.   

    连接池怎么配置呢?是不是在Tomcat里面配置连接池呢?我的程序跑在Liunx服务器上面,我的那个web程序连接的数据库不止一个,好像有三个,sqlserver2005,mysql,oracle这三个.不晓得怎么配置连接池
      

  11.   

    这不是个好办法,自己管session,那还要连接池和持久层干什么.楼主你的应用不会有什么地方一直使用session吧,长时间保持session而不关闭,底层连接池却已经把数据库连接关闭了,从而形成了这个问题.否则,使用时再获取数据连接\生成session不会有这样的问题.
      

  12.   

    我的这个web程序不是我一个人做的,刚好出现异常的功能又不是本人亲自做的,我现在就犯晕了.不晓得哪里session一直开着好痛苦。
      

  13.   

        代码贴出来
       package com.match.util;import java.io.IOException;import javax.servlet.Filter;
    import javax.servlet.FilterChain;
    import javax.servlet.FilterConfig;
    import javax.servlet.ServletException;
    import javax.servlet.ServletRequest;
    import javax.servlet.ServletResponse;import org.apache.log4j.Logger;
    import org.hibernate.Session;
    import org.hibernate.SessionFactory;
    import org.hibernate.cfg.Configuration;/**
     * 管理session
     * @author Administrator
     *
     */
    public class HibernateFilter implements Filter {

    private static SessionFactory factory = null;

    private static Logger log = Logger.getRootLogger();

    private static ThreadLocal hibernateHolder = new ThreadLocal();

    public void destroy() {

    } public void doFilter(ServletRequest request, ServletResponse response,
    FilterChain chain) throws IOException, ServletException {
    try {
    chain.doFilter(request, response);
    } finally {
    Session session = (Session)hibernateHolder.get();
    if (session != null) {
    if (session.isOpen()) {
    session.close();
    }
    hibernateHolder.remove();
    log.info("destory SessionFactory");
    }
    }
    } public void init(FilterConfig config) throws ServletException {
    try {
    Configuration cfg = new Configuration().configure();
    factory = cfg.buildSessionFactory();
    } catch (Exception e) {
    e.printStackTrace();
    throw new ServletException(e);
    }
    }

    public static Session getSession() {
    Session session = (Session)hibernateHolder.get();
    if (session == null) {
    session = factory.openSession();
    hibernateHolder.set(session);
    }
    return session;
    }}
      

  14.   

    这个参数是做什么用的,好像也有maxwait这个属性。
    不晓得能不能解决Session问题