Hi, Endre... Thank you for your answer...

I have noted that for a single request, the server use
a single thread (as you said), but for different
requests on the same session, the server could use
different threads...

But the solution you wrote is quite useful... I
think... I'll try something like this.

Anyway, I've tried another solution, not so elegant...
Using an attribute for a Logger subclass, for saving a
context, and a Layout subclass for printing it...

Not so good... 

Thanks again!


 --- Endre Stølsvik <[EMAIL PROTECTED]> escribió:

> On Thu, 16 Feb 2006, Raul Carazo wrote:
> 
> | Maybe there is an answer to my question but... If
> so,
> | please, refer me to it.
> | 
> | Both NDC and MDC works on a thread, so if you
> create
> | another logger in another thread, you'll noy see
> the
> | value you had set before...
> | 
> | Some servers, like Weblogic, uses several threads,
> so
> | it's possible that you don't take the same thread
> in
> | your  web Session.
> 
> Where do they use several threads? You are
> guaranteed that in the same 
> method-invocation, e.g. doPost(), obviously just one
> thread will do the 
> run.
> 
> If however you go outside that thread, by invoking
> some other resource, or 
> using some worker-pool, you're obviously out of luck
> on that approach. I 
> guess you'll basically have to send along some
> context-object that enable 
> you to bind back to the original requestor.
> 
> | 
> | I'd like to set a value (id of the person in
> session)
> | for a HttpSession, not a thread. IS it possible???
> 
> I do something along the lines of this: I have a
> super-servlet that 
> implements the service() method, fetches the
> httpsession, fetches the id, 
> shoves it into the NDC, going into a try-finally
> block, doing 
> super.service (or call some "specialService()"
> method instead), and in the 
> finally block, i do NDC.remoce().
> 
> Note the -remove- call. It shouldn't have been
> necessary (.clear() should 
> have been sufficient), but the NDC as it stands has
> implemented this in a 
> very strange, inefficient and bad way: instead of
> using a ThreadLocal, 
> they use "their own" synchronized-hitting
> threadlocal implementation. If 
> you don't call remove, _your application_ will never
> be fully freed from 
> the thread, and you can utterly forget reloading in
> e.g. tomcat. That 
> added to the fact that this implementation is very
> costly compared to the 
> real ThreadLocal: synching.
> 
> _However_, the new java threadlocal (from java 1.3)
> have another problem: 
> it very often cause stale data in servlet containers
> that recycle their 
> threads when reloading an application (as they all
> do), and you're back at 
> the beginning. However, this is not as bad as
> forgetting to do .remove() 
> on the current log4j impl, as that will -keep the
> thread object- around 
> forever.
> 
> If you don't like psycho memory leaks; check out,
> and vote for, this bug:
>  
>
http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6254531
> 
> Some background for that bug:
>  
>
http://www.jroller.com/page/tackline?entry=fixing_threadlocal
> 
> Basically: an object of a class from the webapp
> which is held in a 
> threadlocal, will hold a reference to its class,
> which holds a reference 
> to its classloader, which again holds a reference to
> all classes loaded by 
> that loader, which means that all statics in all
> those classes will be 
> "reachable gc-roots", which means that all objects
> they point to will be 
> held. If such a static is a ThreadLocal (which is
> often the way 
> threadlocals are used), you're screwed: the Thread
> will end up holding 
> your entire web application inside one or several
> entries in its 
> threadlocal map, and won't ever let go.
> 
> Regards
> Endre.
> 
>
---------------------------------------------------------------------
> To unsubscribe, e-mail:
> [EMAIL PROTECTED]
> For additional commands, e-mail:
> [EMAIL PROTECTED]
> 
> 



                
______________________________________________ 
LLama Gratis a cualquier PC del Mundo. 
Llamadas a fijos y móviles desde 1 céntimo por minuto. 
http://es.voice.yahoo.com

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

Reply via email to