Handling multiple requests (Request Queueing/Pooling?)

HI All, 

I am referring the following discussion; I also have a similar problem,
which is described (in detail:-)) subsequently.

<begin previous discussion>

On Wed, 19 Jan 2000, Veena T wrote:
> I am using jigsaw server for my web tool that uses the applet and
> servlets. The servlets form the back end and they are going to connect
> to the database.
> For managing the transactions I am planning to use the connection
> pooling concept. Will jigsaw readily support database connection
> pooling? I am asking this doubt since I came to know that it is not just
> enough if the server supports servlets. Only if the server is supports
> the connection pooling concept then only it mey be implemented.
> Please reply as soon as possible

A while ago, I started to do one, it is not finished yet, and not yet in
the cvs base, I can give it to you in an unfinished state, it should
already work, only some limit checks are missing.
Regards,

      /\          - Yves Lafon - World Wide Web Consortium - 



If this can help :
as I understand, you're using servlets to connect to a database; so it might
not be a Jigsaw problem but a servlet problem, for having a pool of
connection to a database.
....snipped.....

Regards J Brax  

<end of previous discussion>

Here is my story. I appreciate some help/pointers or alpha/beta code
done by others. NOTE: I am NOT using servlets now ! So, please advise me
if servlets is the best way to go. 

I wanted to EXTEND jigsaw so that I could query a database
with a web-browser interface. THe database is implemented 
in native binaries (coded in C/C++ and compiled). Re-writing these in
Java is not an option for me.

I subclassed from 'PostableFrame' a new java class called
"DBFrame". Then I re-wrote the handle() and perform() to take care
of the POST requests coming from a browser. (POST is currently sufficient for
my needs). The database API provides a 'connection' abstraction API that
can be used to send query requests to the DB and then to getback
results. Query requests have to be sent ONE AT A TIME; until
the result is returned for a request, another should NOT be sent. If one tries 
to interfere in the connection when the query is in progress, the 
connection and/or query fails.

I used JNI (Java Native Interface) to integrate the database connection
API into the DBFrame class I created in Jigsaw,  and created a DLL (in WINdows)
and a ".so" (in Linux) that provide  necessary functionality as native methods.
Then I mapped a URL to the new class using JigAdmin. 

Now the problem: when MULTIPLE browsers send POST requests SIMULATANEOUSLY
I need a way to ensure a single request (thread) accesses the database (=>
the connection API) at a time. I tried a simple 'busy' flag in native C code
(in the DLL) as well as in the 'DBFrame' class. None worked correctly.
(I am not expecting hundreds or more concurrent requests; Max is ~ 100)

I tried using 'synchronized' (instance) methods in DBFrame class; didn't 
work either. I suspect independent threads are already created by Jigsaw,
so my techniques are not really blocking these threads. ???
 
Is this  really a Jigsaw issue or (Java/JNI + Multi-threading) issue?

As the above discussion suggests, should I have to do explicit
pooling and queueing of requests using some custom Queue class?
(In the latter case, incoming requests will first go to this queue/pool?)

I would like to see if Yves code would work for me. Could you send me
the code/a pointer to the code please?

Thanks.

Sanath

Received on Tuesday, 15 February 2000 14:42:04 UTC