geronimo-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Dain Sundstrom <dsundst...@gluecode.com>
Subject Re: Connector Work ClassLoader
Date Sun, 03 Oct 2004 18:53:25 GMT
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