package play.modules.cream; import javax.jcr.RepositoryException; import javax.jcr.Session; import javax.jcr.UnsupportedRepositoryOperationException; import javax.jcr.observation.ObservationManager; import javax.jcr.query.QueryManager; import javax.jcr.version.VersionManager; import play.inject.Injector; public class JCR { private static ThreadLocal<JcrSessionSource> sessionSource = new ThreadLocal<JcrSessionSource>(); public static void closeSession() { JcrSessionSource currentSessionSource = sessionSource.get(); if (currentSessionSource != null) { currentSessionSource.close(); sessionSource.set(null); } } public static ObservationManager getObservationManager() throws RepositoryException { return getSession().getWorkspace().getObservationManager(); } public static QueryManager getQueryManager() throws RepositoryException { return getSession().getWorkspace().getQueryManager(); } public static Session getSession() { return sessionSource.get().getBeanOfType(Session.class); } public static VersionManager getVersionManager() throws UnsupportedRepositoryOperationException, RepositoryException { return getSession().getWorkspace().getVersionManager(); } static void addSession(Session currentSession) { sessionSource.set(new JcrSessionSource(currentSession)); Injector.inject(sessionSource.get()); } private JCR() { } }