DataSource pool error on getConnection()
843859Oct 27 2005 — edited Oct 28 2005Hello fine people:
I have recently upgraded to tomcat 5 and setup connection pooling following the documentation
at this all too familiar address:
http://tomcat.apache.org/tomcat-5.0-doc/jndi-datasource-examples-howto.html
Below is my server.xml, web.xml, and a servlet for querying the database. When I run the program
I get an error on this line:
Connection ocon = getConnection("java:comp/env/jdbc/CraigsList");
The error message found in the Tomcat logs is shown at the bottom of this reply.
Can you suggest how I might resolve this error? Any help is greatly appreciated.
Thank you,
Logan
My server.xml reads as follows:
**********************************************
<Server port="8005" shutdown="SHUTDOWN">
<GlobalNamingResources>
<!-- Used by Manager webapp -->
<Resource name="UserDatabase" auth="Container"
type="org.apache.catalina.UserDatabase"
description="User database that can be updated and saved">
</Resource>
<ResourceParams name="UserDatabase">
<parameter>
<name>factory</name>
<value>org.apache.catalina.users.MemoryUserDatabaseFactory</value>
</parameter>
<parameter>
<name>pathname</name>
<value>conf/tomcat-users.xml</value>
</parameter>
</ResourceParams>
</GlobalNamingResources>
<Service name="Catalina">
<Connector port="8080" />
<!-- This is here for compatibility only, not required -->
<Connector port="8009" protocol="AJP/1.3" />
<Engine name="Catalina" defaultHost="localhost">
<Logger className="org.apache.catalina.logger.FileLogger" />
<Realm className="org.apache.catalina.realm.UserDatabaseRealm"
resourceName="UserDatabase" />
<Host name="localhost" appBase="webapps" />
<Host name="192.168.1.103" debug="0" appBase="d:/WebSites/CraigsList">
<Logger className="org.apache.catalina.logger.FileLogger"
directory="logs" prefix="site1_log." suffix=".txt" timestamp="true"/>
<Context path="" docBase="" debug="0">
<Resource name="jdbc/CraigsList" auth="Container" type="javax.sql.DataSource"/>
<ResourceParams name="jdbc/CraigsList">
<parameter>
<name>factory</name>
<value>org.apache.commons.dbcp.BasicDataSourceFactory</value>
</parameter>
<parameter>
<name>driverClassName</name>
<value>oracle.jdbc.driver.OracleDriver</value>
</parameter>
<parameter>
<name>url</name>
<value>jdbc:oracle:thin:CraigsList@192.168.1.103:1521:DBZ</value>
</parameter>
<parameter>
<name>username</name>
<value>Craig</value>
</parameter>
<parameter>
<name>password</name>
<value>*********</value>
</parameter>
<parameter>
<name>maxActive</name>
<value>20</value>
</parameter>
<parameter>
<name>maxIdle</name>
<value>10</value>
</parameter>
<parameter>
<name>maxWait</name>
<value>-1</value>
</parameter>
</ResourceParams>
</Context>
</Host>
</Engine>
</Service>
</Server>
**********************************************
I have made no changes to the default web.xml found in tomcat50/conf folder.
My application's web.xml reads as follows:
***********************************************
<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE web-app
PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
"http://java.sun.com/dtd/web-app_2_3.dtd">
<web-app>
<resource-ref>
<description>Oracle Datasource</description>
<res-ref-name>jdbc/CraigsList</res-ref-name>
<res-type>javax.sql.DataSource</res-type>
<res-auth>Container</res-auth>
</resource-ref>
<session-config>
<session-timeout>3600</session-timeout>
</session-config>
<welcome-file-list>
<welcome-file>/index.html</welcome-file>
</welcome-file-list>
<servlet>
<servlet-name>CraigsMain</servlet-name>
<servlet-class>CraigsClasses.CraigsMain</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>CraigsMain</servlet-name>
<url-pattern>/servlet/CraigsClasses.CraigsMain</url-pattern>
</servlet-mapping>
</web-app>
*************************************
Here is the servlet:
***************************************
package CraigsClasses;
import javax.servlet.*;
import javax.servlet.jsp.*;
import java.net.*;
import java.util.*;
import java.io.*;
import javax.servlet.http.*;
import java.sql.*;
import java.util.Date;
import java.text.*;
import javax.naming.*;
import javax.sql.DataSource;
public class CraigsMain extends HttpServlet {
public void init(ServletConfig config) throws ServletException {
super.init(config);
}
private Connection getConnection(String lookup) throws NamingException, SQLException {
Context context = new InitialContext();
DataSource ds = (DataSource)context.lookup(lookup);
Connection ocon = ds.getConnection();
context.close();
return ocon;
} // private Connection getConnection(String lookup) throws NamingException, SQLException {
// Process the http Get request
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
try {
response.setContentType("text/html");
PrintWriter out = response.getWriter();
String sql = "select formtitle from checkboxforms where cbformid = 157";
// error occurs at this line
Connection ocon = getConnection("java:comp/env/jdbc/CraigsList");
PreparedStatement pStmt = ocon.prepareStatement(sql);
ResultSet rs1 = pStmt.executeQuery();
rs1.next();
out.println("<br>" + rs1.getString(1));
rs1.close();
pStmt.close();
ocon.close();
} catch(SQLException sqle) {
System.err.println("sql exception error: " + sqle);
} catch(NamingException ne) {
System.err.println("naming exception error: " + ne);
}
}
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doGet(request, response);
}
}
**************************************
End of servlet.
Thank you again.