]> git.argeo.org Git - lgpl/argeo-commons.git/blobdiff - server/runtime/org.argeo.server.jackrabbit/src/main/java/org/argeo/jackrabbit/JackrabbitContainer.java
Improve RCP
[lgpl/argeo-commons.git] / server / runtime / org.argeo.server.jackrabbit / src / main / java / org / argeo / jackrabbit / JackrabbitContainer.java
index c897b6bea92686774dfc4eaebf489dcc67d32567..3b83941cfade149844b768a15dc56e1c6d4e4269 100644 (file)
@@ -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