You are viewing a plain text version of this content. The canonical link for it is here.
Posted to user@struts.apache.org by Ellen Murray <no...@yahoo.com> on 2001/02/23 19:53:11 UTC

database connection getting garbage collected

Hi,

After several hours with no activity my connection
pool
seems to get garbage collected (or die). It works
fine,
but then I come in the next day and get the following 
error:

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

The full stack trace is at the bottom of the page. If
I reload the page in question a couple of times the 
connection comes back and everything is o.k. 

I am working on my own so I need some help. I've
included the data-sources section of the
struts-config.xml file and the database related part 
of my perform method below.

Any insight would be greatly appreciated.

Thanks,

Ellen


//------------------------------
//-- in the struts-config.xml
//------------------------------
  <data-sources>
      <data-source
         autoCommit="true"
        description="test-jdbc"
        driverClass="org.gjt.mm.mysql.Driver"
           maxCount="4"
           minCount="2"
           password="blahblah"
               user="blahblah"
                url="jdbc:mysql://localhost/mydb" />
  </data-sources>



//------------------------------
//-- in my Action class
//------------------------------
public ActionForward perform(...) throws ...

   GenericConnection connection = null;

   try {
       DataSource ds = servlet.findDataSource(null);
       connection = 
             (GenericConnection) ds.getConnection();

       String sql = "select * from mytable";

       Statement statement =
                       connection.createStatement();
       ResultSet results  =
                        statement.executeQuery(sql);
      
       while (results.next()) {
          // stuff goes here
       }
       connection.close();
       results = null;
       statement = null;
       connection = null;
    } 
    catch (SQLException se) { 
         request.setAttribute("exception", se);
         return (mapping.findForward("failure"));
    }
    finally {
       // Return connection to pool
       if (connection != null) {
          try {
             connection.close();
          }
          connection = null;
       }
    }
}



//------------------------------
// exception.printStackTrace()
//------------------------------

java.sql.SQLException: Communication link failure:
java.net.SocketException
        at java.lang.Throwable.fillInStackTrace(Native
Method)
        at
java.lang.Throwable.fillInStackTrace(Compiled Code)
        at java.lang.Throwable.<init>(Compiled Code)
        at java.lang.Exception.<init>(Compiled Code)
        at
java.sql.SQLException.<init>(SQLException.java:43)
        at
org.gjt.mm.mysql.MysqlIO.sendCommand(Compiled Code)
        at
org.gjt.mm.mysql.MysqlIO.sqlQueryDirect(Compiled Code)
        at org.gjt.mm.mysql.MysqlIO.sqlQuery(Compiled
Code)
        at
org.gjt.mm.mysql.Connection.execSQL(Compiled Code)
        at
org.gjt.mm.mysql.Connection.execSQL(Compiled Code)
        at
org.gjt.mm.mysql.Statement.executeQuery(Compiled Code)
        at
org.gjt.mm.mysql.jdbc2.Statement.executeQuery(Compiled
Code)
        at planner.ShowReleasesAction.perform(Compiled
Code)
        at
org.apache.struts.action.ActionServlet.processActionPerform(ActionServlet.java:1634)
        at
org.apache.struts.action.ActionServlet.process(ActionServlet.java:1444)
        at
org.apache.struts.action.ActionServlet.doGet(ActionServlet.java:472)
        at
javax.servlet.http.HttpServlet.service(HttpServlet.java:740)
        at
javax.servlet.http.HttpServlet.service(Compiled Code)
        at
org.apache.tomcat.core.ServletWrapper.doService(Compiled
Code)
        at
org.apache.tomcat.core.Handler.service(Compiled Code)
        at
org.apache.tomcat.core.ServletWrapper.service(Compiled
Code)
        at
org.apache.tomcat.core.ContextManager.internalService(ContextManager.java:797)
        at
org.apache.tomcat.core.ContextManager.service(Compiled
Code)
        at
org.apache.tomcat.service.http.HttpConnectionHandler.processConnection(Compiled
Code)
        at
org.apache.tomcat.service.TcpWorkerThread.runIt(Compiled
Code)
        at
org.apache.tomcat.util.ThreadPool$ControlRunnable.run(Compiled
Code)
        at java.lang.Thread.run(Compiled Code)



__________________________________________________
Do You Yahoo!?
Yahoo! Auctions - Buy the things you want at great prices! http://auctions.yahoo.com/

Re: database connection getting garbage collected

Posted by Pramod <pr...@svw.com>.
Why dont you put your resource - say, the ConnectionBroker (if u r using
one) - in the ServletContext so that it always has a reference to it and
thus wont get garbage collected ?

----- Original Message -----
From: Ellen Murray <no...@yahoo.com>
To: <st...@jakarta.apache.org>
Sent: Saturday, February 24, 2001 12:23 AM
Subject: database connection getting garbage collected


