小弟配置tomcat6 基于JNDI的JDBC数据池时用以下配置运行项目出现如下错误。注:刷新一遍会正确
<Resource name="jdbc/mldn" 
                  auth="Container"
                  type="javax.sql.DataSource" 
                  driverClassName="org.gjt.mm.mysql.Driver" 
                  url="jdbc:mysql://localhost:3307/mldn" 
                  username="root"           
                  password="root"
                  maxActive="100" 
                  maxIdle="30"              
                  maxWait="10000" 
            />2008-11-24 15:13:57,031 WARN [org.hibernate.util.JDBCExceptionReporter] - SQL Error: 0, SQLState: 08003
2008-11-24 15:13:57,031 ERROR [org.hibernate.util.JDBCExceptionReporter] - No operations allowed after connection closed.
2008-11-24 15:13:57,046 WARN [org.hibernate.util.JDBCExceptionReporter] - SQL Error: 0, SQLState: 08003
2008-11-24 15:13:57,046 ERROR [org.hibernate.util.JDBCExceptionReporter] - No operations allowed after connection closed.
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 org.lxh.myzngt.dao.impl.IUserDAOImpl.login(IUserDAOImpl.java:49)
at org.lxh.myzngt.struts.action.UserAction.login(UserAction.java:145)
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)
(ApplicationFilterChain.java:290)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.springframework.orm.hibernate3.support.OpenSessionInViewFilter.doFilterInternal(OpenSessionInViewFilter.java:174)
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.lxh.myzngt.filter.EncodingFilter.doFilter(EncodingFilter.java:22)
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:233)
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:102)
(Http11Protocol.java:583)
at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447)
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.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:218)
at org.hibernate.loader.Loader.doList(Loader.java:1593)
... 38 more于是小弟又用以下配置
<Resource name="jdbc/mldn" 
                  auth="Container"
                  type="javax.sql.DataSource" 
                  driverClassName="org.gjt.mm.mysql.Driver" 
                  url="jdbc:mysql://localhost:3307/mldn" 
                  username="root"           
                  password="root"
                  maxActive="100" 
                  maxIdle="30"              
                  maxWait="10000" 
                  factory="org.apache.commons.dbcp.BasicDataSourceFactory"            
                  
                 />
显示的指明dbcp的工厂实现类。结果运行正常但是tomcat运行时报以下错误,注:jdbc的jar包已经拷贝入项目
警告: Failed to register in JMX: javax.naming.NamingException: Could not load resource factory class [Root exception is java.lang.ClassNotFoundException: org.apache.commons.dbcp.BasicDataSourceFactory]
2008-11-24 15:22:35 org.apache.catalina.mbeans.GlobalResourcesLifecycleListener createMBeans
严重: Exception processing Global JNDI Resources
javax.naming.NamingException: Could not load resource factory class [Root exception is java.lang.ClassNotFoundException: org.apache.commons.dbcp.BasicDataSourceFactory]
at org.apache.naming.factory.ResourceFactory.getObjectInstance(ResourceFactory.java:81)
at javax.naming.spi.NamingManager.getObjectInstance(NamingManager.java:304)
at org.apache.naming.NamingContext.lookup(NamingContext.java:793)
at org.apache.naming.NamingContext.lookup(NamingContext.java:140)
at org.apache.naming.NamingContextBindingsEnumeration.nextElementInternal(NamingContextBindingsEnumeration.java:113)
at org.apache.naming.NamingContextBindingsEnumeration.next(NamingContextBindingsEnumeration.java:71)
at org.apache.catalina.mbeans.GlobalResourcesLifecycleListener.createMBeans(GlobalResourcesLifecycleListener.java:137)
at org.apache.catalina.mbeans.GlobalResourcesLifecycleListener.createMBeans(GlobalResourcesLifecycleListener.java:144)
at org.apache.catalina.mbeans.GlobalResourcesLifecycleListener.createMBeans(GlobalResourcesLifecycleListener.java:109)
at org.apache.catalina.mbeans.GlobalResourcesLifecycleListener.lifecycleEvent(GlobalResourcesLifecycleListener.java:81)
at org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupport.java:117)
at org.apache.catalina.core.StandardServer.start(StandardServer.java:703)
at org.apache.catalina.startup.Catalina.start(Catalina.java:578)
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.catalina.startup.Bootstrap.start(Bootstrap.java:288)
at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:413)
Caused by: java.lang.ClassNotFoundException: org.apache.commons.dbcp.BasicDataSourceFactory
at java.net.URLClassLoader$1.run(URLClassLoader.java:200)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:188)
at java.lang.ClassLoader.loadClass(ClassLoader.java:306)
at java.lang.ClassLoader.loadClass(ClassLoader.java:251)
at org.apache.naming.factory.ResourceFactory.getObjectInstance(ResourceFactory.java:79)
... 18 more
请大家帮忙看看 谢谢!

