Interesting!  Thanks.

Jack


On Tue, 07 Dec 2004 01:15:13 -0500, Erik Weber <[EMAIL PROTECTED]> wrote:
> This is covered by JMX. For example, see javax.management.timer.Timer
> (which can be initialized/destroyed by a ServletContextListener). The
> idea is that you can schedule asynchronous operations but leave the
> Threads to be managed by the server.
> 
> JBoss supports this but I haven't had any luck determining if Tomcat has
> any support in this area. WebLogic appears to have superior support in
> this area.
> 
> Erik
> 
> 
> 
> 
> Andrew Hill wrote:
> 
> > <snip>
> > DON'T spawn threads inside a servlet container unless you really, REALLY
> > have to. It'll tend to save you headaches more times than not. But if
> > you gotta do it, do it with care :)
> > </snip>
> >
> > Or as they say "dont try this at home kids" :-)
> >
> > <snip>
> > a policy that prohibits them. (For example,
> > if I was running an ISP hosting service, that's something I would
> > almost certainly restrict.)
> > <snip>
> > That's an excellent point... especially for someone developing an app
> > that they intend to deploy to a shared environment
> > </snip>
> > </snip>
> >
> > Which leads me to wonder how one does scheduled jobs in such an
> > environment? Would this be a technique that is specific to the host in
> > question?
> >
> >
> > Frank W. Zammetti wrote:
> >
> >> Craig McClanahan wrote:
> >>
> >>> You might be thinking of the J2EE platform spec, which identifies some
> >>> of the issues with threads in EJB containers, or when you're trying to
> >>> use transactions. The servlet spec describes a bunch of things that
> >>> are either likely to or guaranteed to not work when you deal with
> >>> multiple threads in the context of a single request.
> >>
> >>
> >>
> >> That sounds like it, but I'm admittedly working from fuzzy
> >> half-memories... reading the big specs isn't something I tend to do
> >> as a hobby :)
> >>
> >>> It is. Who ever said that "popular" and "a good idea" were always
> >>> synoymous? :-)
> >>
> >>
> >>
> >> Certainly not me :)
> >>
> >>> It's also the case that a very large number of webapps are installed
> >>> on standalone servlet containers like Tomcat, which don't enforce the
> >>> "no threads" restriction unless you configure them to run a security
> >>> manager, and then provide a policy that prohibits them. (For example,
> >>> if I was running an ISP hosting service, that's something I would
> >>> almost certainly restrict.)
> >>
> >>
> >>
> >> That's an excellent point... especially for someone developing an app
> >> that they intend to deploy to a shared environment, they definitely
> >> want to keep this in mind.
> >>
> >>> Just out of curiousity, how do ensure that the threads are ever shut
> >>> down correctly?
> >>
> >>
> >>
> >> I frankly don't. Because of the nature of these threads, they can die
> >> inelegantly with no problem (unless the server goes down WHILE they
> >> are processing, but I'm sure that's true of any thread). They are
> >> like scheduled tasks really, one fires once a day, on fires once an
> >> hour, etc. But because they make use of a lot of business logic from
> >> the app, logic that isn't exposed any other way, making them daemon
> >> threads made sense (we also get to use the connection pool already
> >> established for the app, and some other minor resources that only
> >> exist when the app is running). These threads don't service requests
> >> in any way, they do periodic processing (one ages records according
> >> to some complex business rules, another re-sends non-time-critical
> >> asynchronous messages to a mainframe-based system if the message had
> >> previously failed, things like that).
> >>
> >>> Are there any controls to ensure that other parts of
> >>> your app won't hang forever waiting for a response from such a thread?
> >>> Are there any places where you pass in a servlet request or session
> >>> object to another thread (even as a parameter to a method that returns
> >>> synchronously)? Are you assuming that you can propogate transaction
> >>> context across threads (most implementations use a thread local
> >>> variable to store this context, so passing a message to a new thread
> >>> will typically *not* have the same transaction privileges as the old
> >>> one).
> >>
> >>
> >>
> >> As per my last comment, they aren't servicing requests, so these
> >> points don't apply in this particular case. Good points to be sure
> >> though.
> >>
> >>> If you're not having any of those problems, you're probably fine ...
> >>> that's only the things to watch out for I thought of in the time it
> >>> took me to type the paragraph (there's undoubtedly a bunch more).
> >>
> >>
> >>
> >> Isn't there always with threading? :) Anyone that has done anything
> >> even remotely non-trivial with threads has inevitably run into
> >> troubles at some point, it's just the nature of the beast.
> >>
> >>> Threads are a powerful problem solving technique, for the right kinds
> >>> of problems. It's just that the exercise of power also comes with
> >>> associated responsibility to understand what you're doing, and what
> >>> you shouldn't do, with your powers :-).
> >>
> >>
> >>
> >> Yes, what he said! :)
> >>
> >> >>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 :) )
> >>>>
> >>>
> >>>
> >>> There isn't going to be universally applicabe answers to that question
> >>> -- it's going to depend a lot on things like whether you're running in
> >>> a container that supports this (some containers might support
> >>> appication-spawned threads as a value-add feature with extra help to
> >>> avoid or solve some of teh problems), what your use case is, what else
> >>> is going on in the same container, what your security policies are,
> >>> how skilled your developers are, ...
> >>>
> >>> It's hard to give relevant general answers on a question like this.
> >>>
> >>> But I would tend to worry less when the number of users is small, the
> >>> amount of available CPU and memory is large, and your developers have
> >>> done some basic study on threading and/or you have somebody who
> >>> understands this stuff doing code reviews.
> >>
> >>
> >>
> >> Of all those, the skill of the developer tends to matter most
> >> (assuming us architects haven't speced out something ridiculous that
> >> is). At least, that's been my experience.
> >>
> >> I agree that a general answer to this question is near impossible,
> >> but I'll take a stab at in anyway...
> >>
> >> DON'T spawn threads inside a servlet container unless you really,
> >> REALLY have to. It'll tend to save you headaches more times than not.
> >> But if you gotta do it, do it with care :)
> >>
> >> (Am I the King of simplistic double-talk or what?!?)
> >>
> >> Frank W. Zammetti
> >> Founder and Chief Software Architect
> >> Omnytex Technologies
> >> http://www.omnytex.com
> >>
> >>> 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 <[EMAIL PROTECTED]> 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, [EMAIL PROTECTED]
> >>>>>>
> >>>>>>
> >>>>>> <[EMAIL PROTECTED]> 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"
> >>>>>>> <[EMAIL PROTECTED] To: "Struts Users Mailing List"
> >>>>>>> <[EMAIL PROTECTED]>,
> >>>>>>> m> [EMAIL PROTECTED]
> >>>>>>> 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:[EMAIL PROTECTED]
> >>>>>>>> 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 <[EMAIL PROTECTED]>
> >>>>>>>> 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
> >>>>>>>>
> >>>>>>>>
> >>>>>>>>
> >>>>>>>> <[EMAIL PROTECTED]> 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: [EMAIL PROTECTED]
> >>>>>>>>>> For additional commands, e-mail: [EMAIL PROTECTED]
> >>>>>>>>>>
> >>>>>>>>>>
> >>>>>>>>>
> >>>>>>>>>
> >>>>>>>>> --
> >>>>>>>>> http://www.revoltingdigits.com
> >>>>>>>>> https://jestate.dev.java.net
> >>>>>>>>>
> >>>>>>>>
> >>>>>>>>
> >>>>>>>> --
> >>>>>>>> http://www.revoltingdigits.com
> >>>>>>>> https://jestate.dev.java.net
> >>>>>>>>
> >>>>>>>> ---------------------------------------------------------------------
> >>>>>>>>
> >>>>>>>> To unsubscribe, e-mail: [EMAIL PROTECTED]
> >>>>>>>> For additional commands, e-mail: [EMAIL PROTECTED]
> >>>>>>>>
> >>>>>>>>
> >>>>>>>
> >>>>>>> ---------------------------------------------------------------------
> >>>>>>>
> >>>>>>> To unsubscribe, e-mail: [EMAIL PROTECTED]
> >>>>>>> For additional commands, e-mail: [EMAIL PROTECTED]
> >>>>>>>
> >>>>>>>
> >>>>>>> ------------------------------------------------------------------------------
> >>>>>>>
> >>>>>>> **********
> >>>>>>> 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: [EMAIL PROTECTED]
> >>>>>>> For additional commands, e-mail: [EMAIL PROTECTED]
> >>>>>>>
> >>>>>>>
> >>>>>>
> >>>>>>
> >>>>>> --
> >>>>>> 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: [EMAIL PROTECTED]
> >>>>>> For additional commands, e-mail: [EMAIL PROTECTED]
> >>>>>>
> >>>>>>
> >>>>>
> >>>>>
> >>>>> ---------------------------------------------------------------------
> >>>>
> >>>>
> >>>>
> >>>>
> >>>>> To unsubscribe, e-mail: [EMAIL PROTECTED]
> >>>>> For additional commands, e-mail: [EMAIL PROTECTED]
> >>>>>
> >>>>>
> >>>>>
> >>>>>
> >>>>>
> >>>>
> >>>> ---------------------------------------------------------------------
> >>>> To unsubscribe, e-mail: [EMAIL PROTECTED]
> >>>> For additional commands, e-mail: [EMAIL PROTECTED]
> >>>>
> >>>>
> >>>
> >>>
> >>>
> >>>
> >>>
> >>
> >
> >
> > ---------------------------------------------------------------------
> > To unsubscribe, e-mail: [EMAIL PROTECTED]
> > For additional commands, e-mail: [EMAIL PROTECTED]
> >
> >
> 
> ---------------------------------------------------------------------
> 
> 
> To unsubscribe, e-mail: [EMAIL PROTECTED]
> For additional commands, e-mail: [EMAIL PROTECTED]
> 
> 


-- 


"You can't wake a person who is pretending to be asleep."

~Native Proverb~

"Each man is good in His sight. It is not necessary for eagles to be crows."

~Hunkesni (Sitting Bull), Hunkpapa Sioux~

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to