我刚学没多长时间,按照网上的方法我配置了一个数据连接池。但是不知道对不对。
下面是源程序:
(测试程序我放在默认的ROOT文件夹里)
D:\jakarta-tomcat-5.0.28\conf、server.xml <host></host>       <Logger className="org.apache.catalina.logger.FileLogger"
                 directory="logs"  prefix="localhost_log." suffix=".txt"
            timestamp="true"/> 
  <Context path="" docBase="ROOT" 
        debug="5" reloadable="true" crossContext="true">         <Logger className="org.apache.catalina.logger.FileLogger" 
                 directory="logs"  prefix="localhost_log." suffix=".txt" 
            timestamp="true"/> 
             
        <Resource name="jdbc/connectDB" 
               auth="Container" 
               type="javax.sql.DataSource"/> 
    <ResourceParams name="jdbc/connectDB"> 
      <parameter> 
        <name>factory</name> 
        <value>org.apache.commons.dbcp.BasicDataSourceFactory</value> 
      </parameter> 
   
    <parameter> 
      <name>removeAbandoned</name> 
      <value>true</value> 
     </parameter> 
     <parameter> 
      <name>removeAbandonedTimeout</name> 
      <value>60</value> 
     </parameter> 
     <parameter> 
      <name>logAbandoned</name> 
      <value>false</value> 
     </parameter> 
         
      <parameter> 
        <name>maxActive</name> 
        <value>1000</value> 
      </parameter> 
      <parameter> 
        <name>maxIdle</name> 
        <value>30</value> 
      </parameter> 
      <parameter> 
        <name>maxWait</name> 
        <value>10000</value> 
      </parameter> 
      <parameter> 
       <name>username</name> 
       <value>sa</value> 
      </parameter> 
      <parameter> 
       <name>password</name> 
       <value>tytymnty110110</value> 
      </parameter> 
      <parameter> 
         <name>driverClassName</name> 
         <value>net.sourceforge.jtds.jdbc.Driver</value> 
      </parameter> 
      <parameter> 
        <name>url</name> 
        <value>jdbc:jtds:sqlserver://127.0.0.1:1433/airin_b2b;charset=gb2312</value> 
      </parameter> 
    </ResourceParams> 
  </Context>
在:D:\jakarta-tomcat-5.0.28\webapps\ROOT\WEB-INF\web.xml<?xml version="1.0" encoding="ISO-8859-1"?> 
<web-app> 
  <display-name>tiannet web</display-name> 
    <description>connectDB test</description> 
    <resource-ref> 
      <description>DB Connection</description> 
      <res-ref-name>jdbc/connectDB</res-ref-name> 
      <res-type>javax.sql.DataSource</res-type> 
      <res-auth>Container</res-auth> 
    </resource-ref> 
  <welcome-file-list> 
    <welcome-file>index.jsp</welcome-file> 
  </welcome-file-list>   
</web-app> 测试程序:
<%@ page contentType="text/html;charset=gb2312"%> 
<%@ page import="java.sql.*"%> 
<%@ page import="javax.sql.*"%> 
<%@ page import="javax.naming.*"%> <html> 
<body> 
<% 
    DataSource ds = null; 
    Connection conn = null; 
    ResultSet rs = null; 
    Statement stmt = null; 
    InitialContext ctx = null; 
    String    m_strDriver = "net.sourceforge.jtds.jdbc.Driver",        // 驱动字符串 
               m_strConURL = "jdbc:jtds:sqlserver";                       // 连接字符串 
   try 
   { 
           ctx=new InitialContext(); 
           ds=(DataSource)ctx.lookup("java:comp/env/jdbc/connectDB");    //注意connectDB的名称和上面一致 
           conn = ds.getConnection(); 
           stmt = conn.createStatement();            String strSql = " select * from 用户表";                        //test为数据库中的一个表     
          rs = stmt.executeQuery(strSql); 
           while(rs.next()) 
           { 
              out.println(rs.getString(1) + "");                  
              out.println(rs.getString(2) + "");          }  rs.close(); 
           stmt.close(); 
           conn.close(); 
           ctx.close(); 
   } 
   catch(Exception ex) 
   { 
        out.println(ex.getMessage()); 
   } 
  // finally 
  // {   // } 
