You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@tomcat.apache.org by Phillip Qin <Ph...@shareowner.com> on 2003/10/17 18:02:05 UTC

RE: Abandoned Connections Not Working - Tomcat 4.1.24 - Oracle 8i

Try dbcp and pool rc1.

-----Original Message-----
From: Jonathan Reynolds [mailto:jonren33@hotmail.com] 
Sent: October 17, 2003 11:23 AM
To: tomcat-user@jakarta.apache.org
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