解决方案 »

  1.   

    先给你一个简单的例子看看啊轻松了解Tomcat6.0连接池配置
    1. 在Tomcat6.0的安装目录下,找到conf/ context.xml,打开context.xml进行修改:
    在<context> </context>中加入<Resource ……… 如:
    <Context>
    <Resource name="jdbc/test"   
       auth="Container"   
       type="javax.sql.DataSource"   
       driverClassName="com.microsoft.jdbc.sqlserver.SQLServerDriver"   
       url="jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=pubs"   
       username="sa" //数据库访问用户名
       password="" //数据库密码
       maxActive="10"    //连接池的最大数据库连接数。设为0表示无限制。
    maxIdle="3"    //maxIdle,最大空闲数,数据库连接的最大空闲时间。超过空闲时间,数据库连接将被标记为不可用,然后被释放。设为0表示无限制。
       maxWait="10000" />   //maxWait最大建立连接等待时间。如果超过此时间将接到异常。
         //设为-1表示无限制。
    </Context>2 在项目的WEB-INF/web.xml,中修改web.xml:
    在<web-app></wep-app>中加入
      <resource-ref>
    <description>描述(可不要)</description>
         <res-ref-name>test</res-ref-name>
         <res-type>javax.sql.DataSource</res-type>
         <res-auth>Container</res-auth>
      </resource-ref>3.在Tomcat6.0的安装目录下的lib文件夹放入相关的驱动包
    如:
    Sql server2000数据库:msbase.jar、msutil.jar、mssqlserver.jar
    Oracle 数据库:classes12.jar4.JSP测试代码 index.jsp
    <%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
    <%@ page import="java.sql.*"%>
    <%@ page import="javax.sql.*"%>
    <%@ page import="javax.naming.*"%>
    <%
    try {
    //实例上下文
    Context initCtx = new InitialContext();
    Context envCtx = (Context) initCtx.lookup("java:comp/env");
    DataSource ds = (DataSource) envCtx.lookup("jdbc/test");//通过名字得到数据源
    Connection conn = ds.getConnection(); ResultSet rs = conn.createStatement().executeQuery(
    "select * from jobs"); while (rs.next()) {
    out.print(rs.getString(1)+"&nbsp;&nbsp;");
    out.print(rs.getString(2)+"&nbsp;&nbsp;");
    out.print(rs.getString(3)+"&nbsp;&nbsp;");
    out.println(rs.getString(4));
    out.println("<hr/>");
    } conn.close();
    } catch (Exception e) {
    e.printStackTrace();
    }
    %> 5. OK 成功配置(Demo: tomcat_Conn_pool.rar)
      

  2.   

    我上面给的例子 是一个 成功的例子 你可以照着试试我现在给你看看你的第2个问题
    Root exception is java.lang.ClassNotFoundException:org.apache.commons.dbcp.BasicDataSourceFactory
    异常的意思是  无法发现类文件 org.apache.commons.dbcp.BasicDataSourceFactory 这个类楼主看看你的项目里有没有加入 commons-dbcp.jar  这个包  没有加入  加入即可
    最好将这个包放在 tomcat 安装目录下的lib 文件夹 下Apache Software Foundation\Tomcat 6.0\lib\
      

  3.   

    谢谢指导,可是首先我的第一种方法是可以连接数据库,只是个人觉得很不稳定而已,所以应该不是配置连接问题,而第二种出现的问题,我已经将commons-dbcp.jar 这个包加入到项目中了…………
      

  4.   

    而第二种出现的问题,我已经将commons-dbcp.jar 这个包加入到项目中了
    解答:  这个commons-dbcp.jar  你放在Apache Software Foundation\Tomcat 6.0\lib\      也就是 tomcat的安装目录下一个叫lib的文件夹下 
      

  5.   

    按yzsunlight的测试发现,好像Web.xml不需要加那些配置就OK,加了反而出错?
      

  6.   

    根据我之前出现的类似问题有两种可能:
    1.缺少相关的jar包。查看一下少什么包 拷贝到tomcat下的lib下。
    2.可能password需要密文处理。