could you elaborate a bit more why do you need the classloader to be per thread?
In case that you really really need your own classloader for _some_
objects, why don't you create a global classloader and load only those
classes from it? why replace thread-classloader back and forth?

regards
Leon

On 8/5/07, Johnny Kewl <[EMAIL PROTECTED]> wrote:
>     public void doPost(HttpServletRequest request, HttpServletResponse 
> response)
>     throws ServletException, IOException {
>
>        //=======new DoServiceClass().doService(request, response)========
>
>         ClassLoader origClassLoader = 
> Thread.currentThread().getContextClassLoader();
>         ExClassLoader localClassLoader = new ExClassLoader(origClassLoader);
>         String repository = dock.getRepository();
>         localClassLoader.setRepository(repository);
>         Thread.currentThread().setContextClassLoader(localClassLoader);
>
>         doServiceMain(request, response);
>
>         Thread.currentThread().setContextClassLoader(origClassLoader);
>       //======================================================
>
>     }
>
> This snippet of code is actually wrapped in new 
> DoServiceClass().doService(request, response) for thread safety reasons.
> ie in doPost.... this is called       new DoServiceClass().doService(request, 
> response);
> But its shown as above because its "easier" to appreciate the complexity of 
> whats actually happening.
>
> What is does is swap Tomcats classloader, to an Extended class loader... on 
> every thread.... and then after processing the thread gives TC its own class 
> loader back.
> It seems to work, but its seriously complex stuff, I'm building a per thread 
> container on top of TC's container, and I'm wondering if this is the right 
> way to do it.
> More I think about this...... more confused I get....
>
> From a "pure" coding point of view.... it is thread safe, but I wonder how 
> tomcat deals with its classloader being reassigned on every thread.
> Any comments on whether you think this is the right or wrong way... 
> appreciated... thx
>
>
> Just a comment....
> From playing with classloaders, one thing I've found is that if you want to 
> test how good an underlying containers classloader is, make it run an 
> application that uses its own classloaders.... case in point, WebStart fails 
> miserably when you do this.
> Tomcat seems to be rock solid, during testing sometimes this app I'm building 
> has 20 different classloaders open in the webapp, and as you can see, another 
> classloader per thread, and in some cases stacked parent child 
> classloaders..... TC is rock solid.
>
> If you wondering why I need my own classloader at thread level, its because 
> this application does things like serialize objects and special http RMI.... 
> the serialization of objects from client to server and back to client is why 
> I need it.... if I serialize on the WebApps class loader, and provide the 
> object template from my class loader, the object will never release from my 
> class loader.... I'm actually not sure why this is.... but it seems that if 
> the code is run from classes in one classloader, and the template object is 
> provided from another.... theres a cross classloader dependency that prevents 
> garbage collection....probably because TC's classloader is picking up the 
> Serializable interface, and the object doesnt come from the same 
> classloader..... thus the need to do the above.... Tomcat at the extreme ;)
>
> So, what do you think... ok... or crazy ;)
>
> ________________________________________________________________
>
> Johnny Kewl
>   eMail: John<No Spam>kewlstuff.co.za  -- replace <No Spam> with @ --
>   Cell: +027-72- 473-9331
> Java Developer (Tomcat Aficionado)
>   Free Tomcat software at  http://coolese.100free.com/
> ________________________________________________________________

---------------------------------------------------------------------
To start a new topic, e-mail: users@tomcat.apache.org
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to