Dennis Payne wrote:
If you are running Linux or Unix check the syntax for the 'nice'
command.
[EMAIL PROTECTED] 12-27-2004 18:55 >>>
Frank W. Zammetti wrote:
It's interesting, Craig and I had an exchange about threads in
servlet
containers last week... I can't find a link to the thread
unfortunately.
Anyway, the basic idea behind that "don't spawn your own threads
inside a servlet container" admonishment is based more on the fact
that it's quite easy to screw up doing so, more than it has to do
with
virtually anything else.
You want the servlet container to manager resources for you, and you
lose that by spawning your own threads. The container isn't aware of
the threads, so it can't control them for things like graceful
shutdowns or simply trying to control resource utilization. Many
people, including me, tend to ignore that warning when the situation
warrants it, but you have to be extra-careful.
For instance, you don't under any circumstances want to hold on to
references to response, request or session objects because you don't
manage them. You also, unless you really have a need and know what
your doing, want to spawn threads to handle requests at all. Any
threads you do spawn in a container should tend to be independent
units of execution. If your use case fits that description, you can
get away with it relatively safely.
That being said, spawning things like daemon threads for low-level
behind-the-scenes type processing is generally OK, so long as you are
careful (i.e., be sure no runaway processing can occur, make sure it
will shut down gracefully, etc). You might be able to use something
like that in this case, you'll have to decide. If your using Struts,
you can spawn the thread from a plug-in, as I've done in the past,
but
there are non-Struts equivalents (worse comes to worse, just do it in
a servlet.init()). Do yourself a favor and make the thread
processing
functional independent of your app essentially, and even make it so
it's not aware it's running in a servlet container. But again,
caution is the key. If you make it a demon thread and set it's
priority as low as you can and be sure to not hold on to a reference
to it, I've found that works just fine under a number of app servers
on a numeber of OSs.
The bottom-line is that really that psuedo-rule is around because
people tend to shoot themselves in the foot when using threads a bit
too often, so better to advise against getting into a situation where
you might do that. But, if your confident in your ability, and
believe the use case really warrants it, you CAN do it, and
relatively
safely.
Frank,
I'm using threads and didn't know I was vulnerable. Here's how I've
done it. I created a class that implements runnable and call its
initialize method from a servlet init method at application startup.
The initialize method creates a thread and sets a low priority for it.
The run method sleeps the thread and wakes it every two minutes.
A processing class contains the methods that queries the database
(postgres).
1. Is this what you call a daemon thread?
2. Is this better done using cron? if so how do I ensure that it runs
with a lower priority than my application code?
Phil
---------------------------------------------------------------------
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]
Will do, thanks Dennis.
Phil
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]