diff --git a/config/alfresco/bootstrap-context.xml b/config/alfresco/bootstrap-context.xml
index bf498f5eb5..8a34820730 100644
--- a/config/alfresco/bootstrap-context.xml
+++ b/config/alfresco/bootstrap-context.xml
@@ -72,6 +72,9 @@
${system.hibernateMaxExecutions}
+
+ ${db.schema.name}
+
${db.schema.update}
diff --git a/config/alfresco/repository.properties b/config/alfresco/repository.properties
index 83a512d3a7..6559281e8e 100644
--- a/config/alfresco/repository.properties
+++ b/config/alfresco/repository.properties
@@ -349,6 +349,7 @@ lucene.defaultAnalyserResourceBundleName=alfresco/model/dataTypeAnalyzers
transformer.Archive.includeContents=false
# Database configuration
+db.schema.name=
db.schema.stopAfterSchemaBootstrap=false
db.schema.update=true
db.schema.update.lockRetryCount=24
diff --git a/source/java/org/alfresco/repo/domain/schema/SchemaBootstrap.java b/source/java/org/alfresco/repo/domain/schema/SchemaBootstrap.java
index 611cee4703..cac0647cb6 100644
--- a/source/java/org/alfresco/repo/domain/schema/SchemaBootstrap.java
+++ b/source/java/org/alfresco/repo/domain/schema/SchemaBootstrap.java
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2005-2010 Alfresco Software Limited.
+ * Copyright (C) 2005-2013 Alfresco Software Limited.
*
* This file is part of Alfresco
*
@@ -75,10 +75,10 @@ import org.alfresco.repo.domain.hibernate.dialect.AlfrescoSQLServerDialect;
import org.alfresco.repo.domain.hibernate.dialect.AlfrescoSybaseAnywhereDialect;
import org.alfresco.repo.domain.patch.AppliedPatchDAO;
import org.alfresco.service.cmr.repository.ContentWriter;
-import org.alfresco.service.descriptor.Descriptor;
import org.alfresco.service.descriptor.DescriptorService;
import org.alfresco.util.DatabaseMetaDataHelper;
import org.alfresco.util.LogUtil;
+import org.alfresco.util.PropertyCheck;
import org.alfresco.util.TempFileProvider;
import org.alfresco.util.schemacomp.ExportDb;
import org.alfresco.util.schemacomp.MultiFileDumper;
@@ -259,7 +259,8 @@ public class SchemaBootstrap extends AbstractLifecycleBean
private int schemaUpdateLockRetryWaitSeconds = DEFAULT_LOCK_RETRY_WAIT_SECONDS;
private int maximumStringLength;
private Properties globalProperties;
-
+ private String dbSchemaName;
+
private ThreadLocal executedStatementsThreadLocal = new ThreadLocal();
public SchemaBootstrap()
@@ -406,8 +407,18 @@ public class SchemaBootstrap extends AbstractLifecycleBean
{
ActionQueue.setMAX_EXECUTIONS_SIZE(hibernateMaxExecutions);
}
-
-
+
+ /**
+ * Set db.schema.name to be used
+ */
+ public void setDbSchemaName(String dbSchemaName)
+ {
+ if (PropertyCheck.isValidPropertyString(dbSchemaName))
+ {
+ this.dbSchemaName = dbSchemaName;
+ }
+ }
+
/**
* Sets the properties map from which we look up some configuration settings.
*
@@ -552,7 +563,8 @@ public class SchemaBootstrap extends AbstractLifecycleBean
*/
private int countAppliedPatches(Configuration cfg, Connection connection) throws Exception
{
- String defaultSchema = DatabaseMetaDataHelper.getSchema(connection);
+ String defaultSchema = dbSchemaName != null ? dbSchemaName : DatabaseMetaDataHelper.getSchema(connection);
+
if (defaultSchema != null && defaultSchema.length() == 0)
{
defaultSchema = null;
@@ -1008,9 +1020,10 @@ public class SchemaBootstrap extends AbstractLifecycleBean
setHistory("full").
setJobExecutorActivate(false).
buildProcessEngine();
-
+
+ String schemaName = dbSchemaName != null ? dbSchemaName : DatabaseMetaDataHelper.getSchema(connection);
// create or upgrade the DB schema
- engine.getManagementService().databaseSchemaUpgrade(connection, null, DatabaseMetaDataHelper.getSchema(connection));
+ engine.getManagementService().databaseSchemaUpgrade(connection, null, schemaName);
}
finally
{
@@ -1853,8 +1866,8 @@ public class SchemaBootstrap extends AbstractLifecycleBean
XMLToSchema xmlToSchema = new XMLToSchema(is);
xmlToSchema.parse();
Schema reference = xmlToSchema.getSchema();
-
ExportDb exporter = new ExportDb(dataSource, dialect, descriptorService);
+ exporter.setDbSchemaName(dbSchemaName);
// Ensure that the database objects we're validating are filtered
// by the same prefix as the reference file.
exporter.setNamePrefix(reference.getDbPrefix());
@@ -2030,11 +2043,11 @@ public class SchemaBootstrap extends AbstractLifecycleBean
if (dbPrefixes == null)
{
- dumper = new MultiFileDumper(outputDir, fileNameTemplate, dbToXMLFactory);
+ dumper = new MultiFileDumper(outputDir, fileNameTemplate, dbToXMLFactory, dbSchemaName);
}
else
{
- dumper = new MultiFileDumper(dbPrefixes, outputDir, fileNameTemplate, dbToXMLFactory);
+ dumper = new MultiFileDumper(dbPrefixes, outputDir, fileNameTemplate, dbToXMLFactory, dbSchemaName);
}
List files = dumper.dumpFiles();
diff --git a/source/java/org/alfresco/util/schemacomp/DbToXML.java b/source/java/org/alfresco/util/schemacomp/DbToXML.java
index 56d9645cf7..c347be0553 100644
--- a/source/java/org/alfresco/util/schemacomp/DbToXML.java
+++ b/source/java/org/alfresco/util/schemacomp/DbToXML.java
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2005-2011 Alfresco Software Limited.
+ * Copyright (C) 2005-2013 Alfresco Software Limited.
*
* This file is part of Alfresco
*
@@ -41,7 +41,8 @@ public class DbToXML
private ApplicationContext context;
private File outputFile;
private String namePrefix = "alf_";
-
+ private String dbSchemaName;
+
/**
* Constructor. Uses a default name prefix of 'alf_' during the export.
*/
@@ -61,12 +62,22 @@ public class DbToXML
this(context, outputFile);
this.namePrefix = namePrefix;
}
-
+
+ /**
+ * Set an optional default schema name
+ *
+ * @param dbSchemaName
+ */
+ public void setDbSchemaName(String dbSchemaName)
+ {
+ this.dbSchemaName = dbSchemaName;
+ }
public void execute()
{
ExportDb exporter = new ExportDb(context);
exporter.setNamePrefix(namePrefix);
+ exporter.setDbSchemaName(dbSchemaName);
exporter.execute();
Schema schema = exporter.getSchema();
// Write to a string buffer and then write the results to a file
diff --git a/source/java/org/alfresco/util/schemacomp/ExportDb.java b/source/java/org/alfresco/util/schemacomp/ExportDb.java
index 98764cec41..53bbc83efd 100644
--- a/source/java/org/alfresco/util/schemacomp/ExportDb.java
+++ b/source/java/org/alfresco/util/schemacomp/ExportDb.java
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2005-2011 Alfresco Software Limited.
+ * Copyright (C) 2005-2013 Alfresco Software Limited.
*
* This file is part of Alfresco
*
@@ -70,6 +70,9 @@ public class ExportDb
/** Only top-level tables starting with namePrefix will be exported, set to empty string for all objects */
private String namePrefix = "alf_";
+ /** Default schema name to use */
+ private String dbSchemaName;
+
private final static Log log = LogFactory.getLog(ExportDb.class);
@@ -390,6 +393,11 @@ public class ExportDb
*/
private String getSchemaName(final DatabaseMetaData dbmd) throws SQLException
{
+ if (this.dbSchemaName != null)
+ {
+ return this.dbSchemaName;
+ }
+
String schemaName = null;
final ResultSet schemas = dbmd.getSchemas();
while (schemas.next())
@@ -512,4 +520,14 @@ public class ExportDb
{
this.namePrefix = namePrefix;
}
+
+ /**
+ * Set the default schema name
+ *
+ * @param dbSchemaName the default schema name
+ */
+ public void setDbSchemaName(String dbSchemaName)
+ {
+ this.dbSchemaName = dbSchemaName;
+ }
}
diff --git a/source/java/org/alfresco/util/schemacomp/MultiFileDumper.java b/source/java/org/alfresco/util/schemacomp/MultiFileDumper.java
index 66e3d0f79b..c04de0afbe 100644
--- a/source/java/org/alfresco/util/schemacomp/MultiFileDumper.java
+++ b/source/java/org/alfresco/util/schemacomp/MultiFileDumper.java
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2005-2012 Alfresco Software Limited.
+ * Copyright (C) 2005-2013 Alfresco Software Limited.
*
* This file is part of Alfresco
*
@@ -47,6 +47,7 @@ public class MultiFileDumper
private final DbToXMLFactory dbToXMLFactory;
private final static String fileNameSuffix = ".xml";
public final static String[] DEFAULT_PREFIXES = new String[] { "alf_", "avm_", "jbpm_", "act_" };
+ private String defaultSchemaName;
/**
@@ -56,8 +57,9 @@ public class MultiFileDumper
* @param directory
* @param fileNameTemplate
* @param dbToXMLFactory
+ * @param defaultSchemaName
*/
- public MultiFileDumper(String[] dbPrefixes, File directory, String fileNameTemplate, DbToXMLFactory dbToXMLFactory)
+ public MultiFileDumper(String[] dbPrefixes, File directory, String fileNameTemplate, DbToXMLFactory dbToXMLFactory, String defaultSchemaName)
{
ParameterCheck.mandatory("dbPrefixes", dbPrefixes);
ParameterCheck.mandatory("directory", directory);
@@ -72,6 +74,7 @@ public class MultiFileDumper
this.directory = directory;
this.fileNameTemplate = fileNameTemplate;
this.dbToXMLFactory = dbToXMLFactory;
+ this.defaultSchemaName = defaultSchemaName;
}
@@ -82,10 +85,11 @@ public class MultiFileDumper
* @param directory
* @param fileNameTemplate
* @param dbToXMLFactory
+ * @param defaultSchemaName can be null
*/
- public MultiFileDumper(File directory, String fileNameTemplate, DbToXMLFactory dbToXMLFactory)
+ public MultiFileDumper(File directory, String fileNameTemplate, DbToXMLFactory dbToXMLFactory, String defaultSchemaName)
{
- this(DEFAULT_PREFIXES, directory, fileNameTemplate, dbToXMLFactory);
+ this(DEFAULT_PREFIXES, directory, fileNameTemplate, dbToXMLFactory, defaultSchemaName);
}
@@ -99,6 +103,7 @@ public class MultiFileDumper
File outputFile = TempFileProvider.createTempFile(fileNamePrefix, fileNameSuffix, directory);
files.add(outputFile);
DbToXML dbToXML = dbToXMLFactory.create(outputFile, dbPrefix);
+ dbToXML.setDbSchemaName(defaultSchemaName);
dbToXML.execute();
}
diff --git a/source/test-java/org/alfresco/util/schemacomp/MultiFileDumperTest.java b/source/test-java/org/alfresco/util/schemacomp/MultiFileDumperTest.java
index f84d8e40ba..9468a7d35d 100644
--- a/source/test-java/org/alfresco/util/schemacomp/MultiFileDumperTest.java
+++ b/source/test-java/org/alfresco/util/schemacomp/MultiFileDumperTest.java
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2005-2012 Alfresco Software Limited.
+ * Copyright (C) 2005-2013 Alfresco Software Limited.
*
* This file is part of Alfresco
*
@@ -61,14 +61,14 @@ public class MultiFileDumperTest
public void exceptionThrownWhenZeroPrefixesUsed()
{
// Shouldn't be able to construct a dumper with no prefixes to dump.
- new MultiFileDumper(new String[] {}, TempFileProvider.getTempDir(), "", dbToXMLFactory);
+ new MultiFileDumper(new String[] {}, TempFileProvider.getTempDir(), "", dbToXMLFactory, null);
}
@Test(expected=IllegalArgumentException.class)
public void exceptionThrownWhenNullPrefixListUsed()
{
// Shouldn't be able to construct a dumper with no prefixes to dump.
- new MultiFileDumper(null, TempFileProvider.getTempDir(), "", dbToXMLFactory);
+ new MultiFileDumper(null, TempFileProvider.getTempDir(), "", dbToXMLFactory, null);
}
@@ -79,7 +79,7 @@ public class MultiFileDumperTest
File directory = TempFileProvider.getTempDir();
String fileNamePattern = "SchemaDump-MySQL-{0}-";
- MultiFileDumper dumper = new MultiFileDumper(prefixes, directory, fileNamePattern, dbToXMLFactory);
+ MultiFileDumper dumper = new MultiFileDumper(prefixes, directory, fileNamePattern, dbToXMLFactory, null);
when(dbToXMLFactory.create(argThat(isFileNameStartingWith("SchemaDump-MySQL-a_-")), eq("a_"))).
thenReturn(dbToXMLForA);
@@ -106,7 +106,7 @@ public class MultiFileDumperTest
File directory = TempFileProvider.getTempDir();
String fileNamePattern = "SchemaDump-MySQL-{0}-";
- MultiFileDumper dumper = new MultiFileDumper(directory, fileNamePattern, dbToXMLFactory);
+ MultiFileDumper dumper = new MultiFileDumper(directory, fileNamePattern, dbToXMLFactory, null);
Map xmlExporters = new HashMap(MultiFileDumper.DEFAULT_PREFIXES.length);