%>
</body> 
</html> 
Tomcat启动时提示:AbandonedObjectPool is used (org.apache.commons.dbcp.AbandonedObjectPool@2b249)
LogAbandoned: tree
RemoveAbandonedTimeout:60

解决方案 »

  1.   

    给你一个例子,照着看吧(tomcat5.0后的版本不用在web。xml中不用声明对使用数据源的引用):      <Host name="localhost" debug="0" appBase="webapps" unpackWARs="true" autoDeploy="true" xmlValidation="false" xmlNamespaceAware="false">
    <!-- 配置项目的Context 信息-->
    <Context path="/desconn" reloadable="true" docBase="D:TestConnDes\WebRoot" workDir="D:\TestConnDes\WebRoot\WEB-INF\Work">
    <!-- 配置数据源-->
      <Resource auth="Container" description="XCPM Oracle Connection" name="jdbc/desconn" type="javax.sql.DataSource"/>
      <ResourceParams name="jdbc/desconn">
        <parameter>
          <name>factory</name>
          <value>org.apache.commons.dbcp.BasicDataSourceFactory</value>
        </parameter>
        <parameter>
          <name>maxActive</name>
          <value>50</value>
        </parameter>
        <parameter>
          <name>maxWait</name>
          <value>1000</value>
        </parameter>
        <parameter>
          <name>username</name>
          <value>sa</value><!-- 数据库用户名-->
        </parameter>     
        <parameter>
          <name>password</name>
          <value>123456</value><!-- 数据库密码-->
        </parameter>
        <parameter>
          <name>url</name>
    <value>jdbc:microsoft:sqlserver://192.168.0.0:1433;DatabaseName=testDB</value><!-- 数据库URL-->     </parameter>
        <parameter>
          <name>driverClassName</name>
          <value>com.microsoft.jdbc.sqlserver.SQLServerDriver</value><!-- 数据库驱动-->     </parameter>
        <parameter>
          <name>maxIdle</name>
          <value>30</value>
        </parameter>
      </ResourceParams>
    </Context>
          </Host>
    页面中使用数据源:<%@ page language="java" pageEncoding="UTF-8"%>
    <%@ page import="java.util.*" %>
    <%@ page import="java.sql.*" %>
    <%@ page import="javax.sql.*" %>
    <%@ page import="javax.naming.*" %><%
    String path = request.getContextPath();
    String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
    %><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
    <html>
      <head>
        <base href="<%=basePath%>">
        
        <title>My JSP 'TestDesConn.jsp' starting page</title>
        
        <meta http-equiv="pragma" content="no-cache">
        <meta http-equiv="cache-control" content="no-cache">
        <meta http-equiv="expires" content="0">
        <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
        <meta http-equiv="description" content="This is my page">
        
        <!--
        <link rel="stylesheet" type="text/css" href="styles.css">
        -->
      </head>
      <body>
        测试tomcat数据源加密程序 <br>
      <%
      int i = 0 ;
      try{
         Context ctx = null;
         DataSource ds = null;
         Connection conn = null;
         Statement stmt = null;
         ResultSet rs = null;
         
         String jndi_ds ="java:comp/env/jdbc/desconn" ;
         
         ctx = new InitialContext();
         ds = ( DataSource ) ctx.lookup(jndi_ds);
         conn = ds.getConnection();
         stmt = conn.createStatement();
         rs = stmt.executeQuery("select * from orders");
         
         while (rs.next()) {
            i++;
         }
     }catch (Exception e) {
       e.printStackTrace();
     }
         System.out.println("数据库中一共有 " + i + " 条订单记录。");
      %>
      </body>  
    </html>
      

  2.   

    谢谢!我的问题是:我的那个程序最后 执行了 conn.close(); ctx.close();   
    如果我再实例化一个conn; 是在连接池里获取一个数据库链接吗?