The difference is I'm doing a fully qualified JNDI
path lookup for the DataSource from the root context
and you're doing it relative to a sub context.  I
don't beleive this is causing the problem as I am
getting a DataSource object (evident from the
stacktrace).

--- Phillip Qin <[EMAIL PROTECTED]> wrote:
> Mine is slightly different from yours.
> 
> Context initContext = new InitialContext();
> Context jdbcContext = (Context)
> initContext.lookup(_initContextName);
> DataSource dataSource =
>                       (DataSource)
> jdbcContext.lookup(_jdbcContextName);
> 
> -----Original Message-----
> From: Jon Wilmoth [mailto:[EMAIL PROTECTED] 
> Sent: October 13, 2003 12:17 AM
> To: Jakarta Commons Users List
> Subject: Re: [dbcp] Connection pooling error w/MySQL
> 
> Sorry about the delay.  Here's everything you've
> asked
> for:
> 
> There is a servlet that is loaded at application
> startup that performs a db connection test.  Calls
> to
> getConnection() on the DataSource after the webapp
> has
> been deployed also fail with the same error.  Since
> Tomcat doesn't support external jvm access to the
> JNDI
> implementation, I'm including the code for a struts
> action used to test datasource health.
> 
> HARDWARE - Compaq n600
> OS - Windows XP Professional SP1
> JAVA - HotSpot(TM) Server VM (build 1.4.2_01-b06,
> mixed mode)
> NUMBER_OF_PROCESSORS=1
> PROCESSOR_IDENTIFIER=x86 Family 6 Model 11 Stepping
> 1,
> GenuineIntel
> NETWORK - N/A.  Both tomcat & mysql server are on
> same
> machine in development env.
> MYSQL - 4.0.15-NT using InnoDB
> JDBC DRIVER - mysql-connector-java-3.0.8-stable
> 
> <Resource name="jdbc/ChronosPool" auth="Container"
> type="javax.sql.DataSource"/>
> 
> <ResourceParams name="jdbc/ChronosPool">
>   <parameter>
>     <name>factory</name>
>    
>
<value>org.apache.commons.dbcp.BasicDataSourceFactory</value>
>   </parameter>
>   <parameter>
>       <name>username</name>
>       <value>mydbuser</value>
>   </parameter>
>   <parameter>
>       <name>password</name>
>       <value>mydbuserpassword</value>
>   </parameter>
>   <parameter>
>       <name>driverClassName</name>
>       <value>com.mysql.jdbc.Driver</value>
>   </parameter>
>   <parameter>
>       <name>url</name>
>       <value>jdbc:mysql://localhost:3306/testDB</value>
>   </parameter>
>   <parameter>
>       <name>removeAbandoned</name>
>       <value>true</value>
>   </parameter>
>   <parameter>
>       <name>removeAbandonedTimeout</name>     
> <value>300</value>
>   </parameter>
>   <parameter>
>       <name>logAbandoned</name>
>       <value>true</value>
>   </parameter>
>   <parameter>
>       <name>maxActive</name>
>       <value>15</value>
>   </parameter>
>   <parameter>
>       <name>maxIdle</name>
>       <value>3</value>
>   </parameter>
>   <parameter>
>       <name>maxWait</name>
>       <value>-1</value>
>   </parameter>
>   <parameter>
>       <name>validationQuery</name>
>       <value>select sysdate from dual</value>
>   </parameter>
>   <parameter>
>       <name>defaultAutoCommit</name>
>       <value>false</value>
>   </parameter>
> </ResourceParams>
> 
> 
> Test Case Files:
> ========================
> struts-config.xml
> ========================
> <?xml version="1.0" encoding="UTF-8"?>
> <!DOCTYPE struts-config PUBLIC "-//Apache Software
> Foundation//DTD Struts Configuration 1.1//EN"
>
"http://jakarta.apache.org/struts/dtds/struts-config_1_1.dtd";>
> <struts-config>
>       <form-beans>
>               <form-bean name="DataSourceTestForm"
> type="org.apache.struts.action.DynaActionForm">
>                       <form-property name="jndiName"
> type="java.lang.String" initial="jdbc/ChronosPool"/>
>                       <form-property name="testSQL"
> type="java.lang.String" initial="x_link"/>
>               </form-bean>
>       </form-beans>
>       <action-mappings>
>               <action path="/system/testDataSource"
>               
>
type="com.apex.chronos.ui.system.TestDataSourceAction"
>                       name="DataSourceTestForm"
>                       scope="request"
>                       input="system/healthCheck.jsp"
>                       validate="false">
>                       <forward name="success"
> path="/system/healthCheck.jsp"/>
>                       <forward name="failure"
> path="/system/healthCheck.jsp"/>
>               </action>
>       </action-mappings>
> </struts-config>
> 
> ==========================
> TestDataSourceAction.java
> ==========================
> package com.apex.chronos.ui.system;
> 
> import java.sql.Connection;
> import java.sql.PreparedStatement;
> import java.util.ArrayList;
> import javax.naming.InitialContext;
> import javax.servlet.http.HttpServletRequest;
> import javax.servlet.http.HttpServletResponse;
> import javax.sql.DataSource;
> import org.apache.struts.action.Action;
> import org.apache.struts.action.ActionForm;
> import org.apache.struts.action.ActionForward;
> import org.apache.struts.action.ActionMapping;
> import org.apache.struts.action.DynaActionForm;
> 
> public class TestDataSourceAction extends Action {
> 
>       public static final String DATASOURCE_TEST_RESULTS
> =
> "dataSourceTestResults";
>       public static final String JDBC_SUBCONTEXT_NAME =
> "java:comp/env/jdbc";
> 
>     public ActionForward execute(ActionMapping
> mapping, ActionForm form,
>       
> HttpServletRequest request,
> HttpServletResponse response) {
>               DynaActionForm myForm = (DynaActionForm) form;
> 
> 
>               String dataSrc = (String) myForm.get("jndiName");
>               String sql = (String) myForm.get("testSQL");
> 
>               String dataSrcJndiPath = JDBC_SUBCONTEXT_NAME +
> "/"
> + dataSrc;
>               String result = "healthy";
>               PreparedStatement ps = null;
>               Connection conn = null;
>               InitialContext ctx = null;
>               try {
>                       ctx = new InitialContext();
> 
>                       //Lookup specified data source
>                       DataSource ds = (DataSource)
> ctx.lookup(dataSrcJndiPath);
> 
>                       //run sql through to ensure healthy connection
>                       conn = ds.getConnection();
>                       ps = conn.prepareStatement(sql);
>                       boolean didExecute = ps.execute();
>                       if (!didExecute) {
>                               result = "failed: No result set produced
> from sql:
> " + sql;
>                       }
>               } catch (Exception e) {
>                       result = "failed: " + e.getMessage();
>               } finally {
>                       if (ctx != null) {
>                               try {
>                                       ctx.close();
>                               } catch (Exception e) {}//ignore
>                       }
> 
>                       if (ps != null) {
>                               try {
>                                       ps.close();
>                                       ps = null;
>                               } catch (Exception e){}//ignore
>                       }
>                       if (conn != null) {
>                               try {
>                                       conn.close();
>                                       conn = null;
>                               } catch (Exception e){}//ignore
>                       }
>               }
> 
>               request.setAttribute(DATASOURCE_TEST_RESULTS,
> result);
>         return mapping.findForward("success");
>       }
> }
> 
> 
> =================
> healthCheck.jsp
> =================
> <%@ page
>    language="java"
>    session="true"
>    isThreadSafe="false"
>    contentType="text/html"
>    isErrorPage="false"
> %>
> 
> <%@ page
>
import="com.apex.chronos.ui.system.TestDataSourceAction"
> %>
> <%@ page import="com.apex.common.SystemException" %>
> <%@ page import="com.apex.common.jndi.TreeUtil" %>
> <%@ page import="java.util.ArrayList" %>
> <%@ page import="javax.naming.Context" %>
> <%@ page import="javax.naming.InitialContext" %>
> <%@ page import="javax.naming.NamingEnumeration" %>
> <%@ page import="javax.sql.DataSource" %>
> 
> <%@ taglib uri="struts-html.tld" prefix="html" %>
> <%@ taglib uri="struts-bean.tld" prefix="bean" %>
> <%@ taglib uri="struts-logic.tld" prefix="logic" %>
> 
> <h4>Test DataSources for connectivity health</h4>
> <table border="0">
> <html:form action="/system/testDataSource"
> focus="jndiName">
>       <tr>
>               <th>DataSource</th>
>               <th>Health Check Query</th>
>       </tr>
>       <tr>
>               <td>
>                       <html:text property="jndiName" size="40"/>
> </td>
>               <td>
>                       <html:text property="testSQL"
> size="60"/> <b>;</b>
>               </td>
>       </tr>
>       <tr>
>               <td>
>                       <html:submit value="Test DataSource"/>
>               </td>
>               <td>
>                       <html:cancel/>
>               </td>
>       </tr>
> </html:form>
> </table>
> 
> 
> <logic:present name="<%=
> TestDataSourceAction.DATASOURCE_TEST_RESULTS %>">
> <hr/>
>       <h4><bean:write name="<%=
> TestDataSourceAction.DATASOURCE_TEST_RESULTS
> %>"/></h4>
> </logic:present>
> 
> 
> --- Dirk Verbeeck <[EMAIL PROTECTED]> wrote:
> > Let us first gather some more info.
> > Hardware, OS, network (firewall, ...), versions of
> > all relevant software
> > Configuration of your database pool (server.xml) &
> > database server (host 
> > access parameters)
> > 
> > Is it during startup / under load?
> > Can you provide a small test case?
> > 
> > Can you retest using the latest versions of DBCP &
> > pool (v1.1RC1)?
> > http://cvs.apache.org/~dirkv/builds/
> > 
> > At the bottom of your stack trace you see that the
> > cause is inside the 
> > driver
> > 
> > ================
> > Caused
> > by: java.sql.SQLException: Unable to connect to
> any
> > hosts due to exception: java.net.BindException:
> > Address already in use: connect        at
> >
>
com.mysql.jdbc.Connection.createNewIO(Connection.java:1622)
> >        at
> >
>
com.mysql.jdbc.Connection.<init>(Connection.java:491)
> > 
> >       at
> >
>
com.mysql.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:346)
> >        at
> >
>
org.apache.commons.dbcp.DriverConnectionFactory.createConnection(DriverConne
> ctionFactory.java:83)
> > ================
> > 
> > But  let us investigate further...
> > 
> > Dirk
> > 
> > 
> > Jon Wilmoth wrote:
> > 
> > >After doing some further research I think there's
> > >might be a bug in Jakarata Common's DBCP.  I was
> > able
> > >to successfully configure and test a connection
> > pool
> > >using the same MySQL Driver and connection
> > parameters
> > >with Weblogic 8.1 SP1.  Should this move to the
> > >developers list?  Into Bugzilla?
> > >  
> > >
> > 
> > 
> > 
> > 
> >
>
---------------------------------------------------------------------
> > To unsubscribe, e-mail:
> > [EMAIL PROTECTED]
> > For additional commands, e-mail:
> > [EMAIL PROTECTED]
> > 
> 
> 
> 
>
---------------------------------------------------------------------
> To unsubscribe, e-mail:
> [EMAIL PROTECTED]
> For additional commands, e-mail:
> [EMAIL PROTECTED]
> 


---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to