Hi,
in GeoTools we have a number of thread locals used
here and there for different purposes.

In general the reason to have a thread local boils
down to the same two needs:
- you have a non thread safe object that is expensive
   to create and that is used over and over in normal
   operation, meaning that, for example, a data access
   or a rendering operation will use it over and over,
   but in a way that does not make it easy to keep
   it around unless it's attached to the thread
   (think filter functions using number/date formatters,
   for example)
- you actually need different threads to see a different
   set of values. This is what the env function does,
   it has a "local map" that provides a per thread
   enviroment (useful in web servers, where each thread
   is a different request)

The main problem with thread locals is that they need
to be cleaned up to avoid "normal" memory leaks and to guarantee
the proper undeploy of web applications (a thread local
wil prevent the webapp from being removed from the permanent
generation causing a second kind of memory leak).

So you need some lifecycle management,
and in theory you'd need one for each thread local around.

Which is definitely not feasible, atm we have thrad locals
in referencing, in the env function, and in the postgis
dialect, and I'd like to add one in the formatting functions
as well. How is a web application going to be aware of
all the thread locals around?

So here is the idea: one thread local to rule them all.
We could add this at the GeoTools class level:

Object GeoTools.getThreadLocal(Class clazz);
Object GeoTools.setThreadLocal(Class clazz, Object value);
Object GeoTools.removeThreadLocal(Class clazz);
void GeoTools.removeThreadLocals();

There would be only one thread local, which is a map keyed
from the class that needs the thread local to the value,
all managed by the GeoTools class.

At this point all a web application needs to do is to add a
servlet filter calling on removeThreadLocals() and the
shared map would be removed from the thread.

What do you think?

Cheers
Andrea

-- 
Andrea Aime
OpenGeo - http://opengeo.org
Expert service straight from the developers.


------------------------------------------------------------------------------
This SF.net email is sponsored by 

Make an app they can't live without
Enter the BlackBerry Developer Challenge
http://p.sf.net/sfu/RIM-dev2dev 
_______________________________________________
Geotools-devel mailing list
Geotools-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/geotools-devel

Reply via email to