Postgres Java Connection not closing.. Too many Clients Problem

From: "John Kunchandy" <johnk(at)stylusinc(dot)com>
To: <pgsql-general(at)postgresql(dot)org>
Subject: Postgres Java Connection not closing.. Too many Clients Problem
Date: 2003-05-05 08:43:06
Message-ID: 010c01c312e2$5d056790$1c0aa8c0@stylusinc.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-general

Hi All

I am a novice in using Postgres.I have been mainly using Postgres with Zope
installed on Mandrake Linux.PLEASE SPARE A LITTLE TIME TO READ MY MAIL since
it is a bit long.
I am currently having some Major difficulties in running my application
developed in java using Postgres as the back end.
I will explain the system I am using.The main application is devloped in
Java on Mandrake Linux8.2 <database is Postgres 7.2.2 and the pgjdbc2.jar
Driver.
My application is using connection pooling to get the connection from the
Connection Pool Class(This is my own class DBConnection() with a few
functions defined --
getConnection()
freeConnection(objConnection)
)

and then using the connection to execute the query.
Let me give a brief description about the application architecture.
I am trying to implement MVC in a way.
I have Java class files(MODEL) which are actually doing the actual select
and insert queries.
I have a control Servlet(CONTROLLER) which is the Servlet that is called by
all the JSp Pages .The servlet gets a connection form the Pool in the init()
and then calls the function based on the request from the JSP Page and
passes the connection object to the Class File which does the query.

========================================================================
public RequestDispatcher objRD=null;
public void init(ServletConfig config) throws ServletException
{
super.init(config);
objConnMgr = new DBConnection();
}
public void doPost(HttpServletRequest objRequest, HttpServletResponse
objResponse) throws ServletException, IOException
{
objConnection = objConnMgr.getConnection();
}

public ArrayList someFunction()
{
..........................
........................
//calls to the functions in the MODEL java classes for:
//select * from table
//insert into table
// delete from table
// update table where
ArrayList objArrayList = objAdmin.showAll();

objRequest.setAttribute("COUNT", objArrayList.get(0));
objRequest.setAttribute("USERS", objArrayList.get(1));
objRequest.setAttribute("PageNum", objArrayList.get(2));

objConnMgr.freeConnection(objConnection);
objRD = getServletContext().getRequestDispatcher("/Admin/index.jsp");
objRD.forward(objRequest, objResponse);
}
=========================================================================

NOw the jsp page requests the values from the Request Object and does the
coresponding action.
The Problem:

The Server shows too many Clients Exception everytimw within half an hour or
two of starting Tomcat and Postgres.
Althought the number of users accessing the Site would be at the most 30
concurrent users.
THE Connection doesnt seem to be getting closed when I call the connection
Free Manager.The reason would be that the ResultSet is not null since I may
have done a select.But in this case the JSP page is dispalyed by requesting
the ResultSet
and then looping through.BUt I am not able to clse the cnnectionnhere either
as I do not know if that Connection has been threaded and is being used by
any other function.

SO in Short I am not able to close the connection in the class Files(MODEL)
because the Result set is to be sent back after the select .
I am not able to close the connection in the Control Servlet( CONTROL)
because I have to send the Result Set to the jSP page to be shown.So even if
I write connection.close() it will nto since the Result Se is not empty.
I am not being able to close the Connection in the JSP page(VIEW) since the
connection Object cannot be sent forward foimr the Servlet since I do not
know if the Object has been threaded and a thread is being used by another
function.CO I cannot close it in the JSP Page either.Also if I wanted to
close a particular connection I cannot gewt the connection Object by knwoing
the ResulSert obj.I can only get the statement.IN the JSP Page I am setting
the ResultSE and Statement Object to null.But stil I cannot close the
connection.

So in short the number of connections keep increasing and the Sytem crashes
or else Postgers shows an error of Too many Clients and too Many
Connections.Increasing the number oc connections is not a solution since I
have kept it at 256 but still with 5 users in a few hours the application
comes back to the same situation.

I am sure you may have come across such a problem may times.Please help me
out and guide me as to how I should go about this isse .Where exactly to
close the connection.How to pass the cnnection Object to the JSP page and
make sure the right connection is closed.Or if it is POstgres which somehow
is holding connections persistently then how do I stop it.Thank s in
Advancew for reading this whole letter .Please point me in the right
direction.

Thanks and Best Regards
John Kunchandy

---
Outgoing mail is certified Virus Free.
Checked by AVG anti-virus system (http://www.grisoft.com)
Version: 6.0.476 / Virus Database: 273 - Release Date: 4/24/2003

Responses

Browse pgsql-general by date

  From Date Subject
Next Message Ralph Graulich 2003-05-05 09:05:41 Re: problems restoring 7.2.1 dump to 7.3.2
Previous Message Benjamin Scherrey 2003-05-05 04:38:26 Re: Status of OIDs was: Re: select first occurrence of a table