BTW, in the code below, I forgot to create the connection at the beginning 
of the try statment.  Just wanted to note that you will need to do that.

conn = openConn();  //openConn() grabs the connection from a pool or 
creates a brand new connection

Just insert that and whatever you need to do to open your connection at the 
beginning of the try statement below.

jake


At 12:00 AM 7/16/2002 -0500, you wrote:
>HI Paul,
>
>You simply need to make sure that you've let go of your resources such as 
>connections, resultsets, etc....
>
>Here is some sample code for that...
>
>Connection conn = null;
>PreparedStatement pstmt = null;
>ResultSet rs = null;
>
>String query = "SELECT * FROM mytable";
>
>try {
>     pstmt = conn.prepareStatement(query);
>     rs = pstmt.executeQuery();
>
>     //do something with the ResultSet...
>
>     rs.close();
>     pstmt.close();
>     conn.close();
>}
>catch(SQLException e) {
>     System.out.println(e.getMessage());
>     throw e;
>}
>finally {
>     if (rs != null)    try { rs.close(); }    catch(Exception e2) {}
>     if (pstmt != null) try { pstmt.close(); } catch(Exception e3) {}
>     if (conn != null)  try { conn.close(); } catch(Exception e4) {}
>}
>
>
>The key here is that if a SQLException is raised in the try statement, 
>then the ResultSet, PreparedStatement, and Connection will not be 
>successfully closed.  In order to guarantee that they get closed, you need 
>to have the finally statement which is guaranteed to run no matter 
>what.   Try that and I bet your connections won't get locked up until timeout.
>
>Jake
>
>
>At 02:27 PM 7/15/2002 -0700, you wrote:
>>Sorry it's been a week since you sent this message...  Too much traffic 
>>here for me to keep up.  This problem is the only reason I'm subscribed 
>>to this list at all.  I normally only follow -dev (and if I could point 
>>to a specific problem in Tomcat I'd ask there instead).
>>
>>I have this problem with all JDBC accesses from Tomcat.  At first I was 
>>using a MySQL database call on every page, and found that if I accessed a 
>>second MySQL server which became unavailable, every call to the first one 
>>would be held up until it timed out, even in other contexts.  Then I 
>>discovered that we had the same problem when accessing a MS-SQL server.
>>If the MS-SQL server was unavailable, every other page on the site (each 
>>of them containing the call to MySQL) would wait until the MS-SQL 
>>connection timed out.  Finally, we incorporated an Oracle connection with 
>>the same results.  Any JDBC call to a database which is unavailable holds 
>>up all other connections on the servlet engine.
>>
>>This is an embarrassing threading issue.
>>
>>Although we asked for help on this list (and received some 
>>well-thought-out responses from Bill Barker) we were unable to resolve 
>>the problem.
>>Our current hack for this is:
>>
>>1) DriverManager.setLoginTimeout(CONNECTION_TIMEOUT);
>>(The default timeout is extraordinarily long and for us a few seconds 
>>will do for any one of the databases)
>>
>>2) A connection wrapper, so that instead of calling 
>>DriverManager.getConnection(connectionURL,ID,Pass) we call
>>DBConnWrapper.getConnection(connectionURL,ID,Pass) and the wrapper 
>>remembers when a connection has failed and on each request for a 
>>connection does
>>if(!databases.containsKey(DB) || (new Date()).getTime() - 
>>((Date)(databases.get(DB))).getTime() > RETRY_INTERVAL)
>>
>>If you come up with a better answer, let me know.  Of course, it's 
>>possible that you have a different problem than we do, but it sounds similar.
>>
>>Paul
>>Unix System Admin/Webmaster
>>Seattle Public Schools
>>
>>For Reference:
>>
>>On Monday, July 8, 2002, at 11:05 AM, Bill D wrote:
>>>Let me first set up my situation.  On my server, I
>>>have two webapps running, webapp A and webapp B.
>>>Webapp A uses JDBC Thin driver to contact an Oracle
>>>database at remote location 1.  Webapp B uses JDBC
>>>Thin driver to contact an Oracle database at remote
>>>location 2.
>>>
>>>If the internet connection at remote location 1 goes
>>>down, the attempt to connect to that database has the
>>>expected result of a connection to that IP in the
>>>SYN_SENT state in the netstat output on the server.
>>>
>>>While this connection is in the SYN_SENT state, any
>>>requests to webapp B that need to call the other
>>>database at location 2 which is still up and running
>>>are put on hold.  Visitors to that site are left
>>>staring at a blank screen until the first connection
>>>from webapp A to location 1 times out.
>>>
>>>Seeing as how these are 2 seperate webapps connecting
>>>to 2 seperate remote locations, I did not expect the
>>>behavior to occur in a fashion where one will block
>>>the other.  The behavior I expected was that they
>>>would operate independantly of each other, and webapp
>>>B would continue to work at a normal pace no matter
>>>what is occurring with webapp A.  Am I looking at this
>>>wrong?  Any help would be greatly appreciated.
>>
>>
>>--
>>To unsubscribe, e-mail:   <mailto:[EMAIL PROTECTED]>
>>For additional commands, e-mail: <mailto:[EMAIL PROTECTED]>

Reply via email to