X-Git-Url: https://git.argeo.org/?a=blobdiff_plain;f=server%2Fruntime%2Forg.argeo.server.jackrabbit%2Fsrc%2Fmain%2Fjava%2Forg%2Fargeo%2Fjackrabbit%2FJackrabbitContainer.java;h=3b83941cfade149844b768a15dc56e1c6d4e4269;hb=ada93169e85b906c38407f02514edde1dc193503;hp=c897b6bea92686774dfc4eaebf489dcc67d32567;hpb=5ef1b4fb2deec11d15aa8943cb30bd2bb4e888ae;p=lgpl%2Fargeo-commons.git diff --git a/server/runtime/org.argeo.server.jackrabbit/src/main/java/org/argeo/jackrabbit/JackrabbitContainer.java b/server/runtime/org.argeo.server.jackrabbit/src/main/java/org/argeo/jackrabbit/JackrabbitContainer.java index c897b6bea..3b83941cf 100644 --- a/server/runtime/org.argeo.server.jackrabbit/src/main/java/org/argeo/jackrabbit/JackrabbitContainer.java +++ b/server/runtime/org.argeo.server.jackrabbit/src/main/java/org/argeo/jackrabbit/JackrabbitContainer.java @@ -115,6 +115,7 @@ public class JackrabbitContainer implements Repository, ResourceLoaderAware { /** Actually creates a new repository. */ protected void createJackrabbitRepository() { + long begin = System.currentTimeMillis(); try { // remote repository if (uri != null && !uri.trim().equals("")) { @@ -122,7 +123,7 @@ public class JackrabbitContainer implements Repository, ResourceLoaderAware { params.put( org.apache.jackrabbit.commons.JcrUtils.REPOSITORY_URI, uri); - repository = (JackrabbitRepository) new Jcr2davRepositoryFactory() + repository = new Jcr2davRepositoryFactory() .getRepository(params); if (repository == null) throw new ArgeoException("Remote Davex repository " + uri @@ -161,8 +162,10 @@ public class JackrabbitContainer implements Repository, ResourceLoaderAware { else repository = RepositoryImpl.create(repositoryConfig); - log.info("Initialized Jackrabbit repository " + repository + " in " - + getHomeDirectory() + " with config " + configuration); + double duration = ((double) (System.currentTimeMillis() - begin)) / 1000; + log.info("Initialized Jackrabbit repository in " + duration + + " s, home: " + getHomeDirectory() + ", config: " + + configuration); } catch (Exception e) { throw new ArgeoException("Cannot create Jackrabbit repository " + getHomeDirectory(), e); @@ -171,6 +174,10 @@ public class JackrabbitContainer implements Repository, ResourceLoaderAware { /** Executes migrations, if needed. */ protected void migrate() { + // No migration to perform + if (dataModelMigrations.size() == 0) + return; + Boolean restartAndClearCaches = false; // migrate data @@ -228,31 +235,16 @@ public class JackrabbitContainer implements Repository, ResourceLoaderAware { /** Lazy init. */ protected File getHomeDirectory() { - return homeDirectory; - // if (home != null) - // return home; - // - // try { - // String osgiData = System.getProperty("osgi.instance.area"); - // if (osgiData != null) - // osgiData = osgiData.substring("file:".length()); - // String path; - // if (homeDirectory == null) - // path = "./jackrabbit"; - // else - // path = homeDirectory; - // if (path.startsWith(".") && osgiData != null) { - // home = new File(osgiData + '/' + path).getCanonicalFile(); - // } else - // home = new File(path).getCanonicalFile(); - // return home; - // } catch (Exception e) { - // throw new ArgeoException("Cannot define Jackrabbit home based on " - // + homeDirectory, e); - // } + try { + return homeDirectory.getCanonicalFile(); + } catch (IOException e) { + throw new ArgeoException("Cannot get canonical file for " + + homeDirectory, e); + } } public void dispose() throws Exception { + long begin = System.currentTimeMillis(); if (repository != null) { if (repository instanceof JackrabbitRepository) ((JackrabbitRepository) repository).shutdown(); @@ -270,11 +262,13 @@ public class JackrabbitContainer implements Repository, ResourceLoaderAware { + getHomeDirectory()); } + double duration = ((double) (System.currentTimeMillis() - begin)) / 1000; if (uri != null && !uri.trim().equals("")) log.info("Destroyed Jackrabbit repository with uri " + uri); else - log.info("Destroyed Jackrabbit repository " + repository + " in " - + getHomeDirectory() + " with config " + configuration); + log.info("Destroyed Jackrabbit repository in " + duration + + " s, home: " + getHomeDirectory() + ", config " + + configuration); } /** @@ -365,15 +359,15 @@ public class JackrabbitContainer implements Repository, ResourceLoaderAware { // JCR REPOSITORY (delegated) public String getDescriptor(String key) { - return repository.getDescriptor(key); + return getRepository().getDescriptor(key); } public String[] getDescriptorKeys() { - return repository.getDescriptorKeys(); + return getRepository().getDescriptorKeys(); } public Session login() throws LoginException, RepositoryException { - Session session = repository.login(); + Session session = getRepository().login(); processNewSession(session); return session; } @@ -383,7 +377,7 @@ public class JackrabbitContainer implements Repository, ResourceLoaderAware { RepositoryException { Session session; try { - session = repository.login(credentials, workspaceName); + session = getRepository().login(credentials, workspaceName); } catch (NoSuchWorkspaceException e) { if (autocreateWorkspaces) session = createWorkspaceAndLogsIn(credentials, workspaceName); @@ -396,7 +390,7 @@ public class JackrabbitContainer implements Repository, ResourceLoaderAware { public Session login(Credentials credentials) throws LoginException, RepositoryException { - Session session = repository.login(credentials); + Session session = getRepository().login(credentials); processNewSession(session); return session; } @@ -405,7 +399,7 @@ public class JackrabbitContainer implements Repository, ResourceLoaderAware { NoSuchWorkspaceException, RepositoryException { Session session; try { - session = repository.login(workspaceName); + session = getRepository().login(workspaceName); } catch (NoSuchWorkspaceException e) { if (autocreateWorkspaces) session = createWorkspaceAndLogsIn(null, workspaceName); @@ -416,6 +410,17 @@ public class JackrabbitContainer implements Repository, ResourceLoaderAware { return session; } + /** Wraps access to the repository, making sure it is available. */ + protected Repository getRepository() { + if (repository == null) { + throw new ArgeoException( + "No repository initialized." + + " Was the init() method called?" + + " The dispose() method should also be called on shutdown."); + } + return repository; + } + protected synchronized void processNewSession(Session session) { try { NamespaceHelper namespaceHelper = new NamespaceHelper(session); @@ -433,10 +438,10 @@ public class JackrabbitContainer implements Repository, ResourceLoaderAware { String workspaceName) throws RepositoryException { if (workspaceName == null) throw new ArgeoException("No workspace specified."); - Session session = repository.login(credentials); + Session session = getRepository().login(credentials); session.getWorkspace().createWorkspace(workspaceName); session.logout(); - return repository.login(credentials, workspaceName); + return getRepository().login(credentials, workspaceName); } public void setResourceLoader(ResourceLoader resourceLoader) { @@ -444,19 +449,19 @@ public class JackrabbitContainer implements Repository, ResourceLoaderAware { } public boolean isStandardDescriptor(String key) { - return repository.isStandardDescriptor(key); + return getRepository().isStandardDescriptor(key); } public boolean isSingleValueDescriptor(String key) { - return repository.isSingleValueDescriptor(key); + return getRepository().isSingleValueDescriptor(key); } public Value getDescriptorValue(String key) { - return repository.getDescriptorValue(key); + return getRepository().getDescriptorValue(key); } public Value[] getDescriptorValues(String key) { - return repository.getDescriptorValues(key); + return getRepository().getDescriptorValues(key); } // BEANS METHODS