struts-user mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Frank W. Zammetti" <fzli...@omnytex.com>
Subject Re: [OT]Threads and Servlets Question
Date Tue, 07 Dec 2004 03:12:35 GMT
Interesting answer Craig...

I'm sure we've all heard the admonishment that we should not spawn 
threads inside a servlet container, the container should be "handling 
all threading issues".  In fact, I think I even remember something about 
it in the spec, or at least being told there was something about it in 
the spec :)

I've always felt that "rule" was a bit ambiguous, to say the least...

I agree that the solution outlined here is the typical pattern, but if 
for no other reason than to foster debate on a potentially interesting 
point, why isn't this contrary to that usual bit of advice about threading?

The same question arises with daemon threads.  For instance I have one 
app that does some periodic processing, and for various reasons it made 
the most sense for it to be tied to the app instance.  So, when the app 
starts up, I spawn a couple of daemon threads, set them to low priority, 
and they do their thing every few hours.  I've been told this is also a 
Bad Thing(tm) within a servlet container, but I've always felt it really 
wasn't.  Certainly I've observed no ill effects to do such a thing.

What I'm really getting to here, and I suspect it would be for the 
benefit of a great many people reading this, is the simple question, 
what is actually OK to do with threads in a servlet container and what 
isn't?  Perhaps more importantly, what is the reasoning behind the 
answers?  Any thoughts? (not necessarily just from Craig :) )

-- 
Frank W. Zammetti
Founder and Chief Software Architect
Omnytex Technologies
http://www.omnytex.com


