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