I'm very new to Tomcat, connection pooling, JSP, etc. and I've been banging my head against a wall for two weeks trying to get a simple program to connect to a MySQL database.

*Vital Stats:*
Ubuntu 9.10, Java 1.6.0_0, Java Servelet 2.5, Java Server Pages 2.1, JSTL 1.2, Apache2, Tomcat 6.0.20, MySQL 5.1.41 & 5.0.67
MySQL Connector/J 5.1.11 (also 5.1.10) - in $CATALINA_HOME/lib
dbcp 1.2.1 - in $CATALINA_HOME/lib
(all standard Ubuntu issue)

*testapp/WEB-INF/web.xml:*
<?xml version="1.0" encoding="ISO-8859-1"?>
<web-app xmlns="http://java.sun.com/xml/ns/javaee";
   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance";
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd";
   version="2.5">

<description>
      Servlet and JSP Examples.
</description>
<display-name>Servlet and JSP Examples</display-name>

<resource-ref>
<description>DB Connection</description>
<res-ref-name>jdbc/mydatabase</res-ref-name>
<res-type>javax.sql.DataSource</res-type>
<res-auth>Container</res-auth>
</resource-ref>
</web-app>

*testapp/META-INF/context.xml:*
<?xml version="1.0" encoding="UTF-8"?>

<Context path="/junk" docBase="junk"
        debug="5" reloadable="true" crossContext="true">

<Resource name="jdbc/mydatabase" auth="Container" type="javax.sql.DataSource"
               maxActive="100" maxIdle="30" maxWait="10000"
username="foo" password="bar" driverClassName="com.mysql.jdbc.Driver"
               url="jdbc:mysql://test.hostname.com:3306/database_test1"/>
</Context>

*testapp/testapp.jsp:*
<%@ page contentType="text/html" %>
<%-- These libraries are required for the <c> and <sql> tags --%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"; %>
<%@ taglib prefix="sql" uri="http://java.sun.com/jsp/jstl/sql"; %>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<html>
<head>
<title>JNDI DBCP Test Page</title>
</head>
<body>

<h1>JNDI DBCP Test Page</h1>
<br/>Executing the query ...
<br/>

<%-- Note: Enter a query that is valid for your database here --%>
<sql:query var="result" dataSource="jdbc/mydatabase">
        SELECT company FROM manuals
</sql:query>
</body>
</html>

I create the WAR (jar cvf testapp.war *), undeploy the old version and redeploy the new one through Tomcat Web Application Manager. Then restart Tomcat (sudo /etc/init.d/tomcat restart). The result is:

Jan 21, 2010 9:40:35 PM org.apache.catalina.core.ApplicationContext log
INFO: ContextListener: contextInitialized()
Jan 21, 2010 9:40:35 PM org.apache.catalina.core.ApplicationContext log
INFO: SessionListener: contextInitialized()
Jan 21, 2010 9:43:06 PM org.apache.catalina.core.StandardWrapperValve invoke
SEVERE: Servlet.service() for servlet jsp threw exception
javax.servlet.jsp.JspException: Unable to get connection, DataSource invalid: "org.apache.commons.dbcp.SQLNestedException: Cannot create PoolableConnectionFactory (Communications link failure

The last packet sent successfully to the server was 0 milliseconds ago. The driver has not received any packets from the server.)" at org.apache.taglibs.standard.tag.common.sql.QueryTagSupport.getConnection(Unknown Source) at org.apache.taglibs.standard.tag.common.sql.QueryTagSupport.doStartTag(Unknown Source) at org.apache.jsp.test_jsp._jspx_meth_sql_005fquery_005f0(test_jsp.java:188)
        at org.apache.jsp.test_jsp._jspService(test_jsp.java:138)
at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
Blah, Blah, Blah....

*More info: *The connection to MySQL tested successfully using the command line 'mysql'. There are no firewalls, that I can find, between the servers.

What is going on here? What am I missing? What is going on here? How do I fix it?

-Do I need to create a "foo" user in the tomcat-users.xml?
-Do I have to mess with the policy files? or security?

Thanks for your help.
Mark


Reply via email to