geronimo-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Aaron Mulder <ammul...@alumni.princeton.edu>
Subject Re: Connector Work ClassLoader
Date Sun, 03 Oct 2004 19:21:03 GMT
	Okay, I give.  :)

Aaron

On Sun, 3 Oct 2004, Dain Sundstrom wrote:
> On Oct 3, 2004, at 11:56 AM, Aaron Mulder wrote:
> 
> > On Sun, 3 Oct 2004, David Jencks wrote:
> >> At the moment, the only way I see to implement this would be to supply
> >> a separate WorkManager instance to each ResourceAdapter that could
> >> associate the RA classloader with the work request.
> >
> > 	Couldn't the implementation go like this (in WorkerContext.run):
> >
> >
> > ClassLoader before = Thread.currentThread().getContextClassLoader();
> > try {
> >     Thread.currentThread().setContextClassLoader(adaptee.getClass().
> >         getClassLoader());
> >     ...
> >     adaptee.run();
> >     ...
> > } finally {
> >     Thread.currentThread().setContextClassLoader(before);
> > }
> 
> That won't work.  The adaptee class may be loaded from a parent class 
> loader of the actual ra, which in my opinion would be actually worse 
> then having a null TCCL.
> 
> > 	The speed issue, well, I guess that's a more significant problem.
> > If it's not slow to *read* the TCCL, we may want to do something like 
> > the
> > above as a defensive measure -- reset the TCCL to the proper one if the
> > Work changes it without changing it back.  So we'd only record the
> > existing (or desired) CL before invoking adaptee.run, and we'd put an
> > "if(Thread.cT().getCCL() != before)" before resetting it in the finally
> > clause.
> 
> Both operations are expensive.  Of course dropping it from 3 operations 
> to 1 is better, but the general policy of geronimo is to only set the 
> TCCL is absolutely required by a specification (for example we set it 
> for EJBs).
> 
> -dain
> 
> 

Mime
View raw message