How about just returning the connection to the pool as soon as the servlet
is finished with the database? The approach I took was to have the pool
create a new connection if needed up to some maximum (determined by the
database or performance limits), then make the servlets always let go of a
connection as quickly as they can, so the pool can hand it to another
servlet. I've found that with only 3 or 4 connections you can get many times
that many users, as the probability of more than 3 or 4 asking for a
connection at the same instant isn't too high.

I also do the "wait until there is one" part, but with a limit on that too
(e.g. wait no more than X seconds).

I'm interested in how other people are tackling this, as the basic
connection pool examples seem to run out of steam in the real world
sometimes... at the same time I don't want to get too complex.

Mike
http://www.javacorporate.com


> -----Original Message-----
> From: A mailing list for discussion about Sun Microsystem's
> Java Servlet
> API Technology. [mailto:[EMAIL PROTECTED]]On Behalf Of
> Srinivasan S (Systems Engineering Group)
> Sent: Friday, August 20, 1999 11:37 AM
> To: [EMAIL PROTECTED]
> Subject: Re: very much a newbie design issue...
>
>
> Exactly this is what i am thinking for, all the example in
> the books and
> articles are static meaning only 20 or 30 connections are created just
> imagine a html form consists of nearly 30 columns and the
> user fills those
> columns after he press the submit button being 31st client in
> the pool he
> will get an error, instead this client shall be made wait till a
> connection is free in this pool.  My question is that i am running a
> thread in my code which checks for any free connection and
> wait if not.
> Another method provides connection to the user, if i call the
> connection
> method from another code what will happen if no connection available.
> for example:
>
> Connectionpool.java
>
> public void run()
> {
>     while(true)
>     {
>         try
>         {
>                 synchronized(con)
>                 {
>                         Connection con1 = (Connection)pool.pop();
>                         if con1 == null
>                                 thread.wait();
>                 }
>         }
>
>     }
> }
>
> Public Connection getConnection
> {
>         Connection c1 = (Connection)pool.pop();
> }
>
> Public void releaseConnection
> {
>         thread.notify();
>
> }
>
> Another method named Client.java
> ================================
>
> Connectionpool cp = new Connectionpool()
> cp.getConenction();
>
> I need to know what exactly will happen now if no connection
> is available
> in the pool wil this cp.getConnection will return a
> Connection object or
> not??
>
> Folks any comments/suggestions to this one.
>
> Thanks
> Srini
>
>
> #-------------------------------------------------------------
> ----------#
>   #
>             #
>   #           "ARISE AWAKE and stop not till the GOAL is
> reached"         #
>   #
>             #
>   #                     [EMAIL PROTECTED]
>             #
>
> #-------------------------------------------------------------
> ----------#
>
> On Fri, 20 Aug 1999, peter greaves wrote:
>
> > hi
> >
> > i've have my first simple JDBC servlet working and it's ok
> but it won't
> > scale.  i read about connection pooling and looked at the
> global broker
> > stuff, but i wondered if i could use a schema like this to
> make the  whole
> > process more scalable.  any comments gratefully received!!!!
> >
> > 1. Use a Connection Manager and event model
> >
> > Seems to me that servlet incurs much of its overhead if it
> needs to make a
> > connection to its query target each time it is called.  It
> is better to
> > create a single static Connection Manager object (created
> in the init()
> > method of the servlet when the web server's Servlet Manager
> starts up) which
> > establishes a pool of connections and allocates them on
> demand to worker
> > threads (see below) as "real" user requests come in.  There
> are a number of
> > downloadable Connection managers classes which can be used
> for this purpose.
> >   Here's a bit of a thinking-out-loud about how it would work.
> >
> > The Connection manager's job is to maintain a free pool,
> keep track of
> > allocated conenctions, and maybe expand the pool if
> necessary using some
> > %age free algorithm, report errors in the connection layer etc.  An
> > event-based model seems useful for connecting the
> Connection Manager (as a
> > server) to its worker threads (the clients).  When the
> servlet's destroy()
> > method is called, a servletClosing event should be fired
> which will cause
> > the Connection Manager to repeatedly try to close its free
> connections, and
> > not respond to "connectionRequested" events.  This will
> mean that existing
> > queries will be honoured, but no new ones can be created.
> >
> > 2.  Use Java Threading and separate worker threads for
> processing queries.
> >
> > The servlet class should maybe just create a new worker
> thread to handle
> > each request and then go back to listening for requests.
> The worker should
> > fire an "connectionRequested" event, which the ConnectionManager is
> > listening for.  The Connection manager will reply with a
> Connection object
> > The worker will run the query, and fire a "connectionFree"
> event (which
> > causes the Connection manager to return the connection to
> the pool), deposit
> > the result set wrapped in (probably) HTML on a stack and fire a
> > readytoShipToClient event for which another thread is
> listening - this
> > thread can serve the results back to the client.
> >
> > what do folk think?  am i overthreading? :)  obv. i want to
> get the design
> > right at the outset.  btw, i'm running on Domino R5.
> >
> > peter
> >
> >
> > ______________________________________________________
> > Get Your Private, Free Email at http://www.hotmail.com
> >
> >
> ______________________________________________________________
> _____________
> > To unsubscribe, send email to [EMAIL PROTECTED] and
> include in the body
> > of the message "signoff SERVLET-INTEREST".
> >
> > Archives:
> http://archives.java.sun.com/archives/servlet-interest.html
> > Resources:
> http://java.sun.com/products/servlet/external-resources.html
> > LISTSERV Help: http://www.lsoft.com/manuals/user/user.html
> >
>
> ______________________________________________________________
> _____________
> To unsubscribe, send email to [EMAIL PROTECTED] and
> include in the body
> of the message "signoff SERVLET-INTEREST".
>
> Archives: http://archives.java.sun.com/archives/servlet-interest.html
> Resources:
> http://java.sun.com/products/servlet/external-resources.html
> LISTSERV Help: http://www.lsoft.com/manuals/user/user.html
>

___________________________________________________________________________
To unsubscribe, send email to [EMAIL PROTECTED] and include in the body
of the message "signoff SERVLET-INTEREST".

Archives: http://archives.java.sun.com/archives/servlet-interest.html
Resources: http://java.sun.com/products/servlet/external-resources.html
LISTSERV Help: http://www.lsoft.com/manuals/user/user.html

Reply via email to