Java Mailing List Archive

http://www.junlu.com/

Home » Home (12/2007) » Tomcat Users »

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

Phillip Qin

2003-10-17


Try dbcp and pool rc1.

-----Original Message-----
From: Jonathan Reynolds [mailto:jonren33@(protected)]
Sent: October 17, 2003 11:23 AM
To: tomcat-user@(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:@(protected)>
   </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

©2008 junlu.com - Jax Systems, LLC, U.S.A.