X-Git-Url: https://git.argeo.org/?a=blobdiff_plain;f=server%2Fruntime%2Forg.argeo.server.jackrabbit%2Fsrc%2Fmain%2Fjava%2Forg%2Fargeo%2Fjackrabbit%2FJackrabbitDataModelMigration.java;fp=server%2Fruntime%2Forg.argeo.server.jackrabbit%2Fsrc%2Fmain%2Fjava%2Forg%2Fargeo%2Fjackrabbit%2FJackrabbitDataModelMigration.java;h=fd8d4441243eb36fb977921413c8c163e3a8054d;hb=5ef1b4fb2deec11d15aa8943cb30bd2bb4e888ae;hp=37d852907adb741d49ea0ff44222ada2c070f75a;hpb=eb8cb996987db9201d53b6e59791b1dcde30be94;p=lgpl%2Fargeo-commons.git diff --git a/server/runtime/org.argeo.server.jackrabbit/src/main/java/org/argeo/jackrabbit/JackrabbitDataModelMigration.java b/server/runtime/org.argeo.server.jackrabbit/src/main/java/org/argeo/jackrabbit/JackrabbitDataModelMigration.java index 37d852907..fd8d44412 100644 --- a/server/runtime/org.argeo.server.jackrabbit/src/main/java/org/argeo/jackrabbit/JackrabbitDataModelMigration.java +++ b/server/runtime/org.argeo.server.jackrabbit/src/main/java/org/argeo/jackrabbit/JackrabbitDataModelMigration.java @@ -1,6 +1,5 @@ package org.argeo.jackrabbit; -import java.io.File; import java.io.InputStreamReader; import java.io.Reader; @@ -11,6 +10,7 @@ import org.apache.commons.io.IOUtils; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.apache.jackrabbit.commons.cnd.CndImporter; +import org.apache.jackrabbit.core.config.RepositoryConfig; import org.argeo.ArgeoException; import org.argeo.jcr.ArgeoNames; import org.argeo.jcr.JcrCallback; @@ -35,17 +35,17 @@ public class JackrabbitDataModelMigration implements * @return true if a migration was performed and the repository needs to be * restarted and its caches cleared. */ - public Boolean migrate(Session adminSession) { + public Boolean migrate(Session session) { long begin = System.currentTimeMillis(); Reader reader = null; try { // check if already migrated - if (!adminSession.itemExists(dataModelNodePath)) { + if (!session.itemExists(dataModelNodePath)) { log.warn("Node " + dataModelNodePath + " does not exist: nothing to migrate."); return false; } - Node dataModelNode = adminSession.getNode(dataModelNodePath); + Node dataModelNode = session.getNode(dataModelNodePath); if (dataModelNode.hasProperty(ArgeoNames.ARGEO_DATA_MODEL_VERSION)) { String currentVersion = dataModelNode.getProperty( ArgeoNames.ARGEO_DATA_MODEL_VERSION).getString(); @@ -57,30 +57,30 @@ public class JackrabbitDataModelMigration implements } // apply transitional CND - reader = new InputStreamReader(migrationCnd.getInputStream()); - CndImporter.registerNodeTypes(reader, adminSession, true); + if (migrationCnd != null) { + reader = new InputStreamReader(migrationCnd.getInputStream()); + CndImporter.registerNodeTypes(reader, session, true); + session.save(); + log.info("Registered migration node types from " + migrationCnd); + } // modify data - dataModification.execute(adminSession); - - // set data model version - dataModelNode.setProperty(ArgeoNames.ARGEO_DATA_MODEL_VERSION, - targetVersion); + dataModification.execute(session); // apply changes - adminSession.save(); + session.save(); long duration = System.currentTimeMillis() - begin; log.info("Migration of data model " + dataModelNodePath + " to " + targetVersion + " performed in " + duration + "ms"); return true; } catch (Exception e) { - JcrUtils.discardQuietly(adminSession); + JcrUtils.discardQuietly(session); throw new ArgeoException("Migration of data model " + dataModelNodePath + " to " + targetVersion + " failed.", e); } finally { - JcrUtils.logoutQuietly(adminSession); + JcrUtils.logoutQuietly(session); IOUtils.closeQuietly(reader); } } @@ -91,16 +91,25 @@ public class JackrabbitDataModelMigration implements } /** To be called on a stopped repository. */ - public static void clearRepositoryCaches(File home) { - File customNodeTypes = new File(home.getPath() - + "/repository/nodetypes/custom_nodetypes.xml"); - if (customNodeTypes.exists()) { - customNodeTypes.delete(); + public static void clearRepositoryCaches(RepositoryConfig repositoryConfig) { + try { + String customeNodeTypesPath = "/nodetypes/custom_nodetypes.xml"; + repositoryConfig.getFileSystem().deleteFile(customeNodeTypesPath); if (log.isDebugEnabled()) - log.debug("Cleared " + customNodeTypes); - } else { - log.warn("File " + customNodeTypes + " not found."); + log.debug("Cleared " + customeNodeTypesPath); + } catch (Exception e) { + throw new ArgeoException("Cannot clear caches", e); } + + // File customNodeTypes = new File(home.getPath() + // + "/repository/nodetypes/custom_nodetypes.xml"); + // if (customNodeTypes.exists()) { + // customNodeTypes.delete(); + // if (log.isDebugEnabled()) + // log.debug("Cleared " + customNodeTypes); + // } else { + // log.warn("File " + customNodeTypes + " not found."); + // } } /* @@ -147,4 +156,12 @@ public class JackrabbitDataModelMigration implements this.dataModification = dataModification; } + public String getDataModelNodePath() { + return dataModelNodePath; + } + + public String getTargetVersion() { + return targetVersion; + } + }