Automatic repository shutdown
-----------------------------
Key: JCR-245
URL: http://issues.apache.org/jira/browse/JCR-245
Project: Jackrabbit
Type: New Feature
Components: core
Reporter: Jukka Zitting
Currently Jackrabbit relies on two mechanisms for safely shutting down a
repository:
1) client application invoking RepositoryImpl.shutdown(), or
2) the shutdown hook installed by RepositoryImpl being run
Both of these mechanisms have problems:
1) The shutdown() method is not a part of the JCR API, thus making the
client application depend on a Jackrabbit-specific feature
2) In some cases the shutdown hook is not properly run (see issues JCR-120
and JCR-233)
I think the JCR spec thinks of the Repository and Session interfaces as being
somewhat similar to the JDBC DataSource and Connection interfaces. The
Repository instances have no real lifecycle methods while the Session instances
have clearly specified login and logout steps. (DataSource.getConnection() =
Repository.login(), Session.logout() = Connection.close()) However the
Jackrabbit implementation defines an explicit lifecycle for the RepositoryImpl
instances.
This causes problems especially for container environments (JNDI, Spring) where
it is hard or even impossible to specify a shutdown mechanism for resource
factories like the Repository instances. The current solution for such
environments is to use a shutdown hook, but as reported this solution does not
work perfectly in all cases.
How about if we bound the RepositoryImpl lifecycle to the lifecycles of the
instantiated Sessions. A RepositoryImpl instance could initialize (and lock)
the repository when the first session is opened and automatically shut down
when the last session has logged out. As long as the sessions are properly
logged out (or finalized by the garbage collector) there would be no need for
an explicitly RepositoryImpl.shutdown() call. The current behaviour of
pre-initializing the repository and shutting down during a shutdown hook could
be enabled with a configuration option for environments (like global JNDI
resources) in which the shutdown hooks work well.
--
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators:
http://issues.apache.org/jira/secure/Administrators.jspa
-
For more information on JIRA, see:
http://www.atlassian.com/software/jira