Deregister all JDBC drivers loaded by the WebappClassloader on context
shutdown to avoid a memory leak.
Special handling is needed for the mysql JDBC driver as the
AbandonedConnectionCleanupThread must be shut down manually before the
driver is deregistered.
The whole shutdown process is done with reflections to avoid dependencies
to non existing JDBC drivers.
Shutdown the sessions cleanup thread
Cancel the timer thread on context shutdown to stop the session cleanup of
a non existing web application and to avoid a memory leak
Get rid of the usage of the java preferences system
The usage of the preferences system has some drawbacks:
- Storing the preferences in the users context lead to undefined behavior
when there are multiple instances of mainzelliste with different
configurations running in the same JVM or as the same system user.
- Implementations of the preferences system might use resources that cannot
be freed throw the API and causing memory leaks when used within web
application (e.g. On Linux the implementation starts a synchronizer
thread that keeps the prefs-Files up to date. This thread can only be
stopped by a JVM shutdown)
This fix eliminates the use of the preferences system at all. To simulate
the hierarchical access to configuration properties the fix introduces the
helper class PropertyIterator that can be used to iterate over properties.
Cleanup the shutdown process of the persistor class
Make use of the servlet API 3.0 to get the webapp classloader and harden
the classloader matching
Use the Initializer class to also handle context shutdowns