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
>
>