今天我spring+hibernate+struts做了一个分页的程序,在spring中配置了数据源(用tomcat5.5配置的mysql数据源),当我打开分页页面的时候,,快速点了两三下下一页的时候数据都正确显示,,,如果中间停顿了下,再点下一页数据就出不来了,,,我猜想是数据源连接的持续时间少了,请各位高手指点!!!谢谢spring配置信息如下:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd"><beans> <bean id="DataSource"
   class="org.springframework.jndi.JndiObjectFactoryBean" >
   <property name="jndiName">
      <value>java:comp/env/mysqlJndi</value>
   </property>
   </bean> <bean id="sessionFactory"
class="org.springframework.orm.hibernate3.LocalSessionFactoryBean" >
<property name="dataSource">
<ref bean="DataSource" />
</property>
<property name="hibernateProperties">
<props>
<prop key="hibernate.dialect">
org.hibernate.dialect.MySQLDialect
</prop>
</props>
</property>
<property name="mappingResources">
<list>
<value>com/jzy/ssh/vo/Person.hbm.xml</value></list>
</property>
</bean>
<bean id="hibernateTemplate" class="org.springframework.orm.hibernate3.HibernateTemplate">
<property name="sessionFactory">
<ref bean="sessionFactory"/>
</property>
</bean>
<bean id="persondao" class="com.jzy.ssh.dao.PersonDAO" 
      abstract="true">
</bean>
<bean id="persondaoimpl" class="com.jzy.ssh.dao.PersonDAOImpl" 
  parent="persondao"  >
  <property name="hibernateTemplate">
   <ref bean="hibernateTemplate"/>
  </property>
</bean>
<bean name="/person" class="com.jzy.ssh.struts.action.PersonAction" >
<property name="personDao">
<ref bean="persondaoimpl"/>
</property>
</bean>
<bean name="/split" class="com.jzy.ssh.struts.action.SplitAction">
<property name="personDao">
<ref bean="persondaoimpl"/>
</property>
</bean>
</beans>tomcat数据源的配置信息如下:
server.xml:
<Resource
      name="mysqlJndi"
      type="javax.sql.DataSource"
      password="root"
      driverClassName="org.gjt.mm.mysql.Driver"
      maxIdle="30"
      maxWait="500000"
      username="root"
      url="jdbc:mysql://localhost:3306/mydata"
      maxActive="100"/>
  </GlobalNamingResources>
  <Service
      name="Catalina">
    <Connector
        port="8080"
        redirectPort="8443"
        minSpareThreads="25"
        connectionTimeout="200000"
        maxThreads="150"
        maxSpareThreads="75">
    </Connector>
    <Connector
        port="8009"
        redirectPort="8443"
        protocol="AJP/1.3">
    </Connector>
    <Engine
        defaultHost="localhost"
        name="Catalina">
      <Realm className="org.apache.catalina.realm.UserDatabaseRealm"/>
      <Host
          appBase="webapps"
          name="localhost">
      </Host>context配置如下:
<Resource
      name="mysqlJndi"
  auth="Container"
      type="javax.sql.DataSource"
      password="root"
      driverClassName="org.gjt.mm.mysql.Driver"   
      maxIdle="30"
      maxWait="500000"
      username="root"
      url="jdbc:mysql://localhost:3306/mydata"
      maxActive="100"/>web.xml配置如下:
<resource-ref> 
  <description>mysqlJndi</description> 
  <res-ref-name>mysqlJndi</res-ref-name> 
  <res-type>javax.sql.DataSource</res-type> 
  <res-auth>Container</res-auth> 
