You can ignore my last email or read through if you encounter similar
problems and need a fix.
I just found out from the MySQL J/Connector documentation that
connections are cut off after 8 hours of inactivity.

----
"I have a servlet/application that works fine for a day, and then stops 
  working overnight".

  Resolution: 

  MySQL closes connections after 8 hours of inactivity. You either
  need to use a connection pool that handles stale connections or use
the 
  "autoReconnect" parameter (see "USAGE AND INSTALLATION"). [...]

  ----

I guess (from my bad experience) that the Struts connection pool can't
handle stale connections so I just added "autoReconnect" to my
struts-config.xml. I hope this fix keeps my webapp work overnight this
time... Tomcat's JDBCRealm seems to handle stale connections
automatically... 
Maybe this would be a nice to have thing for the Struts connection pool,
too?!

BTW: You cannot use "set-property" for those special properties like
"autoReconnect" or "profileSql". They have to be in the connectionURL
like this (I tried it differently with "profileSql" but nothing happend
on stderr):

Use instead similar to:
<set-property property="url"
value="jdbc:mysql://localhost:3307/praksis?autoReconnect=true&amp;maxRec
onnects=5&amp;initialTimeout=2&amp;profileSql=true"/>

Thanks anyway.
Michael

-----Original Message-----
From: mech [mailto:[EMAIL PROTECTED]] 
Sent: Freitag, 17. Januar 2003 12:52
To: '[EMAIL PROTECTED]'
Subject: Problem with JDBC & Struts Connection Pool (possible to
reconnect?)


Hi,

I'm running Tomcat 4.1.18 on Solaris 9 with a local MySQL 3.23.54-max
(InnoDB) database on port 3307 using started with mysqld (not
safemysld...difference btw?).

After not using any connection over night for let's say 12 hours or
more, I get SQLExceptions next morning:

"java.sql.SQLException: Communication link failure:
java.net.SocketException"

In my application I use JDBC for Tomcats security realm feature and
form-based auth. When I try to login for the first time, I get this
error log (see below), but if I try to login twice the db connection
seems to get reset automatically. (A solution I could live with,
although I have now idea why the connection was cut while it should be
idle overnight)

Unfortunatelly my struts connection pool that I use in my application's
data access classes doesn't get reinitialized after such a
SocketException (see below). The only solution so far was to reload or
stop/start the webapp with the Tomcat manager. Bad solution....

In my struts-config.xml I already have something to reconnect (see
below), but it obviously didn't do the trick with my
"mysql-connector-java-2.0.14.jar" J/Connector. I simply lost the
connection somehow...

Can anyone give my an hint what happens to my MySQL connections? I don't
seem to have a problem if I send a query from time to time, but if I
wait too long and do nothing, I'm cut off... :-(

In case there's no way to stop this, is there a solution how to tell my
application (a java code snippet would be great...) to reinitialize the
Struts connection pool when this exception is thrown. For Tomcat's
JDBCRealm it is done somehow, how can I reset the MySQL connection for
Struts? I think I could live with a reconnect on the second try for a
query.

Thanks you!
Michael



------

<data-sources>
                <data-source>
                        <set-property property="driverClass"
value="com.mysql.jdbc.Driver"/>
                        <set-property property="url"
value="jdbc:mysql://localhost:3307/praksis"/>
                        <set-property property="maxCount" value="25"/>
                        <set-property property="minCount" value="5"/>
                        <set-property property="user" value="praksis"/>
                        <set-property property="password"
value="siskarp"/>
                        <set-property property="autoReconnect"
value="true"/>
                        <set-property property="maxReconnects"
value="3"/>
                        <set-property property="initialTimeout"
value="2"/>
                        <set-property property="profileSql"
value="true"/>
                </data-source>          
        </data-sources>


EXCEPTION from log file:

(first time to try a login and utilize the connection again after long
idle time) 2003-01-17 12:28:55 JDBCRealm[/praksis]: Exception performing
authentication
java.sql.SQLException: Communication link failure:
java.net.SocketException
        at com.mysql.jdbc.MysqlIO.sendCommand(Unknown Source)
        at com.mysql.jdbc.MysqlIO.sqlQueryDirect(Unknown Source)
        at com.mysql.jdbc.Connection.execSQL(Unknown Source)
        at com.mysql.jdbc.PreparedStatement.executeQuery(Unknown Source)
        at
org.apache.catalina.realm.JDBCRealm.authenticate(JDBCRealm.java:445)
        at
org.apache.catalina.realm.JDBCRealm.authenticate(JDBCRealm.java:394)
        at
org.apache.catalina.authenticator.FormAuthenticator.authenticate(FormAut
henticator.java:263)
        at
org.apache.catalina.authenticator.AuthenticatorBase.invoke(Authenticator
Base.java:480)
        at
org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.i
nvokeNext(StandardPipeline.java:641)
        at
org.apache.catalina.valves.CertificatesValve.invoke(CertificatesValve.ja
va:246)
        at
org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.i
nvokeNext(StandardPipeline.java:641)
        at
org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:4
80)
        at
org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:995)
        at
org.apache.catalina.core.StandardContext.invoke(StandardContext.java:241
5)
        at
org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java
:180)
        at
org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.i
nvokeNext(StandardPipeline.java:643)
        at
org.apache.catalina.valves.ErrorDispatcherValve.invoke(ErrorDispatcherVa
lve.java:170)
        at
org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.i
nvokeNext(StandardPipeline.java:641)
        at
org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java
:172)
        at
org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.i
nvokeNext(StandardPipeline.java:641)
        at
org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:4
80)
        at
org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:995)
        at
org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.
java:174)
        at
org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.i
nvokeNext(StandardPipeline.java:643)
        at
org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:4
80)
        at
org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:995)
        at
org.apache.coyote.tomcat4.CoyoteAdapter.service(CoyoteAdapter.java:223)
        at
org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:43
2)
        at
org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.processC
onnection(Http11Protocol.java:386)
        at
org.apache.tomcat.util.net.TcpWorkerThread.runIt(PoolTcpEndpoint.java:53
4)
        at
org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool
.java:530)
        at java.lang.Thread.run(Thread.java:536)

(For the JDBCRealm Tomcat seems to reconnect, so authentification works
on the second try again...) 2003-01-17 12:29:00 JDBCRealm[/praksis]:
Username mech@praksis successfully authenticated


EXCEPTION debug print from own application (This is on of my data access
class where I do my queries using the Struts connection pool):

Class: praksis.ormapping.TopicDAO Error: Communication link failure:
java.net.SocketException

(Unfortunately, my struts connection does not get reinitialized after
such an error... How can I do it?)



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

Reply via email to