Try dbcp and pool rc1.

-----Original Message-----
From: Jonathan Reynolds [mailto:[EMAIL PROTECTED] 
Sent: October 17, 2003 11:23 AM
To: [EMAIL PROTECTED]
Cc: Jonathan M Reynolds
Subject: Abandoned Connections Not Working - Tomcat 4.1.24 - Oracle 8i

I am using Tomcat 4.1.24 on a Windows 2000 machine.  I have successfully set
up DBCP to provide a connection to my Oracle 8i database.  I am now trying
to test the removal of abandoned connections and it's not working according
to the Data Source HOW TO guide.  Can someone please help? 

Here are my important files:

server.xml
-----------------

<Context className="org.apache.catalina.core.StandardContext"
crossContext="false" reloadable="true"
mapperClass="org.apache.catalina.core.StandardContextMapper"
useNaming="true" debug="0" swallowOutput="false" privileged="false"
displayName="Servlet Web App"
wrapperClass="org.apache.catalina.core.StandardWrapper" docBase="D:\Program
Files\Apache Group\Tomcat 4.1\webapps\servlets" cookies="true"
path="/servlets" cachingAllowed="true"
charsetMapperClass="org.apache.catalina.util.CharsetMapper">
   <Resource name="jdbc/SMSOraclePool" scope="Shareable"
type="javax.sql.DataSource" auth="Container" description="SMS Oracle Pool"/>
   <ResourceParams name="jdbc/SMSOraclePool">
      <parameter>
         <name>factory</name>
         <value>org.apache.commons.dbcp.BasicDataSourceFactory</value>
      </parameter>
      <parameter>
         <name>url</name>
         <value>jdbc:oracle:thin:@localhost:1521:pearson</value>
      </parameter>
      <parameter>
         <name>password</name>
         <value>xxx</value>
      </parameter>
      <parameter>
         <name>maxActive</name>
         <value>2</value>
      </parameter>
      <parameter>
         <name>maxWait</name>
         <value>-1</value>
      </parameter>
      <parameter>
         <name>driverClassName</name>
         <value>oracle.jdbc.driver.OracleDriver</value>
      </parameter>
      <parameter>
         <name>username</name>
         <value>xxx</value>
      </parameter>
      <parameter>
         <name>maxIdle</name>
         <value>1</value>
      </parameter>
      <parameter>
         <name>removeAbandoned</name>
         <value>true</value>
      </parameter>
      <parameter>
         <name>removeAbandonedTimeout</name>
         <value>5</value>
      </parameter>
      <parameter>
         <name>logAbandoned</name>
         <value>true</value>
      </parameter>
   </ResourceParams>
</Context> 

 web.xml
---------------

  <resource-ref>
      <description>SMS Oracle Connection</description>
      <res-ref-name>jdbc/SMSOraclePool</res-ref-name>
      <res-type>javax.sql.DataSource</res-type>
      <res-auth>Container</res-auth>
  </resource-ref>

Code Example
---------------------

import javax.servlet.http.HttpServlet;
import javax.servlet.ServletException;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletConfig;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.sql.Connection;
import javax.sql.DataSource;
import java.sql.*;
import javax.naming.InitialContext;
import javax.naming.Context;

public class PoolTest extends HttpServlet
{
  /**
   *See doGet()
   **/
  public void doPost(HttpServletRequest req, HttpServletResponse res)
  throws ServletException, IOException
  {
    doGet(req,res);
  }


  /**
   *  Determine which version response is desired, and forward to
appropriate Authentication
   *  servlet.  If no version is sent, assume that an Authentication 1.0
response is desired.
   **/
  public void doGet (HttpServletRequest req, HttpServletResponse res)
  throws ServletException, IOException
  {

    try
    {
        /* Context initContext = new InitialContext();
        Context envContext  = (Context)initContext.lookup("java:/comp/env");
        DataSource ds = (DataSource)envContext.lookup("jdbc/SMSOraclePool");
        */
        
        //Obtain our environment naming context
        Context initCtx = new InitialContext();

        DataSource ds =
(DataSource)initCtx.lookup("java:comp/env/jdbc/SMSOraclePool");

        Connection conn1 = ds.getConnection();
        System.out.println("Pool Test Servlets: Connection 1 received");
        Connection conn2 = ds.getConnection();
        System.out.println("Pool Test Servlets: Connection 2 received");
        Connection conn3 = ds.getConnection();
        System.out.println("Pool Test Servlets: Connection 3 received");

    }
    catch(Exception ex)
    {
      ex.printStackTrace(System.out);
    }
  }
}



When I run the code above, I see the following printouts:

Pool Test Servlets: Connection 1 received
Pool Test Servlets: Connection 2 received



I don't see the third printout, which is what I excpect.  However, after 5
seconds, the connections are not returned to the pool and see NO stackTrace
to the logs or to the console.  Any help would be most appreciated.  Thanks.

Jonathan 

Reply via email to