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]