> i was trying to implement a design which is like dispatcher, worker
> model where N number of requests come in, which are queued for the
[quoted text clipped - 10 lines]
>
> has anyone experienced such problems with threads in tomcat ?
Servlet containers are intended for:
- web request comes in
- web response go back out
They are not intended for long time number crunching or such.
The container uses threading itself to serve multiple requests
in parallel.
It is legal according to the spec to start multiple threads, so
you could:
- web request comes in
- you start N threads
- you wait to all threads are done
- web response go back out
But if it takes a long time, the the browser will consider
it a timeout.
So it is not a problem whether multi threading will work in Tomcat - it
is a question whether it is a good way of solving the problem.
Arne
Daniel Pitts - 05 Aug 2007 19:12 GMT
On Aug 5, 6:58 am, Arne Vajh?j <a...@vajhoej.dk> wrote:
> > i was trying to implement a design which is like dispatcher, worker
> > model where N number of requests come in, which are queued for the
[quoted text clipped - 34 lines]
>
> Arne
It is doable (and we've done it where I work). Although, you might
consider having a separate standalone process (in a different JVM)
handle the actual work.
ameyas7 - 05 Aug 2007 20:57 GMT
> It is doable (and we've done it where I work). Although, you might
> consider having a separate standalone process (in a different JVM)
> handle the actual work.-
Hi Daniel,
any specific reason that you can mention for running it in different
JVM? do you think it might make the core webapp unstable ?
i am actually writing a notification service where ppl will post
request to the service which will notify to the intended recepients
(by mails or other means)
thanks.
amey
Arne Vajhøj - 05 Aug 2007 21:50 GMT
>> So it is not a problem whether multi threading will work in Tomcat - it
>> is a question whether it is a good way of solving the problem.
>
> It is doable (and we've done it where I work). Although, you might
> consider having a separate standalone process (in a different JVM)
> handle the actual work.
I know it is doable. But it is not the usage servlet containers
were designed for.
Arne
ameyas7 - 05 Aug 2007 20:54 GMT
> It is legal according to the spec to start multiple threads, so
> you could:
[quoted text clipped - 10 lines]
>
> Arne
well my web request will not be waiting till the job is done.
it is actually a notification service, ppl will keep posting it and
then it will pick up all queued requests and notify the recepients
(say by mail or other means)
so the web response is not blocked on the completion of the worker
thread.
amey
Arne Vajhøj - 05 Aug 2007 21:49 GMT
>> It is legal according to the spec to start multiple threads, so
>> you could:
[quoted text clipped - 15 lines]
> so the web response is not blocked on the completion of the worker
> thread.
If you could upgrade from a servlet container (Tomcat) to a full
J2EE application server (like JBoss with Tomcat embedded as servlet
container), then you could:
- web request comes in
- servlet queue task to message queue
- web response go back out
- a message driven bean process the input from the message queue
Your solution will also work, but I believe the above is "the J2EE way".
Arne
Mike Schilling - 06 Aug 2007 02:54 GMT
>> It is legal according to the spec to start multiple threads, so
>> you could:
[quoted text clipped - 17 lines]
> so the web response is not blocked on the completion of the worker
> thread.
This can be made to work inside Tomca, but there are subtle isses.
1. You need to make your background threads daemon threads, or normal Tomcat
shutdown won't work, because even after all messages are done processing,
your threads will still be active.
2. If your application is stopped using Tomcat's mangement interface, your
background threads should stop too. You need to hook the Servelet.destroy()
method to accomplish this.