> Hi,
>
> After several hours with no activity my connection
> pool
> seems to get garbage collected (or die). It works
> fine,
> but then I come in the next day and get the following
> error:
>
> java.sql.SQLException:
>   Communication link failure: java.net.SocketException
>
> The full stack trace is at the bottom of the page. If
> I reload the page in question a couple of times the
> connection comes back and everything is o.k.
>
> I am working on my own so I need some help. I've
> included the data-sources section of the
> struts-config.xml file and the database related part
> of my perform method below.
>
> Any insight would be greatly appreciated.
>
> Thanks,
>
> Ellen
>
>
> file://------------------------------
> file://-- in the struts-config.xml
> file://------------------------------
>   <data-sources>
>       <data-source
>          autoCommit="true"
>         description="test-jdbc"
>         driverClass="org.gjt.mm.mysql.Driver"
>            maxCount="4"
>            minCount="2"
>            password="blahblah"
>                user="blahblah"
>                 url="jdbc:mysql://localhost/mydb" />
>   </data-sources>
>
>
>
> file://------------------------------
> file://-- in my Action class
> file://------------------------------
> public ActionForward perform(...) throws ...
>
>    GenericConnection connection = null;
>
>    try {
>        DataSource ds = servlet.findDataSource(null);
>        connection =
>              (GenericConnection) ds.getConnection();
>
>        String sql = "select * from mytable";
>
>        Statement statement =
>                        connection.createStatement();
>        ResultSet results  =
>                         statement.executeQuery(sql);
>
>        while (results.next()) {
>           // stuff goes here
>        }
>        connection.close();
>        results = null;
>        statement = null;
>        connection = null;
>     }
>     catch (SQLException se)

>          request.setAttribute("exception", se);
>          return (mapping.findForward("failure"));
>     }
>     finally {
>        // Return connection to pool
>        if (connection != null) {
>           try {
>              connection.close();
>           }
>           connection = null;
>        }
>     }
> }
>
>
>
> file://------------------------------
> // exception.printStackTrace()
> file://------------------------------
>
> java.sql.SQLException: Communication link failure:
> java.net.SocketException
>         at java.lang.Throwable.fillInStackTrace(Native
> Method)
>         at
> java.lang.Throwable.fillInStackTrace(Compiled Code)
>         at java.lang.Throwable.<init>(Compiled Code)
>         at java.lang.Exception.<init>(Compiled Code)
>         at
> java.sql.SQLException.<init>(SQLException.java:43)
>         at
> org.gjt.mm.mysql.MysqlIO.sendCommand(Compiled Code)
>         at
> org.gjt.mm.mysql.MysqlIO.sqlQueryDirect(Compiled Code)
>         at org.gjt.mm.mysql.MysqlIO.sqlQuery(Compiled
> Code)
>         at
> org.gjt.mm.mysql.Connection.execSQL(Compiled Code)
>         at
> org.gjt.mm.mysql.Connection.execSQL(Compiled Code)
>         at
> org.gjt.mm.mysql.Statement.executeQuery(Compiled Code)
>         at
> org.gjt.mm.mysql.jdbc2.Statement.executeQuery(Compiled
> Code)
>         at planner.ShowReleasesAction.perform(Compiled
> Code)
>         at
>
org.apache.struts.action.ActionServlet.processActionPerform(ActionServlet.ja
va:1634)
>         at
> org.apache.struts.action.ActionServlet.process(ActionServlet.java:1444)
>         at
> org.apache.struts.action.ActionServlet.doGet(ActionServlet.java:472)
>         at
> javax.servlet.http.HttpServlet.service(HttpServlet.java:740)
>         at
> javax.servlet.http.HttpServlet.service(Compiled Code)
>         at
> org.apache.tomcat.core.ServletWrapper.doService(Compiled
> Code)
>         at
> org.apache.tomcat.core.Handler.service(Compiled Code)
>         at
> org.apache.tomcat.core.ServletWrapper.service(Compiled
> Code)
>         at
>
org.apache.tomcat.core.ContextManager.internalService(ContextManager.java:79
7)
>         at
> org.apache.tomcat.core.ContextManager.service(Compiled
> Code)
>         at
>
org.apache.tomcat.service.http.HttpConnectionHandler.processConnection(Compi
led
> Code)
>         at
> org.apache.tomcat.service.TcpWorkerThread.runIt(Compiled
> Code)
>         at
> org.apache.tomcat.util.ThreadPool$ControlRunnable.run(Compiled
> Code)
>         at java.lang.Thread.run(Compiled Code)
>
>
>
> __________________________________________________
> Do You Yahoo!?
> Yahoo! Auctions - Buy the things you want at great prices!
http://auctions.yahoo.com/