I’ve been looking for a while for such sort of information but i couldn’t find a clear answer.
What exact mechanism application servers use to execute several (web)applications isolated?
For instance how do they manage static fields isolation?
I can imagine several solutions:
- isolation API;
- bootstrapping;
- tricks with class loaders (using thread context class loader);
- running several jvm instances.
But what do they use in reality?
To separate applications, application servers indeed use separate ClassLoaders to distinguish classes (and their static fields) from each other.
JBoss for example is using a Unified Class Loader (UCL) since v4.