[ http://issues.apache.org/jira/browse/JCR-245?page=all ] Jukka Zitting closed JCR-245: -----------------------------
> 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 > Assignee: Jukka Zitting > Fix For: 1.0 > Attachments: TransientRepository.patch > > 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