Craig McClanahan wrote:
> You're using the typical pattern for this use case (although it's also
> feasible you could use something like JMS to accomplish the
> asynchronicity).  The most important thing to do, though, is to ensure
> that you eventually kill the thread no matter what actually happens,
> so that you don't have something needlessly consuming resources for
> the remainder of the lifetime of your server instance.
> 
> Craig
> 
> 
> 
> On Tue, 7 Dec 2004 10:50:06 +0800, Yves Sy <yves.sy@gmail.com> wrote:
> 
>>Here's a follow-up question:
>>
>>I remember creating a thread in one of my Action classes because I
>>needed to show a "Wait while your request is being processed..." page.
>>
>>The flow goes something like:
>>    1. the MAIN thread returns an ActionForward right away that
>>contains the "processing" page;
>>    2. the NEW thread I created goes ahead and makes the back-end call
>>that takes a considerable amount of time to process;
>>    3. After NEW thread returns with the results, it sets a flag in
>>the session that it's done with the processing;
>>    4. Meanwhile, the processing page keeps refreshing itself and
>>sending execution to an action which checks for the session flag set
>>in #3;
>>     5. When it finally finds the session flag, it forwards to the results page.
>>
>>Its working fine for me. No weird behavior on Weblogic or SAP WAS.
>>Although now I'm curious: Is there a better way to approach this
>>problem?
>>
>>Regards,
>>-Yves-
>>
>>On Mon, 6 Dec 2004 15:03:09 -0600, jeff_caswell@bcbstx.com
>>
>>
>><jeff_caswell@bcbstx.com> wrote:
>>
>>>
>>>As has been noted by others, JMS would be the better solution for an
>>>asynchronous 'process'.
>>>
>>>But, if you have to use threads then it is probably a better approach to
>>>create a thread pool at appliction initialization and have the actions use
>>>those threads via a common synchronized data structure (hidden behind an
>>>interface).
>>>
>>>Ensure that you have a good unique context for correlating the request and
>>>response (not to be confused with the http req/resp)
>>>
>>>depending upon the volume of traffic you should be able to get away with a
>>>small number of threads. The actual count can be controlled via an extenal
>>>property.
>>>
>>>good luck.
>>>
>>>JC
>>>
>>>                      "Jim Barrows"
>>>                      <jbarrows@sssc.co        To:       "Struts Users Mailing
List" <user@struts.apache.org>,
>>>                      m>                        admin@revoltingdigits.com
>>>                                               cc:
>>>                      12/06/2004 02:52         Subject:  RE: [OT]Threads and Servlets
Question
>>>
>>>
>>>                      PM
>>>                      Please respond to
>>>                      "Struts Users
>>>                      Mailing List"
>>>
>>>
>>>>-----Original Message-----
>>>>From: bryan [mailto:nihilism@gmail.com]
>>>>Sent: Monday, December 06, 2004 1:15 PM
>>>>To: Struts Users Mailing List
>>>>Subject: Re: [OT]Threads and Servlets Question
>>>>
>>>>
>>>>threads are also a finite resource  ( particularly on Linux ).
>>>>
>>>>--b
>>>>
>>>>
>>>>On Mon, 6 Dec 2004 21:13:57 +0100, bryan <nihilism@gmail.com> wrote:
>>>>
>>>>>because you should use a message driven bean to do
>>>>
>>>>something like that.
>>>>
>>>>>--b
>>>
>>>If the brass monkeys upstairs would let me, I would.  However, they won't,
>>>and I've used up all of my "oops I did it anyway" cards for a while.  So,
>>>while helpful, doesn't really answer my question.
>>>
>>>As for a finite resource...... as someone else said so is memory, disk
>>>space, CPU, etc etc.  As for being on linux.... I've done some pretty nasty
>>>multi-threading, in java, on linux and haven't hit that ceiling yet...
>>>ymmmv.
>>>
>>>
>>>>>
>>>>>
>>>>>
>>>>>On Mon, 6 Dec 2004 11:48:15 -0700, Jim Barrows
>>>>
>>>><jbarrows@sssc.com> wrote:
>>>>
>>>>>>Okay... I know I've read this somewhere, but can't remember.
>>>>>>Why is it recommended you NOT start a thread inside a
>>>>
>>>>servlet, which would translate to "Why is it a bad idea to
>>>>start a thread inside an action?".
>>>>
>>>>>>And, can you point me at some documentation?
>>>>>>
>>>>>>
>>>>
>>>>---------------------------------------------------------------------
>>>>
>>>>>>To unsubscribe, e-mail: user-unsubscribe@struts.apache.org
>>>>>>For additional commands, e-mail: user-help@struts.apache.org
>>>>>>
>>>>>>
>>>>>
>>>>>
>>>>>--
>>>>>http://www.revoltingdigits.com
>>>>>https://jestate.dev.java.net
>>>>>
>>>>
>>>>
>>>>--
>>>>http://www.revoltingdigits.com
>>>>https://jestate.dev.java.net
>>>>
>>>>---------------------------------------------------------------------
>>>>To unsubscribe, e-mail: user-unsubscribe@struts.apache.org
>>>>For additional commands, e-mail: user-help@struts.apache.org
>>>>
>>>>
>>>
>>>---------------------------------------------------------------------
>>>To unsubscribe, e-mail: user-unsubscribe@struts.apache.org
>>>For additional commands, e-mail: user-help@struts.apache.org
>>>
>>>
>>>------------------------------------------------------------------------------
>>>**********
>>>The information contained in this communication is confidential, private, proprietary,
or otherwise privileged and is intended only for the use of the addressee.  Unauthorized use,
disclosure, distribution or copying is strictly prohibited and may be unlawful.  If you have
received this communication in error, please notify the sender immediately at (312)653-6000
in Illinois; (972)766-6900 in Texas; or (800)835-8699 in New Mexico.
>>>**********
>>>==============================================================================
>>>
>>>
>>>
>>>
>>>---------------------------------------------------------------------
>>>To unsubscribe, e-mail: user-unsubscribe@struts.apache.org
>>>For additional commands, e-mail: user-help@struts.apache.org
>>>
>>>
>>
>>
>>--
>>A bus station is where a bus stops. A train station is where a train
>>stops. On my desk I have a work station...
>>
>>
>>
>>---------------------------------------------------------------------
>>To unsubscribe, e-mail: user-unsubscribe@struts.apache.org
>>For additional commands, e-mail: user-help@struts.apache.org
>>
>>
> 
> 
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: user-unsubscribe@struts.apache.org
> For additional commands, e-mail: user-help@struts.apache.org
> 
> 
> 
> 
> 



---------------------------------------------------------------------
To unsubscribe, e-mail: user-unsubscribe@struts.apache.org
For additional commands, e-mail: user-help@struts.apache.org


Mime
View raw message