</resource-ref> eclipse中的异常信息:
信息: Server startup in 45906 ms
*******
queryByLike 执行
*******
queryByLike 执行
org.hibernate.exception.GenericJDBCException: could not execute query
at org.hibernate.exception.ErrorCodeConverter.handledNonSpecificException(ErrorCodeConverter.java:92)
at org.hibernate.exception.ErrorCodeConverter.convert(ErrorCodeConverter.java:80)
at org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:43)
at org.hibernate.loader.Loader.doList(Loader.java:1596)
at org.hibernate.loader.Loader.list(Loader.java:1577)
at org.hibernate.loader.hql.QueryLoader.list(QueryLoader.java:395)
at org.hibernate.hql.ast.QueryTranslatorImpl.list(QueryTranslatorImpl.java:271)
at org.hibernate.impl.SessionImpl.list(SessionImpl.java:844)
at org.hibernate.impl.QueryImpl.list(QueryImpl.java:74)
at com.jzy.ssh.dao.PersonDAOImpl.queryByLike(PersonDAOImpl.java:71)
at com.jzy.ssh.struts.action.SplitAction.selectlike(SplitAction.java:86)
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:585)
at org.apache.struts.actions.DispatchAction.dispatchMethod(DispatchAction.java:274)
at org.apache.struts.actions.DispatchAction.execute(DispatchAction.java:194)
at org.apache.struts.action.RequestProcessor.processActionPerform(RequestProcessor.java:419)
at org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:224)
at org.apache.struts.action.ActionServlet.process(ActionServlet.java:1194)
at org.apache.struts.action.ActionServlet.doGet(ActionServlet.java:414)
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:269)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:213)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:174)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:117)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:108)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:174)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:874)
at org.apache.coyote.http11.Http11BaseProtocol$Http11ConnectionHandler.processConnection(Http11BaseProtocol.java:665)
at org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpoint.java:528)
at org.apache.tomcat.util.net.LeaderFollowerWorkerThread.runIt(LeaderFollowerWorkerThread.java:81)
at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:689)
at java.lang.Thread.run(Thread.java:595)
Caused by: com.mysql.jdbc.exceptions.MySQLNonTransientConnectionException: No operations allowed after connection closed.
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:888)
at com.mysql.jdbc.Connection.checkClosed(Connection.java:1931)
at com.mysql.jdbc.Connection.prepareStatement(Connection.java:4705)
at com.mysql.jdbc.Connection.prepareStatement(Connection.java:4671)
at org.apache.tomcat.dbcp.dbcp.DelegatingConnection.prepareStatement(DelegatingConnection.java:248)
at org.apache.tomcat.dbcp.dbcp.PoolingDataSource$PoolGuardConnectionWrapper.prepareStatement(PoolingDataSource.java:302)
at org.hibernate.jdbc.AbstractBatcher.getPreparedStatement(AbstractBatcher.java:396)
at org.hibernate.jdbc.AbstractBatcher.getPreparedStatement(AbstractBatcher.java:334)
at org.hibernate.jdbc.AbstractBatcher.prepareQueryStatement(AbstractBatcher.java:88)
at org.hibernate.loader.Loader.prepareQueryStatement(Loader.java:1162)
at org.hibernate.loader.Loader.doQuery(Loader.java:390)
at org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:218)
at org.hibernate.loader.Loader.doList(Loader.java:1593)
... 33 more

