Peter Andrews wrote:
> I was also getting this error and have resolved
> it.
> The error occurs when the MySql database
> terminates a connection. In my case this occurred
> after one hour of disuse which is the timeout
> setting we configured in MySql. I imagine
> restarting MySql would also cause the problem.
> After this occurs, despite autoReconnect=true I
> woudl get the Communication link failure.
>
> I am using Tomcat so my connection properties are
> specified in the server.xml file lke this:
> <ResourceParams name="jdbc/directory">
>
> <parameter><name>factory</name>&
> lt;value>org.apache.commons.dbcp.BasicDataSourc
> eFactory</value></parameter>
>
> <parameter><name>username</name>
> <value>user</value></parameter>
>
> <parameter><name>driverClassName</n
> ame><value>com.mysql.jdbc.Driver</valu
> e></parameter>
>
> <parameter><name>url</name><v
> alue>jdbc:mysql://mycompany.com/directory?autoR
> econnect=true&jdbcCompliantTruncation=fals
> e&elideSetAutoCommits=true&useLoca
> lSessionState=true&maintainTimeStats=false
> </value></parameter>
> <parameter><name>removeAbandoned</n
> ame><value>true</value></paramet
> er>
>
> <parameter><name>removeAbandonedTimeou
> t</name><value>60</value></pa
> rameter>
>
> <parameter><name>logAbandoned</name
> ><value>true</value></parameter&
> gt;
>
> <parameter><name>maxActive</name>
> ;<value>1000</value></parameter>
>
>
> <parameter><name>maxIdle</name>&
> lt;value>500</value></parameter>
>
> <parameter><name>maxWait</name>&
> lt;value>10000</value></parameter>
> </ResourceParams>
>
> Notice the line:
> <parameter><name>url</name><v
> alue>jdbc:mysql://mycompany.com/directory?autoR
> econnect=true&jdbcCompliantTruncation=fals
> e&elideSetAutoCommits=true&useLoca
> lSessionState=true&maintainTimeStats=false
> </value></parameter>
>
> This works and avoid the Communication link
> failure. Earlier I had been using:
>
> <parameter><name>connectionProperties&
> lt;/name><value>autoReconnect=true;autoRe
> connectForPools=true;jdbcCompliantTruncation=false
> ;elideSetAutoCommits=true;useNewIO=false;useLocalS
> essionState=true;maintainTimeStats=false</value
> ></parameter>
> <parameter><name>url</name><v
> alue>jdbc:mysql://mycompany.com/search</valu
> e></parameter>
>
> which should be equivalent. My guess is that the
> jdbc Connector/J 3.1.10 driver has a bug dealing
> with autoReconnect parameters passed via the
> connectionParameters instead of the queryString
> portion of the url.
>
> Hope this helps someone!
Peter,
The parameters passed in via <parameter>...<name>, etc _only_ go to DBCP, not the underlying JDBC driver. Why DBCP doesn't complain about not understanding the parameters is beyond me (I'd call it a bug, since it silently fails).
-Mark
Mark Matthews
Consulting Member Technical Staff - MySQL Enterprise Tools
Oracle
http://www.mysql.com/products/enterprise/monitor.html