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