解决方案 »

  1.   

    今天我spring+hibernate+struts做了一个分页的程序,在spring中配置了数据源(用tomcat5.5配置的mysql数据源),当我打开分页页面的时候,,快速点了两三下下一页的时候数据都正确显示,,,如果中间停顿了下,再点下一页数据就出不来了,,,我猜想是数据源连接的持续时间少了,请各位高手指点!!!谢谢 spring配置信息如下: 
    <?xml version="1.0" encoding="UTF-8"?> 
    <!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd"> <beans> <bean id="DataSource" 
      class="org.springframework.jndi.JndiObjectFactoryBean" > 
      <property name="jndiName"> 
        <value>java:comp/env/mysqlJndi </value> 
      </property> 
      </bean> 

    <bean id="sessionFactory" 
    class="org.springframework.orm.hibernate3.LocalSessionFactoryBean" > 
    <property name="dataSource"> 
    <ref bean="DataSource" /> 
    </property> 
    <property name="hibernateProperties"> 
    <props> 
    <prop key="hibernate.dialect"> 
    org.hibernate.dialect.MySQLDialect 
    </prop> 
    </props> 
    </property> 
    <property name="mappingResources"> 
    <list> 
    <value>com/jzy/ssh/vo/Person.hbm.xml </value> </list> 
    </property> 
    </bean> 
    <bean id="hibernateTemplate" class="org.springframework.orm.hibernate3.HibernateTemplate"> 
    <property name="sessionFactory"> 
    <ref bean="sessionFactory"/> 
    </property> 
    </bean> 
    <bean id="persondao" class="com.jzy.ssh.dao.PersonDAO" 
          abstract="true"> 
    </bean> 
    <bean id="persondaoimpl" class="com.jzy.ssh.dao.PersonDAOImpl" 
      parent="persondao"  > 
      <property name="hibernateTemplate"> 
      <ref bean="hibernateTemplate"/> 
      </property> 
    </bean> 
    <bean name="/person" class="com.jzy.ssh.struts.action.PersonAction" > 
    <property name="personDao"> 
    <ref bean="persondaoimpl"/> 
    </property> 
    </bean> 
    <bean name="/split" class="com.jzy.ssh.struts.action.SplitAction"> 
    <property name="personDao"> 
    <ref bean="persondaoimpl"/> 
    </property> 
    </bean> 
    </beans> tomcat数据源的配置信息如下: 
    server.xml: 
    <Resource 
          name="mysqlJndi" 
          type="javax.sql.DataSource" 
          password="root" 
          driverClassName="org.gjt.mm.mysql.Driver" 
          maxIdle="30" 
          maxWait="500000" 
          username="root" 
          url="jdbc:mysql://localhost:3306/mydata" 
          maxActive="100"/> 
      </GlobalNamingResources> 
      <Service 
          name="Catalina"> 
        <Connector 
            port="8080" 
            redirectPort="8443" 
            minSpareThreads="25" 
            connectionTimeout="200000" 
            maxThreads="150" 
            maxSpareThreads="75"> 
        </Connector> 
        <Connector 
            port="8009" 
            redirectPort="8443" 
            protocol="AJP/1.3"> 
        </Connector> 
        <Engine 
            defaultHost="localhost" 
            name="Catalina"> 
          <Realm className="org.apache.catalina.realm.UserDatabaseRealm"/> 
          <Host 
              appBase="webapps" 
              name="localhost"> 
          </Host> context配置如下: 
    <Resource 
          name="mysqlJndi" 
      auth="Container" 
          type="javax.sql.DataSource" 
          password="root" 
          driverClassName="org.gjt.mm.mysql.Driver"   
          maxIdle="30" 
          maxWait="500000" 
          username="root" 
          url="jdbc:mysql://localhost:3306/mydata" 
          maxActive="100"/> web.xml配置如下: 
    <resource-ref> 
      <description>mysqlJndi </description> 
      <res-ref-name>mysqlJndi </res-ref-name> 
      <res-type>javax.sql.DataSource </res-type> 
      <res-auth>Container </res-auth> 
    </resource-ref> eclipse中的异常信息: 
    信息: Server startup in 45906 ms 
    ******* 
    queryByLike 执行 
    ******* 
    queryByLike 执行 
    org.hibernate.exception.GenericJDBCException: could not execute query 
    at org.hibernate.exception.ErrorCodeConverter.handledNonSpecificException(ErrorCodeConverter.java:92) 
    at org.hibernate.exception.ErrorCodeConverter.convert(ErrorCodeConverter.java:80) 
    at org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:43) 
    at org.hibernate.loader.Loader.doList(Loader.java:1596) 
    at org.hibernate.loader.Loader.list(Loader.java:1577) 
    at org.hibernate.loader.hql.QueryLoader.list(QueryLoader.java:395) 
    at org.hibernate.hql.ast.QueryTranslatorImpl.list(QueryTranslatorImpl.java:271) 
    at org.hibernate.impl.SessionImpl.list(SessionImpl.java:844) 
    at org.hibernate.impl.QueryImpl.list(QueryImpl.java:74) 
    at com.jzy.ssh.dao.PersonDAOImpl.queryByLike(PersonDAOImpl.java:71) 
    at com.jzy.ssh.struts.action.SplitAction.selectlike(SplitAction.java:86) 
    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:585) 
    at org.apache.struts.actions.DispatchAction.dispatchMethod(DispatchAction.java:274) 
    at org.apache.struts.actions.DispatchAction.execute(DispatchAction.java:194) 
    at org.apache.struts.action.RequestProcessor.processActionPerform(RequestProcessor.java:419) 
    at org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:224) 
    at org.apache.struts.action.ActionServlet.process(ActionServlet.java:1194) 
    at org.apache.struts.action.ActionServlet.doGet(ActionServlet.java:414) 
    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:269) 
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188) 
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:213) 
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:174) 
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127) 
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:117) 
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:108) 
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:174) 
    at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:874) 
    at org.apache.coyote.http11.Http11BaseProtocol$Http11ConnectionHandler.processConnection(Http11BaseProtocol.java:665) 
    at org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpoint.java:528) 
    at org.apache.tomcat.util.net.LeaderFollowerWorkerThread.runIt(LeaderFollowerWorkerThread.java:81) 
    at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:689) 
    at java.lang.Thread.run(Thread.java:595) 
    Caused by: com.mysql.jdbc.exceptions.MySQLNonTransientConnectionException: No operations allowed after connection closed. 
    at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:888) 
    at com.mysql.jdbc.Connection.checkClosed(Connection.java:1931) 
    at com.mysql.jdbc.Connection.prepareStatement(Connection.java:4705) 
    at com.mysql.jdbc.Connection.prepareStatement(Connection.java:4671) 
    at org.apache.tomcat.dbcp.dbcp.DelegatingConnection.prepareStatement(DelegatingConnection.java:248) 
    at org.apache.tomcat.dbcp.dbcp.PoolingDataSource$PoolGuardConnectionWrapper.prepareStatement(PoolingDataSource.java:302) 
    at org.hibernate.jdbc.AbstractBatcher.getPreparedStatement(AbstractBatcher.java:396) 
    at org.hibernate.jdbc.AbstractBatcher.getPreparedStatement(AbstractBatcher.java:334) 
    at org.hibernate.jdbc.AbstractBatcher.prepareQueryStatement(AbstractBatcher.java:88) 
    at org.hibernate.loader.Loader.prepareQueryStatement(Loader.java:1162) 
    at org.hibernate.loader.Loader.doQuery(Loader.java:390) 
    at org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:218) 
    at org.hibernate.loader.Loader.doList(Loader.java:1593) 
    ... 33 more