exo-jcr SVN: r5086 - in jcr/trunk/exo.jcr.component.core: src/main/java/org/exoplatform/services/jcr/impl/clean/rdbms and 4 other directories.
by do-not-reply@jboss.org
Author: tolusha
Date: 2011-10-25 09:35:38 -0400 (Tue, 25 Oct 2011)
New Revision: 5086
Modified:
jcr/trunk/exo.jcr.component.core/pom.xml
jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/clean/rdbms/DBCleanService.java
jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/storage/jdbc/JDBCWorkspaceDataContainerChecker.java
jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/storage/jdbc/optimisation/db/SybaseMultiDbJDBCConnection.java
jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/storage/jdbc/optimisation/db/SybaseSingleDbJDBCConnection.java
jcr/trunk/exo.jcr.component.core/src/test/java/org/exoplatform/services/jcr/impl/util/jdbc/TestDBCleaner.java
jcr/trunk/exo.jcr.component.core/src/test/resources/conf/standalone/test-configuration-sybase-jbc.xml
jcr/trunk/exo.jcr.component.core/src/test/resources/conf/standalone/test-configuration-sybase-sjdbc-jbc.xml
Log:
EXOJCR-1583: adopt JCR to Sybase jConnect JDBC driver v7
Modified: jcr/trunk/exo.jcr.component.core/pom.xml
===================================================================
--- jcr/trunk/exo.jcr.component.core/pom.xml 2011-10-25 09:35:27 UTC (rev 5085)
+++ jcr/trunk/exo.jcr.component.core/pom.xml 2011-10-25 13:35:38 UTC (rev 5086)
@@ -892,9 +892,9 @@
</properties>
<dependencies>
<dependency>
- <groupId>com.sybase.jdbc3.jdbc</groupId>
- <artifactId>jconn3</artifactId>
- <version>6.05</version>
+ <groupId>com.sybase.jdbc4.jdbc</groupId>
+ <artifactId>jconn4</artifactId>
+ <version>26502</version>
<scope>test</scope>
</dependency>
</dependencies>
@@ -906,9 +906,9 @@
</properties>
<dependencies>
<dependency>
- <groupId>com.sybase.jdbc3.jdbc</groupId>
- <artifactId>jconn3</artifactId>
- <version>6.05</version>
+ <groupId>com.sybase.jdbc4.jdbc</groupId>
+ <artifactId>jconn4</artifactId>
+ <version>26502</version>
<scope>test</scope>
</dependency>
</dependencies>
Modified: jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/clean/rdbms/DBCleanService.java
===================================================================
--- jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/clean/rdbms/DBCleanService.java 2011-10-25 09:35:27 UTC (rev 5085)
+++ jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/clean/rdbms/DBCleanService.java 2011-10-25 13:35:38 UTC (rev 5086)
@@ -93,7 +93,6 @@
}
});
- jdbcConn.setAutoCommit(false);
DBCleaner dbCleaner = getWorkspaceDBCleaner(jdbcConn, wsEntry);
try
@@ -169,6 +168,19 @@
|| dialect.equals(DBConstants.DB_DIALECT_MYSQL) || dialect.equals(DBConstants.DB_DIALECT_MYSQL_UTF8)
|| dialect.equals(DBConstants.DB_DIALECT_SYBASE) || dialect.equals(DBConstants.DB_DIALECT_HSQLDB))
{
+ // Sybase doesn't allow DDL scripts inside transaction
+ if (dialect.equals(DBConstants.DB_DIALECT_SYBASE))
+ {
+ if (!jdbcConn.getAutoCommit())
+ {
+ jdbcConn.setAutoCommit(true);
+ }
+ }
+ else
+ {
+ jdbcConn.setAutoCommit(false);
+ }
+
ArrayList<String> dbCleanerScripts = new ArrayList<String>();
dbCleanerScripts.addAll(getRenameScripts(isMultiDB, dialect));
dbCleanerScripts.addAll(prepareInirializationScript(getInitializationDBScript(isMultiDB, dialect), isMultiDB,
@@ -848,13 +860,25 @@
boolean isMultiDB =
Boolean.parseBoolean(wsEntry.getContainer().getParameterValue(JDBCWorkspaceDataContainer.MULTIDB));
- String containerName = wsEntry.getName();
String dialect = DialectDetecter.detect(jdbcConn.getMetaData());
if (dialect.equals(DBConstants.DB_DIALECT_ORACLE) || dialect.equals(DBConstants.DB_DIALECT_ORACLEOCI)
|| dialect.equals(DBConstants.DB_DIALECT_MYSQL) || dialect.equals(DBConstants.DB_DIALECT_MYSQL_UTF8)
|| dialect.equals(DBConstants.DB_DIALECT_SYBASE))
{
+ // Sybase doesn't allow DDL scripts inside transaction
+ if (dialect.equals(DBConstants.DB_DIALECT_SYBASE))
+ {
+ if (!jdbcConn.getAutoCommit())
+ {
+ jdbcConn.setAutoCommit(true);
+ }
+ }
+ else
+ {
+ jdbcConn.setAutoCommit(false);
+ }
+
ArrayList<String> dbCleanerScripts = new ArrayList<String>();
dbCleanerScripts.addAll(getRenameScripts(isMultiDB, dialect));
dbCleanerScripts.addAll(prepareInirializationScript(getInitializationDBScript(isMultiDB, dialect), isMultiDB,
Modified: jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/storage/jdbc/JDBCWorkspaceDataContainerChecker.java
===================================================================
--- jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/storage/jdbc/JDBCWorkspaceDataContainerChecker.java 2011-10-25 09:35:27 UTC (rev 5085)
+++ jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/storage/jdbc/JDBCWorkspaceDataContainerChecker.java 2011-10-25 13:35:38 UTC (rev 5086)
@@ -157,11 +157,17 @@
"All properties that have not value record.", InspectionStatus.WARN));
queries
.add(new InspectionQuery(
- jdbcDataContainer.multiDb
- ? "select * from JCR_MVALUE where (STORAGE_DESC is null and DATA is null) or (STORAGE_DESC is not null and DATA is not null)"
- : "select V.* from JCR_SVALUE as V, JCR_SITEM as I where V.PROPERTY_ID = I.ID and I.CONTAINER_NAME='"
- + jdbcDataContainer.containerName
- + "' AND ((STORAGE_DESC is null and DATA is null) or (STORAGE_DESC is not null and DATA is not null))",
+ jdbcDataContainer.dbDialect.equals(DBConstants.DB_DIALECT_SYBASE)
+ ? jdbcDataContainer.multiDb
+ ? "select * from JCR_MVALUE where (STORAGE_DESC is null and DATA like null) or (STORAGE_DESC is not null and not DATA like null)"
+ : "select V.* from JCR_SVALUE as V, JCR_SITEM as I where V.PROPERTY_ID = I.ID and I.CONTAINER_NAME='"
+ + jdbcDataContainer.containerName
+ + "' AND ((STORAGE_DESC is null and DATA like null) or (STORAGE_DESC is not null and not DATA like null))"
+ : jdbcDataContainer.multiDb
+ ? "select * from JCR_MVALUE where (STORAGE_DESC is null and DATA is null) or (STORAGE_DESC is not null and DATA is not null)"
+ : "select V.* from JCR_SVALUE as V, JCR_SITEM as I where V.PROPERTY_ID = I.ID and I.CONTAINER_NAME='"
+ + jdbcDataContainer.containerName
+ + "' AND ((STORAGE_DESC is null and DATA is null) or (STORAGE_DESC is not null and DATA is not null))",
new String[]{DBConstants.COLUMN_ID}, "Incorrect JCR_VALUE records", InspectionStatus.ERR));
queries
.add(new InspectionQuery(
Modified: jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/storage/jdbc/optimisation/db/SybaseMultiDbJDBCConnection.java
===================================================================
--- jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/storage/jdbc/optimisation/db/SybaseMultiDbJDBCConnection.java 2011-10-25 09:35:27 UTC (rev 5085)
+++ jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/storage/jdbc/optimisation/db/SybaseMultiDbJDBCConnection.java 2011-10-25 13:35:38 UTC (rev 5086)
@@ -146,8 +146,8 @@
*/
protected ResultSet findNodesAndProperties(String lastNodeId, int offset, int limit) throws SQLException
{
- String tempTableAName = "#a" + IdGenerator.generate();
- String tempTableBName = "#b" + IdGenerator.generate();
+ String tempTableAName = "tempdb..a" + IdGenerator.generate();
+ String tempTableBName = "tempdb..b" + IdGenerator.generate();
boolean tempTableACreated = false;
boolean tempTableBCreated = false;
Modified: jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/storage/jdbc/optimisation/db/SybaseSingleDbJDBCConnection.java
===================================================================
--- jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/storage/jdbc/optimisation/db/SybaseSingleDbJDBCConnection.java 2011-10-25 09:35:27 UTC (rev 5085)
+++ jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/storage/jdbc/optimisation/db/SybaseSingleDbJDBCConnection.java 2011-10-25 13:35:38 UTC (rev 5086)
@@ -146,8 +146,8 @@
*/
protected ResultSet findNodesAndProperties(String lastNodeId, int offset, int limit) throws SQLException
{
- String tempTableAName = "#a" + IdGenerator.generate();
- String tempTableBName = "#b" + IdGenerator.generate();
+ String tempTableAName = "tempdb..a" + IdGenerator.generate();
+ String tempTableBName = "tempdb..b" + IdGenerator.generate();
boolean tempTableACreated = false;
boolean tempTableBCreated = false;
Modified: jcr/trunk/exo.jcr.component.core/src/test/java/org/exoplatform/services/jcr/impl/util/jdbc/TestDBCleaner.java
===================================================================
--- jcr/trunk/exo.jcr.component.core/src/test/java/org/exoplatform/services/jcr/impl/util/jdbc/TestDBCleaner.java 2011-10-25 09:35:27 UTC (rev 5085)
+++ jcr/trunk/exo.jcr.component.core/src/test/java/org/exoplatform/services/jcr/impl/util/jdbc/TestDBCleaner.java 2011-10-25 13:35:38 UTC (rev 5086)
@@ -247,7 +247,6 @@
// remove content
Connection jdbcConn = ds.getConnection();
- jdbcConn.setAutoCommit(false);
DBCleaner repositoryDBCleaner = DBCleanService.getRepositoryDBCleaner(jdbcConn, repositoryEntry);
repositoryDBCleaner.executeCleanScripts();
@@ -294,7 +293,6 @@
// remove content
Connection jdbcConn = ds.getConnection();
- jdbcConn.setAutoCommit(false);
DBCleaner repositoryDBCleaner = DBCleanService.getRepositoryDBCleaner(jdbcConn, repositoryEntry);
repositoryDBCleaner.executeCleanScripts();
Modified: jcr/trunk/exo.jcr.component.core/src/test/resources/conf/standalone/test-configuration-sybase-jbc.xml
===================================================================
--- jcr/trunk/exo.jcr.component.core/src/test/resources/conf/standalone/test-configuration-sybase-jbc.xml 2011-10-25 09:35:27 UTC (rev 5085)
+++ jcr/trunk/exo.jcr.component.core/src/test/resources/conf/standalone/test-configuration-sybase-jbc.xml 2011-10-25 13:35:38 UTC (rev 5086)
@@ -248,10 +248,10 @@
<properties-param>
<name>ref-addresses</name>
<description>ref-addresses</description>
- <property name="driverClassName" value="com.sybase.jdbc3.jdbc.SybDriver" />
- <property name="url" value="jdbc:sybase:Tds:dbs-jcr.exoplatform.com.ua:5000/db1_ws" />
- <property name="username" value="exoadmin" />
- <property name="password" value="exo12321" />
+ <property name="driverClassName" value="com.sybase.jdbc4.jdbc.SybDriver" />
+ <property name="url" value="jdbc:sybase:Tds:localhost:5003/db1_ws" />
+ <property name="username" value="sa" />
+ <property name="password" value="" />
</properties-param>
</init-params>
</component-plugin>
@@ -275,10 +275,10 @@
<properties-param>
<name>ref-addresses</name>
<description>ref-addresses</description>
- <property name="driverClassName" value="com.sybase.jdbc3.jdbc.SybDriver" />
- <property name="url" value="jdbc:sybase:Tds:dbs-jcr.exoplatform.com.ua:5000/db1_ws1" />
- <property name="username" value="exoadmin" />
- <property name="password" value="exo12321" />
+ <property name="driverClassName" value="com.sybase.jdbc4.jdbc.SybDriver" />
+ <property name="url" value="jdbc:sybase:Tds:localhost:5003/db1_ws1" />
+ <property name="username" value="sa" />
+ <property name="password" value="" />
</properties-param>
</init-params>
</component-plugin>
@@ -302,10 +302,10 @@
<properties-param>
<name>ref-addresses</name>
<description>ref-addresses</description>
- <property name="driverClassName" value="com.sybase.jdbc3.jdbc.SybDriver" />
- <property name="url" value="jdbc:sybase:Tds:dbs-jcr.exoplatform.com.ua:5000/db1_ws2" />
- <property name="username" value="exoadmin" />
- <property name="password" value="exo12321" />
+ <property name="driverClassName" value="com.sybase.jdbc4.jdbc.SybDriver" />
+ <property name="url" value="jdbc:sybase:Tds:localhost:5003/db1_ws2" />
+ <property name="username" value="sa" />
+ <property name="password" value="" />
</properties-param>
</init-params>
</component-plugin>
@@ -329,10 +329,10 @@
<properties-param>
<name>ref-addresses</name>
<description>ref-addresses</description>
- <property name="driverClassName" value="com.sybase.jdbc3.jdbc.SybDriver" />
- <property name="url" value="jdbc:sybase:Tds:dbs-jcr.exoplatform.com.ua:5000/db1_ws3" />
- <property name="username" value="exoadmin" />
- <property name="password" value="exo12321" />
+ <property name="driverClassName" value="com.sybase.jdbc4.jdbc.SybDriver" />
+ <property name="url" value="jdbc:sybase:Tds:localhost:5003/db1_ws3" />
+ <property name="username" value="sa" />
+ <property name="password" value="" />
</properties-param>
</init-params>
</component-plugin>
@@ -384,10 +384,10 @@
<properties-param>
<name>ref-addresses</name>
<description>ref-addresses</description>
- <property name="driverClassName" value="com.sybase.jdbc3.jdbc.SybDriver" />
- <property name="url" value="jdbc:sybase:Tds:dbs-jcr.exoplatform.com.ua:5000/db2_ws" />
- <property name="username" value="exoadmin" />
- <property name="password" value="exo12321" />
+ <property name="driverClassName" value="com.sybase.jdbc4.jdbc.SybDriver" />
+ <property name="url" value="jdbc:sybase:Tds:localhost:5003/db2_ws" />
+ <property name="username" value="sa" />
+ <property name="password" value="" />
</properties-param>
</init-params>
</component-plugin>
@@ -411,10 +411,10 @@
<properties-param>
<name>ref-addresses</name>
<description>ref-addresses</description>
- <property name="driverClassName" value="com.sybase.jdbc3.jdbc.SybDriver" />
- <property name="url" value="jdbc:sybase:Tds:dbs-jcr.exoplatform.com.ua:5000/db2_ws1" />
- <property name="username" value="exoadmin" />
- <property name="password" value="exo12321" />
+ <property name="driverClassName" value="com.sybase.jdbc4.jdbc.SybDriver" />
+ <property name="url" value="jdbc:sybase:Tds:localhost:5003/db2_ws1" />
+ <property name="username" value="sa" />
+ <property name="password" value="" />
</properties-param>
</init-params>
</component-plugin>
@@ -438,10 +438,10 @@
<properties-param>
<name>ref-addresses</name>
<description>ref-addresses</description>
- <property name="driverClassName" value="com.sybase.jdbc3.jdbc.SybDriver" />
- <property name="url" value="jdbc:sybase:Tds:dbs-jcr.exoplatform.com.ua:5000/db1tck_ws" />
- <property name="username" value="exoadmin" />
- <property name="password" value="exo12321" />
+ <property name="driverClassName" value="com.sybase.jdbc4.jdbc.SybDriver" />
+ <property name="url" value="jdbc:sybase:Tds:localhost:5003/db1tck_ws" />
+ <property name="username" value="sa" />
+ <property name="password" value="" />
</properties-param>
</init-params>
</component-plugin>
@@ -465,10 +465,10 @@
<properties-param>
<name>ref-addresses</name>
<description>ref-addresses</description>
- <property name="driverClassName" value="com.sybase.jdbc3.jdbc.SybDriver" />
- <property name="url" value="jdbc:sybase:Tds:dbs-jcr.exoplatform.com.ua:5000/db1tck_ws1" />
- <property name="username" value="exoadmin" />
- <property name="password" value="exo12321" />
+ <property name="driverClassName" value="com.sybase.jdbc4.jdbc.SybDriver" />
+ <property name="url" value="jdbc:sybase:Tds:localhost:5003/db1tck_ws1" />
+ <property name="username" value="sa" />
+ <property name="password" value="" />
</properties-param>
</init-params>
</component-plugin>
@@ -492,10 +492,10 @@
<properties-param>
<name>ref-addresses</name>
<description>ref-addresses</description>
- <property name="driverClassName" value="com.sybase.jdbc3.jdbc.SybDriver" />
- <property name="url" value="jdbc:sybase:Tds:dbs-jcr.exoplatform.com.ua:5000/db1tck_ws2" />
- <property name="username" value="exoadmin" />
- <property name="password" value="exo12321" />
+ <property name="driverClassName" value="com.sybase.jdbc4.jdbc.SybDriver" />
+ <property name="url" value="jdbc:sybase:Tds:localhost:5003/db1tck_ws2" />
+ <property name="username" value="sa" />
+ <property name="password" value="" />
</properties-param>
</init-params>
</component-plugin>
@@ -600,10 +600,10 @@
<properties-param>
<name>ref-addresses</name>
<description>ref-addresses</description>
- <property name="driverClassName" value="com.sybase.jdbc3.jdbc.SybDriver" />
- <property name="url" value="jdbc:sybase:Tds:dbs-jcr.exoplatform.com.ua:5000/testdbcleaner" />
- <property name="username" value="exoadmin" />
- <property name="password" value="exo12321" />
+ <property name="driverClassName" value="com.sybase.jdbc4.jdbc.SybDriver" />
+ <property name="url" value="jdbc:sybase:Tds:localhost:5003/testdbcleaner" />
+ <property name="username" value="sa" />
+ <property name="password" value="" />
</properties-param>
</init-params>
</component-plugin>
Modified: jcr/trunk/exo.jcr.component.core/src/test/resources/conf/standalone/test-configuration-sybase-sjdbc-jbc.xml
===================================================================
--- jcr/trunk/exo.jcr.component.core/src/test/resources/conf/standalone/test-configuration-sybase-sjdbc-jbc.xml 2011-10-25 09:35:27 UTC (rev 5085)
+++ jcr/trunk/exo.jcr.component.core/src/test/resources/conf/standalone/test-configuration-sybase-sjdbc-jbc.xml 2011-10-25 13:35:38 UTC (rev 5086)
@@ -248,10 +248,10 @@
<properties-param>
<name>ref-addresses</name>
<description>ref-addresses</description>
- <property name="driverClassName" value="com.sybase.jdbc3.jdbc.SybDriver" />
- <property name="url" value="jdbc:sybase:Tds:dbs-jcr.exoplatform.com.ua:5000/db1" />
- <property name="username" value="exoadmin" />
- <property name="password" value="exo12321" />
+ <property name="driverClassName" value="com.sybase.jdbc4.jdbc.SybDriver" />
+ <property name="url" value="jdbc:sybase:Tds:localhost:5003/db1" />
+ <property name="username" value="sa" />
+ <property name="password" value="" />
<property name="maxActive" value="20" />
</properties-param>
</init-params>
@@ -304,10 +304,10 @@
<properties-param>
<name>ref-addresses</name>
<description>ref-addresses</description>
- <property name="driverClassName" value="com.sybase.jdbc3.jdbc.SybDriver" />
- <property name="url" value="jdbc:sybase:Tds:dbs-jcr.exoplatform.com.ua:5000/db2" />
- <property name="username" value="exoadmin" />
- <property name="password" value="exo12321" />
+ <property name="driverClassName" value="com.sybase.jdbc4.jdbc.SybDriver" />
+ <property name="url" value="jdbc:sybase:Tds:localhost:5003/db2" />
+ <property name="username" value="sa" />
+ <property name="password" value="" />
</properties-param>
</init-params>
</component-plugin>
@@ -331,10 +331,10 @@
<properties-param>
<name>ref-addresses</name>
<description>ref-addresses</description>
- <property name="driverClassName" value="com.sybase.jdbc3.jdbc.SybDriver" />
- <property name="url" value="jdbc:sybase:Tds:dbs-jcr.exoplatform.com.ua:5000/db1_tck" />
- <property name="username" value="exoadmin" />
- <property name="password" value="exo12321" />
+ <property name="driverClassName" value="com.sybase.jdbc4.jdbc.SybDriver" />
+ <property name="url" value="jdbc:sybase:Tds:localhost:5003/db1_tck" />
+ <property name="username" value="sa" />
+ <property name="password" value="" />
</properties-param>
</init-params>
</component-plugin>
@@ -439,10 +439,10 @@
<properties-param>
<name>ref-addresses</name>
<description>ref-addresses</description>
- <property name="driverClassName" value="com.sybase.jdbc3.jdbc.SybDriver" />
- <property name="url" value="jdbc:sybase:Tds:dbs-jcr.exoplatform.com.ua:5000/testdbcleaner_sjdbc" />
- <property name="username" value="exoadmin" />
- <property name="password" value="exo12321" />
+ <property name="driverClassName" value="com.sybase.jdbc4.jdbc.SybDriver" />
+ <property name="url" value="jdbc:sybase:Tds:localhost:5003/testdbcleaner_sjdbc" />
+ <property name="username" value="sa" />
+ <property name="password" value="" />
<property name="maxActive" value="20" />
</properties-param>
</init-params>
14 years, 6 months
exo-jcr SVN: r5085 - in jcr/trunk/exo.jcr.component.ext/src: main/java/org/exoplatform/services/jcr/ext/backup/impl/rdbms and 1 other directories.
by do-not-reply@jboss.org
Author: tolusha
Date: 2011-10-25 05:35:27 -0400 (Tue, 25 Oct 2011)
New Revision: 5085
Modified:
jcr/trunk/exo.jcr.component.ext/src/main/java/org/exoplatform/services/jcr/ext/backup/impl/JobExistingRepositorySameConfigRestore.java
jcr/trunk/exo.jcr.component.ext/src/main/java/org/exoplatform/services/jcr/ext/backup/impl/JobExistingWorkspaceSameConfigRestore.java
jcr/trunk/exo.jcr.component.ext/src/main/java/org/exoplatform/services/jcr/ext/backup/impl/rdbms/RdbmsWorkspaceInitializer.java
jcr/trunk/exo.jcr.component.ext/src/test/java/org/exoplatform/services/jcr/ext/repository/creation/TestRepositoryCreationService.java
Log:
EXOJCR-1571: suspend every workspace instead of repository
Modified: jcr/trunk/exo.jcr.component.ext/src/main/java/org/exoplatform/services/jcr/ext/backup/impl/JobExistingRepositorySameConfigRestore.java
===================================================================
--- jcr/trunk/exo.jcr.component.ext/src/main/java/org/exoplatform/services/jcr/ext/backup/impl/JobExistingRepositorySameConfigRestore.java 2011-10-25 08:06:47 UTC (rev 5084)
+++ jcr/trunk/exo.jcr.component.ext/src/main/java/org/exoplatform/services/jcr/ext/backup/impl/JobExistingRepositorySameConfigRestore.java 2011-10-25 09:35:27 UTC (rev 5085)
@@ -18,10 +18,10 @@
import org.exoplatform.commons.utils.SecurityHelper;
import org.exoplatform.services.jcr.RepositoryService;
-import org.exoplatform.services.jcr.config.RepositoryConfigurationException;
import org.exoplatform.services.jcr.config.RepositoryEntry;
import org.exoplatform.services.jcr.config.WorkspaceEntry;
import org.exoplatform.services.jcr.core.ManageableRepository;
+import org.exoplatform.services.jcr.core.WorkspaceContainerFacade;
import org.exoplatform.services.jcr.dataflow.DataManager;
import org.exoplatform.services.jcr.ext.backup.BackupChainLog;
import org.exoplatform.services.jcr.ext.backup.RepositoryBackupChainLog;
@@ -80,6 +80,7 @@
// list of data restorers
List<DataRestore> dataRestorer = new ArrayList<DataRestore>();
+ List<WorkspaceContainerFacade> workspacesWaits4Resume = new ArrayList<WorkspaceContainerFacade>();
try
{
WorkspaceEntry wsEntry = repositoryEntry.getWorkspaceEntries().get(0);
@@ -116,8 +117,15 @@
dbCleaner = DBCleanService.getRepositoryDBCleaner(jdbcConn, repositoryEntry);
}
- repositoryService.getRepository(this.repositoryEntry.getName()).setState(ManageableRepository.SUSPENDED);
+ ManageableRepository repository = repositoryService.getRepository(this.repositoryEntry.getName());
+ for (String wsName : repository.getWorkspaceNames())
+ {
+ WorkspaceContainerFacade wsContainer = repository.getWorkspaceContainer(wsName);
+ wsContainer.setState(ManageableRepository.SUSPENDED);
+ workspacesWaits4Resume.add(wsContainer);
+ }
+
boolean isSharedDbCleaner = false;
// collect all restorers
@@ -204,7 +212,10 @@
}
// resume components
- repositoryService.getRepository(this.repositoryEntry.getName()).setState(ManageableRepository.ONLINE);
+ for (WorkspaceContainerFacade wsContainer : workspacesWaits4Resume)
+ {
+ wsContainer.setState(ManageableRepository.ONLINE);
+ }
// incremental restore
for (WorkspaceEntry wEntry : repositoryEntry.getWorkspaceEntries())
@@ -264,16 +275,15 @@
try
{
- repositoryService.getRepository(this.repositoryEntry.getName()).setState(ManageableRepository.ONLINE);
+ for (WorkspaceContainerFacade wsContainer : workspacesWaits4Resume)
+ {
+ wsContainer.setState(ManageableRepository.ONLINE);
+ }
}
catch (RepositoryException e)
{
log.error("Can't resume repository", e);
}
- catch (RepositoryConfigurationException e)
- {
- log.error("Can't resume repository", e);
- }
}
}
}
Modified: jcr/trunk/exo.jcr.component.ext/src/main/java/org/exoplatform/services/jcr/ext/backup/impl/JobExistingWorkspaceSameConfigRestore.java
===================================================================
--- jcr/trunk/exo.jcr.component.ext/src/main/java/org/exoplatform/services/jcr/ext/backup/impl/JobExistingWorkspaceSameConfigRestore.java 2011-10-25 08:06:47 UTC (rev 5084)
+++ jcr/trunk/exo.jcr.component.ext/src/main/java/org/exoplatform/services/jcr/ext/backup/impl/JobExistingWorkspaceSameConfigRestore.java 2011-10-25 09:35:27 UTC (rev 5085)
@@ -17,9 +17,9 @@
package org.exoplatform.services.jcr.ext.backup.impl;
import org.exoplatform.services.jcr.RepositoryService;
-import org.exoplatform.services.jcr.config.RepositoryConfigurationException;
import org.exoplatform.services.jcr.config.WorkspaceEntry;
import org.exoplatform.services.jcr.core.ManageableRepository;
+import org.exoplatform.services.jcr.core.WorkspaceContainerFacade;
import org.exoplatform.services.jcr.dataflow.DataManager;
import org.exoplatform.services.jcr.ext.backup.BackupChainLog;
import org.exoplatform.services.jcr.ext.backup.BackupManager;
@@ -73,18 +73,27 @@
// list of data restorers
List<DataRestore> dataRestorer = new ArrayList<DataRestore>();
+ List<WorkspaceContainerFacade> workspacesWaits4Resume = new ArrayList<WorkspaceContainerFacade>();
try
{
ManageableRepository repository = repositoryService.getRepository(repositoryName);
if (wEntry.getContainer().getParameterBoolean("multi-db") == false)
{
- repository.setState(ManageableRepository.SUSPENDED);
+ for (String wsName : repository.getWorkspaceNames())
+ {
+ WorkspaceContainerFacade wsContainer = repository.getWorkspaceContainer(wsName);
+ wsContainer.setState(ManageableRepository.SUSPENDED);
+
+ workspacesWaits4Resume.add(wsContainer);
+ }
}
else
{
- repository.getWorkspaceContainer(wEntry.getName()).setState(
- ManageableRepository.SUSPENDED);
+ WorkspaceContainerFacade wsContainer = repository.getWorkspaceContainer(wEntry.getName());
+
+ wsContainer.setState(ManageableRepository.SUSPENDED);
+ workspacesWaits4Resume.add(wsContainer);
}
// get all restorers
@@ -119,15 +128,10 @@
restorer.commit();
}
- if (wEntry.getContainer().getParameterBoolean("multi-db") == false)
+ for (WorkspaceContainerFacade wsContainer : workspacesWaits4Resume)
{
- repository.setState(ManageableRepository.ONLINE);
+ wsContainer.setState(ManageableRepository.ONLINE);
}
- else
- {
- repository.getWorkspaceContainer(wEntry.getName()).setState(
- ManageableRepository.ONLINE);
- }
// incremental restore
DataManager dataManager =
@@ -178,31 +182,15 @@
try
{
- ManageableRepository repository = repositoryService.getRepository(repositoryName);
-
- if (wEntry.getContainer().getParameterBoolean("multi-db") == false)
+ for (WorkspaceContainerFacade wsContainer : workspacesWaits4Resume)
{
- if (repository.getState() != ManageableRepository.ONLINE)
- {
- repository.setState(ManageableRepository.ONLINE);
- }
+ wsContainer.setState(ManageableRepository.ONLINE);
}
- else
- {
- if (repository.getWorkspaceContainer(wEntry.getName()).getState() != ManageableRepository.ONLINE)
- {
- repository.getWorkspaceContainer(wEntry.getName()).setState(ManageableRepository.ONLINE);
- }
- }
}
catch (RepositoryException e)
{
log.error("Can't resume component", e);
}
- catch (RepositoryConfigurationException e)
- {
- log.error("Can't resume component", e);
- }
}
}
}
Modified: jcr/trunk/exo.jcr.component.ext/src/main/java/org/exoplatform/services/jcr/ext/backup/impl/rdbms/RdbmsWorkspaceInitializer.java
===================================================================
--- jcr/trunk/exo.jcr.component.ext/src/main/java/org/exoplatform/services/jcr/ext/backup/impl/rdbms/RdbmsWorkspaceInitializer.java 2011-10-25 08:06:47 UTC (rev 5084)
+++ jcr/trunk/exo.jcr.component.ext/src/main/java/org/exoplatform/services/jcr/ext/backup/impl/rdbms/RdbmsWorkspaceInitializer.java 2011-10-25 09:35:27 UTC (rev 5085)
@@ -24,6 +24,7 @@
import org.exoplatform.services.jcr.config.RepositoryEntry;
import org.exoplatform.services.jcr.config.WorkspaceEntry;
import org.exoplatform.services.jcr.core.ManageableRepository;
+import org.exoplatform.services.jcr.core.WorkspaceContainerFacade;
import org.exoplatform.services.jcr.datamodel.NodeData;
import org.exoplatform.services.jcr.impl.Constants;
import org.exoplatform.services.jcr.impl.backup.BackupException;
@@ -155,17 +156,23 @@
List<Backupable> backupableComponents =
repository.getWorkspaceContainer(workspaceName).getComponentInstancesOfType(Backupable.class);
- boolean isRepositorySuspended = false;
+ List<WorkspaceContainerFacade> workspacesWaits4Resume = new ArrayList<WorkspaceContainerFacade>();
+
Throwable throwable = null;
try
{
// set state SUSPENDED to other workspaces if singledb
if (workspaceEntry.getContainer().getParameterBoolean("multi-db") == false)
{
- if (repositoryEntry.getWorkspaceEntries().size() != 1)
+ for (WorkspaceEntry we : repositoryEntry.getWorkspaceEntries())
{
- repository.setState(ManageableRepository.SUSPENDED);
- isRepositorySuspended = true;
+ if (!we.getName().equals(workspaceEntry.getName()))
+ {
+ WorkspaceContainerFacade wsContainer = repository.getWorkspaceContainer(we.getName());
+ wsContainer.setState(ManageableRepository.SUSPENDED);
+
+ workspacesWaits4Resume.add(wsContainer);
+ }
}
}
@@ -228,9 +235,9 @@
try
{
- if (isRepositorySuspended)
+ for (WorkspaceContainerFacade wsContainer : workspacesWaits4Resume)
{
- repository.setState(ManageableRepository.ONLINE);
+ wsContainer.setState(ManageableRepository.ONLINE);
}
}
catch (RepositoryException e)
Modified: jcr/trunk/exo.jcr.component.ext/src/test/java/org/exoplatform/services/jcr/ext/repository/creation/TestRepositoryCreationService.java
===================================================================
--- jcr/trunk/exo.jcr.component.ext/src/test/java/org/exoplatform/services/jcr/ext/repository/creation/TestRepositoryCreationService.java 2011-10-25 08:06:47 UTC (rev 5084)
+++ jcr/trunk/exo.jcr.component.ext/src/test/java/org/exoplatform/services/jcr/ext/repository/creation/TestRepositoryCreationService.java 2011-10-25 09:35:27 UTC (rev 5085)
@@ -29,6 +29,8 @@
import org.exoplatform.services.jcr.util.IdGenerator;
import java.io.File;
+import java.util.HashMap;
+import java.util.Map;
import javax.jcr.RepositoryException;
@@ -119,7 +121,6 @@
}
}
- /* TODO
public void testCreateRepositorySingleDB() throws Exception
{
// prepare
@@ -283,7 +284,7 @@
{
// expected behavior, repository should be missing
}
- }*/
+ }
public void testReserveRepositoryNameException() throws Exception
{
14 years, 6 months
exo-jcr SVN: r5084 - in jcr/trunk/exo.jcr.component.core/src: main/java/org/exoplatform/services/jcr/impl/storage/jdbc and 1 other directories.
by do-not-reply@jboss.org
Author: tolusha
Date: 2011-10-25 04:06:47 -0400 (Tue, 25 Oct 2011)
New Revision: 5084
Modified:
jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/RepositoryCheckController.java
jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/storage/jdbc/JDBCWorkspaceDataContainerChecker.java
jcr/trunk/exo.jcr.component.core/src/test/java/org/exoplatform/services/jcr/impl/TestRepositoryCheckController.java
Log:
EXOJCR-1471: fix query
Modified: jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/RepositoryCheckController.java
===================================================================
--- jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/RepositoryCheckController.java 2011-10-25 07:48:55 UTC (rev 5083)
+++ jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/RepositoryCheckController.java 2011-10-25 08:06:47 UTC (rev 5084)
@@ -23,6 +23,7 @@
import org.exoplatform.management.annotations.ManagedDescription;
import org.exoplatform.management.jmx.annotations.NameTemplate;
import org.exoplatform.management.jmx.annotations.Property;
+import org.exoplatform.services.jcr.config.RepositoryConfigurationException;
import org.exoplatform.services.jcr.core.ManageableRepository;
import org.exoplatform.services.jcr.impl.core.query.SearchManager;
import org.exoplatform.services.jcr.impl.storage.jdbc.JDBCWorkspaceDataContainer;
@@ -350,7 +351,8 @@
}
}
- private void checkDB(InspectionLog inspectionLog) throws RepositoryException, IOException
+ private void checkDB(InspectionLog inspectionLog) throws RepositoryException, IOException,
+ RepositoryConfigurationException
{
String[] wsNames = repository.getWorkspaceNames();
for (String wsName : wsNames)
Modified: jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/storage/jdbc/JDBCWorkspaceDataContainerChecker.java
===================================================================
--- jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/storage/jdbc/JDBCWorkspaceDataContainerChecker.java 2011-10-25 07:48:55 UTC (rev 5083)
+++ jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/storage/jdbc/JDBCWorkspaceDataContainerChecker.java 2011-10-25 08:06:47 UTC (rev 5084)
@@ -133,14 +133,17 @@
? "select * from JCR_MITEM as N where N.I_CLASS=1 and NOT EXISTS (select * from JCR_MITEM AS P where P.I_CLASS=2 and P.PARENT_ID=N.ID)"
: "select * from JCR_SITEM as N where N.CONTAINER_NAME='"
+ jdbcDataContainer.containerName
- + "' and N.I_CLASS=1 and NOT EXISTS (select * from JCR_SITEM AS P where P.I_CLASS=2 and P.PARENT_ID=N.ID)",
+ + "' and N.I_CLASS=1 and NOT EXISTS (select * from JCR_SITEM AS P where P.I_CLASS=2 and P.PARENT_ID=N.ID and P.CONTAINER_NAME='"
+ + jdbcDataContainer.containerName + "')",
new String[]{DBConstants.COLUMN_ID, DBConstants.COLUMN_PARENTID, DBConstants.COLUMN_NAME},
"Nodes that do not have at least one property", InspectionStatus.ERR));
queries
.add(new InspectionQuery(
jdbcDataContainer.multiDb
? "select * from JCR_MVALUE as V where NOT EXISTS(select * from JCR_MITEM as P where V.PROPERTY_ID = P.ID and P.I_CLASS=2)"
- : "select * from JCR_SVALUE as V where NOT EXISTS(select * from JCR_SITEM as P where P.CONTAINER_NAME='"
+ : "select V.* from JCR_SVALUE as V, JCR_SITEM as I where V.PROPERTY_ID = I.ID and I.CONTAINER_NAME='"
+ + jdbcDataContainer.containerName
+ + "' and NOT EXISTS(select * from JCR_SITEM as P where P.CONTAINER_NAME='"
+ jdbcDataContainer.containerName + "' and V.PROPERTY_ID = P.ID and P.I_CLASS=2)", new String[]{
DBConstants.COLUMN_ID, DBConstants.COLUMN_VPROPERTY_ID},
"All value records that has not owner-property record", InspectionStatus.ERR));
@@ -156,7 +159,9 @@
.add(new InspectionQuery(
jdbcDataContainer.multiDb
? "select * from JCR_MVALUE where (STORAGE_DESC is null and DATA is null) or (STORAGE_DESC is not null and DATA is not null)"
- : "select * from JCR_SVALUE where (STORAGE_DESC is null and DATA is null) or (STORAGE_DESC is not null and DATA is not null)",
+ : "select V.* from JCR_SVALUE as V, JCR_SITEM as I where V.PROPERTY_ID = I.ID and I.CONTAINER_NAME='"
+ + jdbcDataContainer.containerName
+ + "' AND ((STORAGE_DESC is null and DATA is null) or (STORAGE_DESC is not null and DATA is not null))",
new String[]{DBConstants.COLUMN_ID}, "Incorrect JCR_VALUE records", InspectionStatus.ERR));
queries
.add(new InspectionQuery(
@@ -170,7 +175,9 @@
// properties can refer to missing node. It is possible to perform this usecase via JCR API with no exceptions
queries.add(new InspectionQuery(jdbcDataContainer.multiDb
? "select * from JCR_MREF AS R where NOT EXISTS(select * from JCR_MITEM AS N where R.NODE_ID=N.ID)"
- : "select * from JCR_SREF AS R where NOT EXISTS(select * from JCR_SITEM AS N where N.CONTAINER_NAME='"
+ : "select * from JCR_SREF AS R, JCR_SITEM as I where R.PROPERTY_ID = I.ID and I.CONTAINER_NAME='"
+ + jdbcDataContainer.containerName
+ + "' and NOT EXISTS(select * from JCR_SITEM AS N where N.CONTAINER_NAME='"
+ jdbcDataContainer.containerName + "' and R.NODE_ID=N.ID)", new String[]{"NODE_ID", "PROPERTY_ID",
DBConstants.COLUMN_VORDERNUM},
"Reference records that linked to unexisted nodes. Can be normal for some usecases.", InspectionStatus.WARN));
@@ -284,7 +291,7 @@
* @throws RepositoryException
* @throws IOException
*/
- public static void checkValueStorage(JDBCWorkspaceDataContainer jdbcDataContainer,
+ public static void checkValueStorage(final JDBCWorkspaceDataContainer jdbcDataContainer,
ValueStoragePluginProvider vsPlugin, InspectionLog inspectionLog) throws RepositoryException, IOException
{
final String valueRecordFormat = "ValueData[PROPERTY_ID=%s ORDER_NUM=%d STORAGE_DESC=%s]";
@@ -295,9 +302,11 @@
try
{
st =
- connection.prepareStatement(jdbcDataContainer.multiDb
- ? "SELECT PROPERTY_ID, ORDER_NUM, STORAGE_DESC from JCR_MVALUE where STORAGE_DESC is not null"
- : "SELECT PROPERTY_ID, ORDER_NUM, STORAGE_DESC from JCR_SVALUE where STORAGE_DESC is not null");
+ connection
+ .prepareStatement(jdbcDataContainer.multiDb
+ ? "SELECT PROPERTY_ID, ORDER_NUM, STORAGE_DESC from JCR_MVALUE where STORAGE_DESC is not null"
+ : "SELECT V.PROPERTY_ID, V.ORDER_NUM, V.STORAGE_DESC from JCR_SVALUE as V, JCR_SITEM as I where I.CONTAINER_NAME='"
+ + jdbcDataContainer.containerName + "' and V.PROPERTY_ID = I.ID and STORAGE_DESC is not null");
resultSet = st.executeQuery();
// traverse all values, written to value storage
@@ -338,7 +347,9 @@
{
public Object run() throws ValueDataNotFoundException, IOException
{
- vdChannel.checkValueData(propertyId, orderNumber);
+ vdChannel.checkValueData(
+ jdbcDataContainer.multiDb ? propertyId : propertyId
+ .substring(jdbcDataContainer.containerName.length()), orderNumber);
return null;
}
});
Modified: jcr/trunk/exo.jcr.component.core/src/test/java/org/exoplatform/services/jcr/impl/TestRepositoryCheckController.java
===================================================================
--- jcr/trunk/exo.jcr.component.core/src/test/java/org/exoplatform/services/jcr/impl/TestRepositoryCheckController.java 2011-10-25 07:48:55 UTC (rev 5083)
+++ jcr/trunk/exo.jcr.component.core/src/test/java/org/exoplatform/services/jcr/impl/TestRepositoryCheckController.java 2011-10-25 08:06:47 UTC (rev 5084)
@@ -73,8 +73,10 @@
public void testDB()
{
String result = checkController.checkRepositoryDataConsistency(new DataStorage[]{DataStorage.DB});
- assertEquals("Repository data is consistent. See full report by path "
- + checkController.getLastLogFile().getAbsolutePath(), result);
+ assertTrue(result.equals("Repository data is consistent. See full report by path "
+ + checkController.getLastLogFile().getAbsolutePath())
+ || result.equals("Repository data is consistent, except some warnings. See full report by path "
+ + checkController.getLastLogFile().getAbsolutePath()));
}
public void testValueStorage() throws Exception
@@ -111,7 +113,9 @@
String result =
checkController.checkRepositoryDataConsistency(new DataStorage[]{DataStorage.DB, DataStorage.VALUE_STORAGE,
DataStorage.LUCENE_INDEX});
- assertEquals("Repository data is consistent. See full report by path "
- + checkController.getLastLogFile().getAbsolutePath(), result);
+ assertTrue(result.equals("Repository data is consistent. See full report by path "
+ + checkController.getLastLogFile().getAbsolutePath())
+ || result.equals("Repository data is consistent, except some warnings. See full report by path "
+ + checkController.getLastLogFile().getAbsolutePath()));
}
}
14 years, 6 months
exo-jcr SVN: r5083 - jcr/trunk/exo.jcr.component.ext/src/test/java/org/exoplatform/services/jcr/ext/repository/creation.
by do-not-reply@jboss.org
Author: areshetnyak
Date: 2011-10-25 03:48:55 -0400 (Tue, 25 Oct 2011)
New Revision: 5083
Modified:
jcr/trunk/exo.jcr.component.ext/src/test/java/org/exoplatform/services/jcr/ext/repository/creation/TestRepositoryCreationService.java
Log:
EXOJCR-1571 : Two unit tests was commented, because this test is freeze on IndexMerger.dispoce().
Modified: jcr/trunk/exo.jcr.component.ext/src/test/java/org/exoplatform/services/jcr/ext/repository/creation/TestRepositoryCreationService.java
===================================================================
--- jcr/trunk/exo.jcr.component.ext/src/test/java/org/exoplatform/services/jcr/ext/repository/creation/TestRepositoryCreationService.java 2011-10-24 15:05:23 UTC (rev 5082)
+++ jcr/trunk/exo.jcr.component.ext/src/test/java/org/exoplatform/services/jcr/ext/repository/creation/TestRepositoryCreationService.java 2011-10-25 07:48:55 UTC (rev 5083)
@@ -29,8 +29,6 @@
import org.exoplatform.services.jcr.util.IdGenerator;
import java.io.File;
-import java.util.HashMap;
-import java.util.Map;
import javax.jcr.RepositoryException;
@@ -121,6 +119,7 @@
}
}
+ /* TODO
public void testCreateRepositorySingleDB() throws Exception
{
// prepare
@@ -284,7 +283,7 @@
{
// expected behavior, repository should be missing
}
- }
+ }*/
public void testReserveRepositoryNameException() throws Exception
{
14 years, 6 months
exo-jcr SVN: r5082 - in jcr/trunk/exo.jcr.component.ext/src: test/java/org/exoplatform/services/jcr/ext/backup and 1 other directories.
by do-not-reply@jboss.org
Author: areshetnyak
Date: 2011-10-24 11:05:23 -0400 (Mon, 24 Oct 2011)
New Revision: 5082
Modified:
jcr/trunk/exo.jcr.component.ext/src/main/java/org/exoplatform/services/jcr/ext/backup/impl/JobExistingRepositorySameConfigRestore.java
jcr/trunk/exo.jcr.component.ext/src/test/java/org/exoplatform/services/jcr/ext/backup/AbstractBackupUseCasesTest.java
jcr/trunk/exo.jcr.component.ext/src/test/java/org/exoplatform/services/jcr/util/TesterConfigurationHelper.java
Log:
EXOJCR-1571 : Rename approach was adopted for MySQL, PostgreSQL and Sybase DBs.
Modified: jcr/trunk/exo.jcr.component.ext/src/main/java/org/exoplatform/services/jcr/ext/backup/impl/JobExistingRepositorySameConfigRestore.java
===================================================================
--- jcr/trunk/exo.jcr.component.ext/src/main/java/org/exoplatform/services/jcr/ext/backup/impl/JobExistingRepositorySameConfigRestore.java 2011-10-24 15:04:53 UTC (rev 5081)
+++ jcr/trunk/exo.jcr.component.ext/src/main/java/org/exoplatform/services/jcr/ext/backup/impl/JobExistingRepositorySameConfigRestore.java 2011-10-24 15:05:23 UTC (rev 5082)
@@ -35,8 +35,6 @@
import org.exoplatform.services.jcr.impl.clean.rdbms.DBCleaner;
import org.exoplatform.services.jcr.impl.clean.rdbms.DummyDBCleaner;
import org.exoplatform.services.jcr.impl.dataflow.persistent.WorkspacePersistentDataManager;
-import org.exoplatform.services.jcr.impl.storage.jdbc.DBConstants;
-import org.exoplatform.services.jcr.impl.storage.jdbc.DialectDetecter;
import org.exoplatform.services.jcr.impl.storage.jdbc.JDBCWorkspaceDataContainer;
import org.exoplatform.services.jcr.impl.util.io.FileCleanerHolder;
@@ -115,10 +113,7 @@
});
jdbcConn.setAutoCommit(false);
- if (!(DialectDetecter.detect(jdbcConn.getMetaData()).equals(DBConstants.DB_DIALECT_SYBASE)))
- {
- dbCleaner = DBCleanService.getRepositoryDBCleaner(jdbcConn, repositoryEntry);
- }
+ dbCleaner = DBCleanService.getRepositoryDBCleaner(jdbcConn, repositoryEntry);
}
repositoryService.getRepository(this.repositoryEntry.getName()).setState(ManageableRepository.SUSPENDED);
Modified: jcr/trunk/exo.jcr.component.ext/src/test/java/org/exoplatform/services/jcr/ext/backup/AbstractBackupUseCasesTest.java
===================================================================
--- jcr/trunk/exo.jcr.component.ext/src/test/java/org/exoplatform/services/jcr/ext/backup/AbstractBackupUseCasesTest.java 2011-10-24 15:04:53 UTC (rev 5081)
+++ jcr/trunk/exo.jcr.component.ext/src/test/java/org/exoplatform/services/jcr/ext/backup/AbstractBackupUseCasesTest.java 2011-10-24 15:05:23 UTC (rev 5082)
@@ -1308,104 +1308,154 @@
}
/**
- * Use JobExistingWorkspaceSameConfigRestore to restore.
- */
+ * Use JobExistingWorkspaceSameConfigRestore to restore.
+ */
+
+
+
+
+
public void testExistedWorkspaceRestoreSingleDBTwoWS() throws Exception
{
- // prepare
- String dsName1 = helper.createDatasource();
- String dsName2 = helper.createDatasource();
+ // prepare
+ String dsName1 = helper.createDatasource();
+ String dsName2 = helper.createDatasource();
- ManageableRepository repository = helper.createRepository(container, false, dsName1);
- WorkspaceEntry wsEntry1 = helper.createWorkspaceEntry(false, dsName1);
- helper.addWorkspace(repository, wsEntry1);
- addConent(repository, wsEntry1.getName());
+ ManageableRepository repository = helper.createRepository(container, false, dsName1);
+ WorkspaceEntry wsEntry1 = helper.createWorkspaceEntry(false, dsName1);
+ helper.addWorkspace(repository, wsEntry1);
+ addConent(repository, wsEntry1.getName());
- WorkspaceEntry wsEntry2 = helper.createWorkspaceEntry(false, dsName2);
- helper.addWorkspace(repository, wsEntry2);
- addConent(repository, wsEntry2.getName());
+ WorkspaceEntry wsEntry2 = helper.createWorkspaceEntry(false, dsName2);
+ helper.addWorkspace(repository, wsEntry2);
+ addConent(repository, wsEntry2.getName());
- // backup
- File backDir = new File("target/backup/" + IdGenerator.generate());
- backDir.mkdirs();
+ // backup
+ File backDir = new File("target/backup/" + IdGenerator.generate());
+ backDir.mkdirs();
- BackupConfig config = new BackupConfig();
- config.setRepository(repository.getConfiguration().getName());
- config.setWorkspace(wsEntry1.getName());
- config.setBackupType(BackupManager.FULL_BACKUP_ONLY);
- config.setBackupDir(backDir);
+ BackupConfig config = new BackupConfig();
+ config.setRepository(repository.getConfiguration().getName());
+ config.setWorkspace(wsEntry1.getName());
+ config.setBackupType(BackupManager.FULL_BACKUP_ONLY);
+ config.setBackupDir(backDir);
- BackupChain bch = backup.startBackup(config);
- waitEndOfBackup(bch);
- backup.stopBackup(bch);
+ BackupChain bch = backup.startBackup(config);
+ waitEndOfBackup(bch);
+ backup.stopBackup(bch);
- // restore
- File backLog = new File(bch.getLogFilePath());
- assertTrue(backLog.exists());
+ // restore
+ File backLog = new File(bch.getLogFilePath());
+ assertTrue(backLog.exists());
- BackupChainLog bchLog = new BackupChainLog(backLog);
+ BackupChainLog bchLog = new BackupChainLog(backLog);
- assertNotNull(bchLog.getStartedTime());
- assertNotNull(bchLog.getFinishedTime());
+ assertNotNull(bchLog.getStartedTime());
+ assertNotNull(bchLog.getFinishedTime());
- backup.restoreExistingWorkspace(bchLog, repository.getConfiguration().getName(), repository.getConfiguration()
- .getWorkspaceEntries().get(1), false);
- checkConent(repository, repository.getConfiguration().getWorkspaceEntries().get(1).getName());
- checkConent(repository, repository.getConfiguration().getWorkspaceEntries().get(2).getName());
+ backup.restoreExistingWorkspace(bchLog, repository.getConfiguration().getName(), repository.getConfiguration()
+ .getWorkspaceEntries().get(1), false);
+ checkConent(repository, repository.getConfiguration().getWorkspaceEntries().get(1).getName());
+ checkConent(repository, repository.getConfiguration().getWorkspaceEntries().get(2).getName());
}
/**
- * Use JobExistingWorkspaceRestore to restore.
- */
+ * Use JobExistingWorkspaceRestore to restore.
+ */
+
+
+
+
+
public void testExistedWorkspaceRestoreSingleDBTwoWSWithDiffConfig() throws Exception
{
+ // prepare
+ String dsName1 = helper.createDatasource();
+ String dsName2 = helper.createDatasource();
+
+ ManageableRepository repository = helper.createRepository(container, false, dsName1);
+ WorkspaceEntry wsEntry1 = helper.createWorkspaceEntry(false, dsName1);
+ helper.addWorkspace(repository, wsEntry1);
+ addConent(repository, wsEntry1.getName());
+
+ WorkspaceEntry wsEntry2 = helper.createWorkspaceEntry(false, dsName2);
+ helper.addWorkspace(repository, wsEntry2);
+ addConent(repository, wsEntry2.getName());
+
+ // backup
+ File backDir = new File("target/backup/" + IdGenerator.generate());
+ backDir.mkdirs();
+
+ BackupConfig config = new BackupConfig();
+ config.setRepository(repository.getConfiguration().getName());
+ config.setWorkspace(wsEntry1.getName());
+ config.setBackupType(BackupManager.FULL_BACKUP_ONLY);
+ config.setBackupDir(backDir);
+
+ BackupChain bch = backup.startBackup(config);
+ waitEndOfBackup(bch);
+ backup.stopBackup(bch);
+
+ // restore
+ File backLog = new File(bch.getLogFilePath());
+ assertTrue(backLog.exists());
+
+ BackupChainLog bchLog = new BackupChainLog(backLog);
+
+ assertNotNull(bchLog.getStartedTime());
+ assertNotNull(bchLog.getFinishedTime());
+
+ // change cofig
+ WorkspaceEntry wsEntry = helper.copyWorkspaceEntry(repository.getConfiguration().getWorkspaceEntries().get(1));
+
+ List<SimpleParameterEntry> params = wsEntry.getContainer().getParameters();
+ params.set(2, new SimpleParameterEntry("max-buffer-size", "307200"));
+
+ wsEntry.getContainer().setParameters(params);
+
+ backup.restoreExistingWorkspace(bchLog, repository.getConfiguration().getName(), wsEntry, false);
+ checkConent(repository, repository.getConfiguration().getWorkspaceEntries().get(1).getName());
+ checkConent(repository, repository.getConfiguration().getWorkspaceEntries().get(2).getName());
+ }
+
+ public void testExistedRepositoryRestoreSingelDBSameConfig() throws Exception
+ {
// prepare
- String dsName1 = helper.createDatasource();
- String dsName2 = helper.createDatasource();
+ String dsName = helper.createDatasource();
+ ManageableRepository repository = helper.createRepository(container, false, dsName);
+ addConent(repository, repository.getConfiguration().getSystemWorkspaceName());
- ManageableRepository repository = helper.createRepository(container, false, dsName1);
- WorkspaceEntry wsEntry1 = helper.createWorkspaceEntry(false, dsName1);
+ WorkspaceEntry wsEntry1 = helper.createWorkspaceEntry(false, dsName);
helper.addWorkspace(repository, wsEntry1);
addConent(repository, wsEntry1.getName());
- WorkspaceEntry wsEntry2 = helper.createWorkspaceEntry(false, dsName2);
- helper.addWorkspace(repository, wsEntry2);
- addConent(repository, wsEntry2.getName());
-
// backup
File backDir = new File("target/backup/" + IdGenerator.generate());
backDir.mkdirs();
- BackupConfig config = new BackupConfig();
+ RepositoryBackupConfig config = new RepositoryBackupConfig();
config.setRepository(repository.getConfiguration().getName());
- config.setWorkspace(wsEntry1.getName());
config.setBackupType(BackupManager.FULL_BACKUP_ONLY);
config.setBackupDir(backDir);
- BackupChain bch = backup.startBackup(config);
+ RepositoryBackupChain bch = backup.startBackup(config);
waitEndOfBackup(bch);
backup.stopBackup(bch);
- // restore
File backLog = new File(bch.getLogFilePath());
assertTrue(backLog.exists());
- BackupChainLog bchLog = new BackupChainLog(backLog);
+ RepositoryBackupChainLog bchLog = new RepositoryBackupChainLog(backLog);
assertNotNull(bchLog.getStartedTime());
assertNotNull(bchLog.getFinishedTime());
-
- // change cofig
- WorkspaceEntry wsEntry = helper.copyWorkspaceEntry(repository.getConfiguration().getWorkspaceEntries().get(1));
- List<SimpleParameterEntry> params = wsEntry.getContainer().getParameters();
- params.set(2, new SimpleParameterEntry("max-buffer-size", "307200"));
-
- wsEntry.getContainer().setParameters(params);
-
- backup.restoreExistingWorkspace(bchLog, repository.getConfiguration().getName(), wsEntry, false);
- checkConent(repository, repository.getConfiguration().getWorkspaceEntries().get(1).getName());
- checkConent(repository, repository.getConfiguration().getWorkspaceEntries().get(2).getName());
+ // restore
+ long timeOfRestore = System.currentTimeMillis();
+ backup.restoreExistingRepository(bchLog, helper.copyRepositoryEntry(repository.getConfiguration()), false);
+ log.info("Total time of restore the repository = " + ((System.currentTimeMillis() - timeOfRestore)) + "ms.");
+ checkConent(repositoryService.getRepository(repository.getConfiguration().getName()), repository
+ .getConfiguration().getSystemWorkspaceName());
}
/**
Modified: jcr/trunk/exo.jcr.component.ext/src/test/java/org/exoplatform/services/jcr/util/TesterConfigurationHelper.java
===================================================================
--- jcr/trunk/exo.jcr.component.ext/src/test/java/org/exoplatform/services/jcr/util/TesterConfigurationHelper.java 2011-10-24 15:04:53 UTC (rev 5081)
+++ jcr/trunk/exo.jcr.component.ext/src/test/java/org/exoplatform/services/jcr/util/TesterConfigurationHelper.java 2011-10-24 15:05:23 UTC (rev 5082)
@@ -199,6 +199,35 @@
}
/**
+ * Create copy of repository entry.
+ */
+ public RepositoryEntry copyRepositoryEntry(RepositoryEntry baseRepositoryEntry) throws Exception
+ {
+ ArrayList<WorkspaceEntry> wsEntries = new ArrayList<WorkspaceEntry>();
+
+ for (WorkspaceEntry wsEntry : baseRepositoryEntry.getWorkspaceEntries())
+ {
+ WorkspaceEntry newWSEntry = copyWorkspaceEntry(wsEntry);
+
+ wsEntries.add(newWSEntry);
+ }
+
+ RepositoryEntry newRepositoryEntry = new RepositoryEntry();
+
+ newRepositoryEntry.setSystemWorkspaceName(baseRepositoryEntry.getSystemWorkspaceName());
+ newRepositoryEntry.setAccessControl(baseRepositoryEntry.getAccessControl());
+ newRepositoryEntry.setAuthenticationPolicy(baseRepositoryEntry.getAuthenticationPolicy());
+ newRepositoryEntry.setDefaultWorkspaceName(baseRepositoryEntry.getDefaultWorkspaceName());
+ newRepositoryEntry.setName(baseRepositoryEntry.getName());
+ newRepositoryEntry.setSecurityDomain(baseRepositoryEntry.getSecurityDomain());
+ newRepositoryEntry.setSessionTimeOut(baseRepositoryEntry.getSessionTimeOut());
+
+ newRepositoryEntry.setWorkspaceEntries(wsEntries);
+ return newRepositoryEntry;
+
+ }
+
+ /**
* Create copy of list with SimpleParameterEntry-s
*/
private List<SimpleParameterEntry> copyList(List<SimpleParameterEntry> baseArrayList)
14 years, 6 months
exo-jcr SVN: r5081 - in jcr/trunk/exo.jcr.component.core/src/main: java/org/exoplatform/services/jcr/impl/clean/rdbms and 3 other directories.
by do-not-reply@jboss.org
Author: areshetnyak
Date: 2011-10-24 11:04:53 -0400 (Mon, 24 Oct 2011)
New Revision: 5081
Removed:
jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/backup/rdbms/DB2DBRestore.java
jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/backup/rdbms/H2DBRestore.java
jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/backup/rdbms/MySQLDBRestore.java
jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/backup/rdbms/OracleDBRestore.java
Modified:
jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/backup/rdbms/DBRestore.java
jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/backup/rdbms/SybaseDBRestore.java
jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/clean/rdbms/DBCleanService.java
jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/clean/rdbms/DBCleaner.java
jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/storage/jdbc/JDBCWorkspaceDataContainer.java
jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/util/jdbc/DBInitializerHelper.java
jcr/trunk/exo.jcr.component.core/src/main/resources/conf/storage/jcr-mjdbc.mysql-utf8.sql
jcr/trunk/exo.jcr.component.core/src/main/resources/conf/storage/jcr-mjdbc.mysql.sql
jcr/trunk/exo.jcr.component.core/src/main/resources/conf/storage/jcr-sjdbc.mysql-utf8.sql
jcr/trunk/exo.jcr.component.core/src/main/resources/conf/storage/jcr-sjdbc.mysql.sql
Log:
EXOJCR-1571 : Rename approach was adopted for MySQL, PostgreSQL and Sybase DBs.
Deleted: jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/backup/rdbms/DB2DBRestore.java
===================================================================
--- jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/backup/rdbms/DB2DBRestore.java 2011-10-24 10:11:04 UTC (rev 5080)
+++ jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/backup/rdbms/DB2DBRestore.java 2011-10-24 15:04:53 UTC (rev 5081)
@@ -1,63 +0,0 @@
-/*
- * Copyright (C) 2003-2011 eXo Platform SAS.
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Affero General Public License
- * as published by the Free Software Foundation; either version 3
- * of the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, see<http://www.gnu.org/licenses/>.
- */
-package org.exoplatform.services.jcr.impl.backup.rdbms;
-
-import org.exoplatform.services.jcr.config.RepositoryConfigurationException;
-import org.exoplatform.services.jcr.config.WorkspaceEntry;
-import org.exoplatform.services.jcr.impl.clean.rdbms.DBCleaner;
-import org.exoplatform.services.jcr.impl.util.io.FileCleaner;
-
-import java.io.File;
-import java.sql.Connection;
-import java.sql.SQLException;
-import java.util.Map;
-
-import javax.naming.NamingException;
-
-/**
- * Created by The eXo Platform SAS.
- *
- * <br/>Date: 2011
- *
- * @author <a href="mailto:alex.reshetnyak@exoplatform.com.ua">Alex Reshetnyak</a>
- * @version $Id: DB2DBRestore.java 111 2011-11-11 11:11:11Z rainf0x $
- */
-public class DB2DBRestore extends DBRestore
-{
- /**
- * The constraint name is limited by 18 symbols.
- */
- private static final int DB2_CONSTRAINT_NAME_LENGTH_LIMIT = 18;
-
- /**
- * Constructor DB2DBRestore.
- */
- public DB2DBRestore(File storageDir, Connection jdbcConn, Map<String, RestoreTableRule> tables,
- WorkspaceEntry wsConfig, FileCleaner fileCleaner, DBCleaner dbCleaner) throws NamingException, SQLException,
- RepositoryConfigurationException
- {
- super(storageDir, jdbcConn, tables, wsConfig, fileCleaner, dbCleaner);
- }
-
- /**
- * {@inheritDoc}
- */
- protected String validateConstraintName(String string)
- {
- return string.substring(0, DB2_CONSTRAINT_NAME_LENGTH_LIMIT);
- }
-}
Modified: jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/backup/rdbms/DBRestore.java
===================================================================
--- jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/backup/rdbms/DBRestore.java 2011-10-24 10:11:04 UTC (rev 5080)
+++ jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/backup/rdbms/DBRestore.java 2011-10-24 15:04:53 UTC (rev 5081)
@@ -46,10 +46,8 @@
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
-import java.sql.Statement;
import java.sql.Types;
import java.util.ArrayList;
-import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
@@ -119,19 +117,9 @@
/**
* Database dialect.
*/
- protected final int dialect;
+ protected final String dialect;
/**
- * Contains queries for adding constraints and indexes.
- */
- protected Map<String, String> addQueries = new LinkedHashMap<String, String>();
-
- /**
- * Contains queries for dropping constraints and indexes.
- */
- protected Map<String, String> dropQueries = new LinkedHashMap<String, String>();
-
- /**
* Contains object names which executed queries.
*/
protected List<String> successfulExecuted;
@@ -156,7 +144,7 @@
this.storageDir = storageDir;
this.tables = tables;
this.dbCleaner = dbCleaner;
- this.dialect = DialectDetecter.detect(jdbcConn.getMetaData()).hashCode();
+ this.dialect = DialectDetecter.detect(jdbcConn.getMetaData());
}
/**
@@ -181,11 +169,6 @@
{
try
{
- boolean isMultiDb = tables.entrySet().iterator().next().getValue().getDstMultiDb();
- prepareQueries(isMultiDb);
-
- preRestoreTables(isMultiDb);
-
for (Entry<String, RestoreTableRule> entry : tables.entrySet())
{
String tableName = entry.getKey();
@@ -193,8 +176,6 @@
restoreTable(storageDir, jdbcConn, tableName, restoreRule);
}
-
- postRestoreTables(isMultiDb);
}
catch (IOException e)
{
@@ -207,138 +188,6 @@
}
/**
- * Prepare queries for restoring.
- *
- * @param isMultiDb
- * indicates if we have multi-db configuration or not
- */
- protected void prepareQueries(boolean isMultiDb)
- {
- String multiDb = isMultiDb ? "M" : "S";
-
- String constraintName = validateConstraintName("JCR_PK_" + multiDb + "VALUE");
- String constraint = "CONSTRAINT " + constraintName + " PRIMARY KEY(ID)";
- addQueries.put(constraintName, "ALTER TABLE JCR_" + multiDb + "VALUE ADD " + constraint);
- dropQueries.put(constraintName, "ALTER TABLE JCR_" + multiDb + "VALUE " + dropCommand(true, constraintName));
-
- constraintName = validateConstraintName("JCR_PK_" + multiDb + "ITEM");
- constraint = "CONSTRAINT " + constraintName + " PRIMARY KEY(ID)";
- addQueries.put(constraintName, "ALTER TABLE JCR_" + multiDb + "ITEM ADD " + constraint);
-
- constraintName = validateConstraintName("JCR_FK_" + multiDb + "VALUE_PROPERTY");
- constraint = "CONSTRAINT " + constraintName + " FOREIGN KEY(PROPERTY_ID) REFERENCES JCR_" + multiDb + "ITEM(ID)";
- addQueries.put(constraintName, "ALTER TABLE JCR_" + multiDb + "VALUE ADD " + constraint);
- dropQueries.put(constraintName, "ALTER TABLE JCR_" + multiDb + "VALUE " + dropCommand(false, constraintName));
-
- constraintName = validateConstraintName("JCR_FK_" + multiDb + "ITEM_PARENT");
- constraint = "CONSTRAINT " + constraintName + " FOREIGN KEY(PARENT_ID) REFERENCES JCR_" + multiDb + "ITEM(ID)";
- addQueries.put(constraintName, "ALTER TABLE JCR_" + multiDb + "ITEM ADD " + constraint);
- dropQueries.put(constraintName, "ALTER TABLE JCR_" + multiDb + "ITEM " + dropCommand(false, constraintName));
-
- constraintName = validateConstraintName("JCR_PK_" + multiDb + "ITEM");
- dropQueries.put(constraintName, "ALTER TABLE JCR_" + multiDb + "ITEM " + dropCommand(true, constraintName));
-
- constraintName = validateConstraintName("JCR_PK_" + multiDb + "REF");
- constraint = "CONSTRAINT " + constraintName + " PRIMARY KEY(NODE_ID, PROPERTY_ID, ORDER_NUM)";
- addQueries.put(constraintName, "ALTER TABLE JCR_" + multiDb + "REF ADD " + constraint);
- dropQueries.put(constraintName, "ALTER TABLE JCR_" + multiDb + "REF " + dropCommand(true, constraintName));
-
- constraintName = validateConstraintName("JCR_PK_" + multiDb + "CONTAINER");
- constraint = "CONSTRAINT " + constraintName + " PRIMARY KEY(VERSION)";
- addQueries.put(constraintName, "ALTER TABLE JCR_" + multiDb + "CONTAINER ADD " + constraint);
- dropQueries.put(constraintName, "ALTER TABLE JCR_" + multiDb + "CONTAINER " + dropCommand(true, constraintName));
- }
-
- /**
- * Validate name of constraint. For some DBs constrains name is limited.
- *
- * @param string
- * the constraint name
- * @return the constraint name accepted for specific DB
- */
- protected String validateConstraintName(String string)
- {
- return string;
- }
-
- /**
- * Return the command to drop primary or foreign key.
- *
- * @param isPrimaryKey
- * boolean
- * @return String
- */
- protected String dropCommand(boolean isPrimaryKey, String constraintName)
- {
- return "DROP CONSTRAINT " + constraintName;
- }
-
- /**
- * Prepare of restore tables. (Drop constraint, etc...)
- *
- * @param isMultiDb
- * boolean
- * @throws SQLException
- * will throw SQLException if fail.
- */
- public void preRestoreTables(boolean isMultiDb) throws SQLException
- {
- executeQueries(dropQueries);
- }
-
- /**
- * After of restore tables. (Add constraint, etc...)
- *
- * @param isMultiDb
- * boolean
- * @throws SQLException
- * Will throw SQLException if fail.
- */
- public void postRestoreTables(boolean isMultiDb) throws SQLException
- {
- executeQueries(addQueries);
- }
-
- /**
- * Execute queries.
- *
- * @param queries
- * the map with queries.
- * @throws SQLException
- */
- protected List<String> executeQueries(final Map<String, String> queries) throws SQLException
- {
- successfulExecuted = new ArrayList<String>();
- Statement st = null;
-
- for (String constraintName : queries.keySet())
- {
- try
- {
- st = jdbcConn.createStatement();
- st.execute(queries.get(constraintName));
- successfulExecuted.add(constraintName);
- }
- finally
- {
- if (st != null)
- {
- try
- {
- st.close();
- }
- catch (SQLException e)
- {
- LOG.warn("Can't close statemnt", e);
- }
- }
- }
- }
-
- return successfulExecuted;
- }
-
- /**
* {@inheritDoc}
*/
public void commit() throws BackupException
@@ -420,7 +269,7 @@
ResultSet tableMetaData = null;
// switch table name to lower case
- if (dialect == DBBackup.DB_DIALECT_PGSQL)
+ if (dialect.equals(DBBackup.DB_DIALECT_PGSQL))
{
tableName = tableName.toLowerCase();
}
@@ -478,7 +327,7 @@
columnType.add(restoreRule.getNewColumnIndex(), restoreRule.getNewColumnType());
String newColumnName =
- dialect == DBBackup.DB_DIALECT_PGSQL ? restoreRule.getNewColumnName().toLowerCase() : restoreRule
+ dialect.equals(DBBackup.DB_DIALECT_PGSQL) ? restoreRule.getNewColumnName().toLowerCase() : restoreRule
.getNewColumnName();
columnName.add(restoreRule.getNewColumnIndex(), newColumnName);
}
@@ -619,7 +468,7 @@
ba.read(readBuffer);
String value = new String(readBuffer);
- if (dialect == DBBackup.DB_DIALECT_PGSQL)
+ if (dialect.equals(DBBackup.DB_DIALECT_PGSQL))
{
insertNode.setBoolean(targetIndex + 1, value.equals("t"));
}
@@ -663,6 +512,9 @@
if (++batchSize == MAXIMUM_BATCH_SIZE)
{
insertNode.executeBatch();
+
+ commitBatch();
+
batchSize = 0;
}
}
@@ -670,6 +522,8 @@
if (batchSize != 0)
{
insertNode.executeBatch();
+
+ commitBatch();
}
}
finally
@@ -706,6 +560,13 @@
}
/**
+ * Committing changes from batch.
+ */
+ protected void commitBatch() throws SQLException
+ {
+ }
+
+ /**
* Spool input stream.
*/
private InputStream spoolInputStream(ObjectReader in, long contentLen) throws IOException
Deleted: jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/backup/rdbms/H2DBRestore.java
===================================================================
--- jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/backup/rdbms/H2DBRestore.java 2011-10-24 10:11:04 UTC (rev 5080)
+++ jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/backup/rdbms/H2DBRestore.java 2011-10-24 15:04:53 UTC (rev 5081)
@@ -1,64 +0,0 @@
-/*
- * Copyright (C) 2003-2011 eXo Platform SAS.
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Affero General Public License
- * as published by the Free Software Foundation; either version 3
- * of the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, see<http://www.gnu.org/licenses/>.
- */
-package org.exoplatform.services.jcr.impl.backup.rdbms;
-
-import org.exoplatform.services.jcr.config.RepositoryConfigurationException;
-import org.exoplatform.services.jcr.config.WorkspaceEntry;
-import org.exoplatform.services.jcr.impl.clean.rdbms.DBCleaner;
-import org.exoplatform.services.jcr.impl.util.io.FileCleaner;
-
-import java.io.File;
-import java.sql.Connection;
-import java.sql.SQLException;
-import java.util.Map;
-
-import javax.naming.NamingException;
-
-/**
- * Created by The eXo Platform SAS.
- *
- * <br/>Date: 2011
- *
- * @author <a href="mailto:alex.reshetnyak@exoplatform.com.ua">Alex Reshetnyak</a>
- * @version $Id: H2DBRestore.java 111 2011-11-11 11:11:11Z rainf0x $
- */
-public class H2DBRestore extends DBRestore
-{
-
- /**
- * Constructor H2DBRestore.
- */
- public H2DBRestore(File storageDir, Connection jdbcConn, Map<String, RestoreTableRule> tables,
- WorkspaceEntry wsConfig, FileCleaner fileCleaner, DBCleaner dbCleaner) throws NamingException, SQLException,
- RepositoryConfigurationException
- {
- super(storageDir, jdbcConn, tables, wsConfig, fileCleaner, dbCleaner);
- }
-
- /**
- * {@inheritDoc}
- */
- protected void prepareQueries(boolean isMultiDb)
- {
- super.prepareQueries(isMultiDb);
-
- // H2 doesn't contain primary key for JCR_SVALUE (JCR_MVALUE) table
- String constraintName = "JCR_PK_" + (isMultiDb ? "M" : "S") + "VALUE";
- addQueries.remove(constraintName);
- dropQueries.remove(constraintName);
- }
-}
Deleted: jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/backup/rdbms/MySQLDBRestore.java
===================================================================
--- jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/backup/rdbms/MySQLDBRestore.java 2011-10-24 10:11:04 UTC (rev 5080)
+++ jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/backup/rdbms/MySQLDBRestore.java 2011-10-24 15:04:53 UTC (rev 5081)
@@ -1,60 +0,0 @@
-/*
- * Copyright (C) 2003-2011 eXo Platform SAS.
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Affero General Public License
- * as published by the Free Software Foundation; either version 3
- * of the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, see<http://www.gnu.org/licenses/>.
- */
-package org.exoplatform.services.jcr.impl.backup.rdbms;
-
-import org.exoplatform.services.jcr.config.RepositoryConfigurationException;
-import org.exoplatform.services.jcr.config.WorkspaceEntry;
-import org.exoplatform.services.jcr.impl.clean.rdbms.DBCleaner;
-import org.exoplatform.services.jcr.impl.util.io.FileCleaner;
-
-import java.io.File;
-import java.sql.Connection;
-import java.sql.SQLException;
-import java.util.Map;
-
-import javax.naming.NamingException;
-
-/**
- * Created by The eXo Platform SAS.
- *
- * <br/>Date: 2011
- *
- * @author <a href="mailto:alex.reshetnyak@exoplatform.com.ua">Alex Reshetnyak</a>
- * @version $Id: MySQLDBRestore.java 111 2011-11-11 11:11:11Z rainf0x $
- */
-public class MySQLDBRestore extends DBRestore
-{
-
- /**
- * Constructor MySQLDBRestore.
- */
- public MySQLDBRestore(File storageDir, Connection jdbcConn, Map<String, RestoreTableRule> tables,
- WorkspaceEntry wsConfig, FileCleaner fileCleaner, DBCleaner dbCleaner) throws NamingException, SQLException,
- RepositoryConfigurationException
- {
- super(storageDir, jdbcConn, tables, wsConfig, fileCleaner, dbCleaner);
- }
-
- /**
- * {@inheritDoc}
- */
- protected String dropCommand(boolean isPrimaryKey, String constraintName)
- {
- return isPrimaryKey == true ? "DROP PRIMARY KEY" : "DROP FOREIGN KEY " + constraintName;
- }
-
-}
Deleted: jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/backup/rdbms/OracleDBRestore.java
===================================================================
--- jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/backup/rdbms/OracleDBRestore.java 2011-10-24 10:11:04 UTC (rev 5080)
+++ jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/backup/rdbms/OracleDBRestore.java 2011-10-24 15:04:53 UTC (rev 5081)
@@ -1,90 +0,0 @@
-/*
- * Copyright (C) 2003-2011 eXo Platform SAS.
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Affero General Public License
- * as published by the Free Software Foundation; either version 3
- * of the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, see<http://www.gnu.org/licenses/>.
- */
-package org.exoplatform.services.jcr.impl.backup.rdbms;
-
-import org.exoplatform.services.jcr.config.RepositoryConfigurationException;
-import org.exoplatform.services.jcr.config.WorkspaceEntry;
-import org.exoplatform.services.jcr.impl.clean.rdbms.DBCleaner;
-import org.exoplatform.services.jcr.impl.util.io.FileCleaner;
-
-import java.io.File;
-import java.sql.Connection;
-import java.sql.SQLException;
-import java.util.Map;
-
-import javax.naming.NamingException;
-
-/**
- * Created by The eXo Platform SAS.
- *
- * <br/>Date: 2011
- *
- * @author <a href="mailto:alex.reshetnyak@exoplatform.com.ua">Alex Reshetnyak</a>
- * @version $Id: OracleDBRestore.java 111 2011-11-11 11:11:11Z rainf0x $
- */
-public class OracleDBRestore extends DBRestore
-{
-
- /**
- * OracleDBRestore constructor.
- */
- public OracleDBRestore(File storageDir, Connection jdbcConn, Map<String, RestoreTableRule> tables,
- WorkspaceEntry wsConfig, FileCleaner fileCleaner, DBCleaner dbCleaner) throws NamingException, SQLException,
- RepositoryConfigurationException
- {
- super(storageDir, jdbcConn, tables, wsConfig, fileCleaner, dbCleaner);
- }
-
- /**
- * {@inheritDoc}
- */
- protected void prepareQueries(boolean isMultiDb)
- {
- String multiDb = isMultiDb ? "M" : "S";
-
- String indexName = "JCR_IDX_" + multiDb + "ITEM_PARENT_FK";
- addQueries.put(indexName, "CREATE INDEX " + indexName + " ON JCR_" + multiDb + "ITEM(PARENT_ID)");
- dropQueries.put(indexName, "DROP INDEX " + indexName);
-
- indexName = "JCR_IDX_" + multiDb + "ITEM_PARENT";
- addQueries.put(indexName, "CREATE UNIQUE INDEX " + indexName + " ON JCR_" + multiDb
- + "ITEM(CONTAINER_NAME, PARENT_ID, NAME, I_INDEX, I_CLASS, VERSION DESC)");
- dropQueries.put(indexName, "DROP INDEX " + indexName);
-
- indexName = "JCR_IDX_" + multiDb + "ITEM_PARENT_NAME";
- addQueries.put(indexName, "CREATE UNIQUE INDEX " + indexName + " ON JCR_" + multiDb
- + "ITEM(I_CLASS, CONTAINER_NAME, PARENT_ID, NAME, I_INDEX, VERSION DESC)");
- dropQueries.put(indexName, "DROP INDEX " + indexName);
-
- indexName = "JCR_IDX_" + multiDb + "ITEM_PARENT_ID";
- addQueries.put(indexName, "CREATE UNIQUE INDEX " + indexName + " ON JCR_" + multiDb
- + "ITEM(I_CLASS, CONTAINER_NAME, PARENT_ID, ID, VERSION DESC)");
- dropQueries.put(indexName, "DROP INDEX " + indexName);
-
- indexName = "JCR_IDX_" + multiDb + "VALUE_PROPERTY";
- addQueries.put(indexName, "CREATE UNIQUE INDEX " + indexName + " ON JCR_" + multiDb
- + "VALUE(PROPERTY_ID, ORDER_NUM)");
- dropQueries.put(indexName, "DROP INDEX " + indexName);
-
- indexName = "JCR_IDX_" + multiDb + "REF_PROPERTY";
- addQueries.put(indexName, "CREATE UNIQUE INDEX " + indexName + " ON JCR_" + multiDb
- + "REF(PROPERTY_ID, ORDER_NUM)");
- dropQueries.put(indexName, "DROP INDEX " + indexName);
-
- super.prepareQueries(isMultiDb);
- }
-}
Modified: jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/backup/rdbms/SybaseDBRestore.java
===================================================================
--- jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/backup/rdbms/SybaseDBRestore.java 2011-10-24 10:11:04 UTC (rev 5080)
+++ jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/backup/rdbms/SybaseDBRestore.java 2011-10-24 15:04:53 UTC (rev 5081)
@@ -26,7 +26,6 @@
import java.io.File;
import java.sql.Connection;
import java.sql.SQLException;
-import java.util.ArrayList;
import java.util.Map;
import javax.naming.NamingException;
@@ -62,10 +61,12 @@
try
{
// the Sybase is not allowed DDL query (CREATE TABLE, DROP TABLE, etc. ) within a multi-statement transaction
- jdbcConn.setAutoCommit(true);
+ if (!jdbcConn.getAutoCommit())
+ {
+ jdbcConn.setAutoCommit(true);
+ }
- super.prepareQueries(isMultiDb);
- super.executeQueries(dropQueries);
+ super.clean();
}
catch (SQLException e)
{
@@ -82,8 +83,6 @@
LOG.warn("Can't set auto commit to \"false\"", e);
}
}
-
- super.clean();
}
/**
@@ -91,82 +90,51 @@
*/
public void commit() throws BackupException
{
- super.commit();
-
- restoreConstraint();
- }
-
- /**
- * {@inheritDoc}
- */
- public void rollback() throws BackupException
- {
- BackupException rollbackException = null;
-
try
{
- super.rollback();
+ // the Sybase is not allowed DDL query (CREATE TABLE, DROP TABLE, etc. ) within a multi-statement transaction
+ if (!jdbcConn.getAutoCommit())
+ {
+ jdbcConn.setAutoCommit(true);
+ }
+
+ super.commit();
}
- catch (BackupException e)
+ catch (SQLException e)
{
- rollbackException = e;
- throw rollbackException;
+ throw new BackupException(ExceptionManagementHelper.getFullSQLExceptionMessage(e), e);
}
finally
{
try
{
- restoreConstraint();
+ jdbcConn.setAutoCommit(false);
}
- catch (BackupException e)
+ catch (SQLException e)
{
- if (rollbackException != null)
- {
- LOG.error("Can not restore constraint", e);
- throw rollbackException;
- }
- else
- {
- throw e;
- }
+ LOG.warn("Can't set auto commit to \"false\"", e);
}
}
}
/**
- * Restore constraint.
- *
- * @throws BackupException
- * Will throw BackupException if fail.
+ * {@inheritDoc}
*/
- private void restoreConstraint() throws BackupException
+ public void rollback() throws BackupException
{
try
{
- // restore constraint
- jdbcConn.setAutoCommit(true);
-
- if (successfulExecuted.size() == addQueries.size())
+ // the Sybase is not allowed DDL query (CREATE TABLE, DROP TABLE, etc. ) within a multi-statement transaction
+ if (!jdbcConn.getAutoCommit())
{
- executeQueries(addQueries);
+ jdbcConn.setAutoCommit(true);
}
- else
- {
- ArrayList<String> notDeletedConstraints = new ArrayList<String>();
- notDeletedConstraints.addAll(addQueries.keySet());
- notDeletedConstraints.removeAll(successfulExecuted);
- for (String notDeletedConstraint : notDeletedConstraints)
- {
- addQueries.remove(notDeletedConstraint);
- }
-
- executeQueries(addQueries);
- }
+ super.rollback();
}
catch (SQLException e)
{
- throw new BackupException(e);
+ throw new BackupException(ExceptionManagementHelper.getFullSQLExceptionMessage(e), e);
}
finally
{
@@ -184,27 +152,9 @@
/**
* {@inheritDoc}
*/
- public void preRestoreTables(boolean isMultiDb) throws SQLException
+ protected void commitBatch() throws SQLException
{
+ jdbcConn.commit();
}
-
- /**
- * {@inheritDoc}
- */
- public void postRestoreTables(boolean isMultiDb) throws SQLException
- {
- }
-
- /**
- * {@inheritDoc}
- */
- protected String validateConstraintName(String string)
- {
- if (string.equals("JCR_PK_SCONTAINER"))
- {
- return "JCR_PK_MCONTAINER";
- }
-
- return super.validateConstraintName(string);
- }
}
+
Modified: jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/clean/rdbms/DBCleanService.java
===================================================================
--- jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/clean/rdbms/DBCleanService.java 2011-10-24 10:11:04 UTC (rev 5080)
+++ jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/clean/rdbms/DBCleanService.java 2011-10-24 15:04:53 UTC (rev 5081)
@@ -20,7 +20,6 @@
import org.exoplatform.services.jcr.config.RepositoryConfigurationException;
import org.exoplatform.services.jcr.config.RepositoryEntry;
import org.exoplatform.services.jcr.config.WorkspaceEntry;
-import org.exoplatform.services.jcr.impl.Constants;
import org.exoplatform.services.jcr.impl.storage.jdbc.DBConstants;
import org.exoplatform.services.jcr.impl.storage.jdbc.DialectDetecter;
import org.exoplatform.services.jcr.impl.storage.jdbc.JDBCWorkspaceDataContainer;
@@ -31,10 +30,9 @@
import java.io.IOException;
import java.security.PrivilegedExceptionAction;
import java.sql.Connection;
-import java.sql.ResultSet;
import java.sql.SQLException;
-import java.sql.Statement;
import java.util.ArrayList;
+import java.util.Collection;
import java.util.List;
import javax.naming.InitialContext;
@@ -63,6 +61,11 @@
public static final String OLD_OBJECT_SUFFIX = "_OLD";
/**
+ * The constraint name is limited by 18 symbols.
+ */
+ private static final int DB2_CONSTRAINT_NAME_LENGTH_LIMIT = 18;
+
+ /**
* Cleans workspace data from database.
*
* @param wsEntry
@@ -162,36 +165,288 @@
String dialect = DialectDetecter.detect(jdbcConn.getMetaData());
- if (dialect.equals(DBConstants.DB_DIALECT_ORACLE) || dialect.equals(DBConstants.DB_DIALECT_ORACLEOCI))
+ if (dialect.equals(DBConstants.DB_DIALECT_ORACLE) || dialect.equals(DBConstants.DB_DIALECT_ORACLEOCI)
+ || dialect.equals(DBConstants.DB_DIALECT_MYSQL) || dialect.equals(DBConstants.DB_DIALECT_MYSQL_UTF8)
+ || dialect.equals(DBConstants.DB_DIALECT_SYBASE) || dialect.equals(DBConstants.DB_DIALECT_HSQLDB))
{
ArrayList<String> dbCleanerScripts = new ArrayList<String>();
dbCleanerScripts.addAll(getRenameScripts(isMultiDB, dialect));
- dbCleanerScripts.addAll(getInitializationDBScript(isMultiDB, dialect));
+ dbCleanerScripts.addAll(prepareInirializationScript(getInitializationDBScript(isMultiDB, dialect), isMultiDB,
+ dialect));
+ dbCleanerScripts.addAll(getPreTablesRestoreScript(isMultiDB, dialect));
+ ArrayList<String> afterRestoreScript = new ArrayList<String>();
+ afterRestoreScript.addAll(getAfterRestoreScript(isMultiDB, dialect));
+ afterRestoreScript.addAll(getPostTablesRestoreScript(isMultiDB, dialect));
+
return new DBCleaner(jdbcConn, dbCleanerScripts, getRollbackRenamedScript(isMultiDB, dialect),
- getAfterRestoreScript(isMultiDB, dialect));
+ afterRestoreScript);
}
- else if (dialect.equals(DBConstants.DB_DIALECT_HSQLDB))
- {
- ArrayList<String> dbCleanerScripts = new ArrayList<String>();
- dbCleanerScripts.add("delete from JCR_" + (isMultiDB ? "M" : "S") + "VALUE");
- dbCleanerScripts.add("delete from JCR_" + (isMultiDB ? "M" : "S") + "ITEM");
- dbCleanerScripts.add("delete from JCR_" + (isMultiDB ? "M" : "S") + "REF");
- dbCleanerScripts.add("delete from JCR_" + (isMultiDB ? "M" : "S") + "CONTAINER");
- dbCleanerScripts.add(DBInitializerHelper.getRootNodeInitializeScript(isMultiDB));
- return new DBCleaner(jdbcConn, dbCleanerScripts);
- }
-
ArrayList<String> dbCleanerScripts = new ArrayList<String>();
dbCleanerScripts.addAll(getDropTableScripts(isMultiDB, dialect));
dbCleanerScripts.addAll(getInitializationDBScript(isMultiDB, dialect));
+ dbCleanerScripts.addAll(getPreTablesRestoreScript(isMultiDB, dialect));
- return new DBCleaner(jdbcConn, dbCleanerScripts);
+ return new DBCleaner(jdbcConn, dbCleanerScripts, new ArrayList<String>(), getPostTablesRestoreScript(isMultiDB,
+ dialect));
}
/**
+ * Prepare database initialization script.
+ *
+ * @param initializationDBScript
+ * list with scripts
+ * @param isMultiDB
+ * boolean, is multi-db
+ * @param dialect
+ * string, dialect of DB
+ * @return List with database initialization scripts
+ */
+ private static Collection<? extends String> prepareInirializationScript(List<String> initializationDBScript,
+ boolean isMultiDB, String dialect)
+ {
+ if (dialect.equals(DBConstants.DB_DIALECT_MYSQL) || dialect.equals(DBConstants.DB_DIALECT_MYSQL_UTF8))
+ {
+ String multiDb = isMultiDB ? "M" : "S";
+
+ for (int i = 0; i < initializationDBScript.size(); i++)
+ {
+ String query = initializationDBScript.get(i);
+ if (query.contains("JCR_FK_" + multiDb + "ITEM_PARENT")
+ || query.contains("JCR_FK_" + multiDb + "VALUE_PROPERTY"))
+ {
+ initializationDBScript.remove(i);
+ i--;
+ }
+ }
+ }
+ else if (dialect.equals(DBConstants.DB_DIALECT_SYBASE))
+ {
+ String multiDb = isMultiDB ? "M" : "S";
+
+ for (int i = 0; i < initializationDBScript.size(); i++)
+ {
+ String query = initializationDBScript.get(i);
+ if (query.contains("JCR_IDX_" + multiDb + "ITEM_PARENT")
+ || query.contains("JCR_IDX_" + multiDb + "ITEM_PARENT_NAME")
+ || query.contains("JCR_IDX_" + multiDb + "ITEM_PARENT_ID")
+ || query.contains("JCR_IDX_" + multiDb + "VALUE_PROPERTY")
+ || query.contains("JCR_IDX_" + multiDb + "REF_PROPERTY"))
+ {
+ initializationDBScript.remove(i);
+ i--;
+ }
+ }
+ }
+
+ return initializationDBScript;
+ }
+
+ /**
+ * Prepare of restore tables. (Drop constraint, etc...)
+ *
+ * @param isMultiDb
+ * boolean
+ * @param dialect
+ * String, dialect of DB
+ */
+ private static List<String> getPreTablesRestoreScript(boolean isMultiDB, String dialect)
+ {
+ ArrayList<String> dropScript = new ArrayList<String>();
+
+ String multiDb = isMultiDB ? "M" : "S";
+ String constraintName;
+ String constraint;
+
+ if (dialect.equals(DBConstants.DB_DIALECT_MYSQL) || dialect.equals(DBConstants.DB_DIALECT_MYSQL))
+ {
+ return dropScript;
+ }
+
+ constraintName = validateConstraintName("JCR_FK_" + multiDb + "ITEM_PARENT", dialect);
+ constraint = "CONSTRAINT " + constraintName + " FOREIGN KEY(PARENT_ID) REFERENCES JCR_" + multiDb + "ITEM(ID)";
+ dropScript.add("ALTER TABLE JCR_" + multiDb + "ITEM " + dropCommand(false, constraintName, dialect));
+
+ if (dialect.equals(DBConstants.DB_DIALECT_ORACLE) || dialect.equals(DBConstants.DB_DIALECT_ORACLEOCI))
+ {
+ constraintName = validateConstraintName("JCR_PK_" + multiDb + "VALUE", dialect);
+ constraint = "CONSTRAINT " + constraintName + " PRIMARY KEY(ID)";
+ dropScript.add("ALTER TABLE JCR_" + multiDb + "VALUE " + dropCommand(true, constraintName, dialect));
+
+ constraintName = validateConstraintName("JCR_FK_" + multiDb + "VALUE_PROPERTY", dialect);
+ constraint =
+ "CONSTRAINT " + constraintName + " FOREIGN KEY(PROPERTY_ID) REFERENCES JCR_" + multiDb + "ITEM(ID)";
+ dropScript.add("ALTER TABLE JCR_" + multiDb + "VALUE " + dropCommand(false, constraintName, dialect));
+
+ constraintName = validateConstraintName("JCR_PK_" + multiDb + "ITEM", dialect);
+ dropScript.add("ALTER TABLE JCR_" + multiDb + "ITEM " + dropCommand(true, constraintName, dialect));
+
+ constraintName = validateConstraintName("JCR_PK_" + multiDb + "REF", dialect);
+ constraint = "CONSTRAINT " + constraintName + " PRIMARY KEY(NODE_ID, PROPERTY_ID, ORDER_NUM)";
+ dropScript.add("ALTER TABLE JCR_" + multiDb + "REF " + dropCommand(true, constraintName, dialect));
+
+ constraintName = validateConstraintName("JCR_PK_" + multiDb + "CONTAINER", dialect);
+ constraint = "CONSTRAINT " + constraintName + " PRIMARY KEY(VERSION)";
+ dropScript.add("ALTER TABLE JCR_" + multiDb + "CONTAINER " + dropCommand(true, constraintName, dialect));
+
+ dropScript.add("DROP INDEX JCR_IDX_" + multiDb + "ITEM_PARENT_FK");
+ dropScript.add("DROP INDEX JCR_IDX_" + multiDb + "ITEM_PARENT");
+ dropScript.add("DROP INDEX JCR_IDX_" + multiDb + "ITEM_PARENT_NAME");
+ dropScript.add("DROP INDEX JCR_IDX_" + multiDb + "ITEM_PARENT_ID");
+ dropScript.add("DROP INDEX JCR_IDX_" + multiDb + "VALUE_PROPERTY");
+ dropScript.add("DROP INDEX JCR_IDX_" + multiDb + "REF_PROPERTY");
+ }
+ else if (dialect.equals(DBConstants.DB_DIALECT_SYBASE))
+ {
+ dropScript.add("ALTER TABLE JCR_" + multiDb + "VALUE DROP CONSTRAINT JCR_FK_" + multiDb + "VALUE_PROPERTY");
+ dropScript.add("ALTER TABLE JCR_" + multiDb + "ITEM DROP CONSTRAINT JCR_PK_" + multiDb + "ITEM");
+ dropScript.add("ALTER TABLE JCR_" + multiDb + "VALUE DROP CONSTRAINT JCR_PK_" + multiDb + "VALUE");
+ }
+
+ return dropScript;
+ }
+
+ /**
+ * After of restore tables. (Add constraint, etc...)
+ *
+ * @param isMultiDb
+ * boolean
+ * @param dialect
+ * String, dialect of DB
+ */
+ private static List<String> getPostTablesRestoreScript(boolean isMultiDB, String dialect)
+ throws RepositoryConfigurationException
+ {
+ ArrayList<String> addScript = new ArrayList<String>();
+
+ String multiDb = isMultiDB ? "M" : "S";
+
+ String constraintName;
+ String constraint;
+
+ if (dialect.equals(DBConstants.DB_DIALECT_SYBASE))
+ {
+ addScript.add("ALTER TABLE JCR_" + multiDb + "ITEM ADD CONSTRAINT JCR_PK_" + multiDb
+ + "ITEM PRIMARY KEY(ID)");
+ addScript.add("ALTER TABLE JCR_" + multiDb + "VALUE ADD CONSTRAINT JCR_PK_" + multiDb
+ + "VALUE PRIMARY KEY(ID)");
+
+ constraintName = validateConstraintName("JCR_FK_" + multiDb + "ITEM_PARENT", dialect);
+ constraint = "CONSTRAINT " + constraintName + " FOREIGN KEY(PARENT_ID) REFERENCES JCR_" + multiDb + "ITEM(ID)";
+ addScript.add("ALTER TABLE JCR_" + multiDb + "ITEM ADD " + constraint);
+
+ addScript.add("ALTER TABLE JCR_" + multiDb + "VALUE ADD CONSTRAINT JCR_FK_" + multiDb
+ + "VALUE_PROPERTY FOREIGN KEY(PROPERTY_ID) REFERENCES JCR_" + multiDb + "ITEM(ID)");
+
+ addScript.add(DBInitializerHelper.getObjectScript("JCR_IDX_" + multiDb + "ITEM_PARENT", isMultiDB, dialect));
+ addScript.add(DBInitializerHelper.getObjectScript("JCR_IDX_" + multiDb + "ITEM_PARENT_NAME", isMultiDB,
+ dialect));
+ addScript
+ .add(DBInitializerHelper.getObjectScript("JCR_IDX_" + multiDb + "ITEM_PARENT_ID", isMultiDB, dialect));
+ addScript
+ .add(DBInitializerHelper.getObjectScript("JCR_IDX_" + multiDb + "VALUE_PROPERTY", isMultiDB, dialect));
+ addScript.add(DBInitializerHelper.getObjectScript("JCR_IDX_" + multiDb + "REF_PROPERTY", isMultiDB, dialect));
+
+ return addScript;
+ }
+
+ constraintName = validateConstraintName("JCR_FK_" + multiDb + "ITEM_PARENT", dialect);
+ constraint = "CONSTRAINT " + constraintName + " FOREIGN KEY(PARENT_ID) REFERENCES JCR_" + multiDb + "ITEM(ID)";
+ addScript.add("ALTER TABLE JCR_" + multiDb + "ITEM ADD " + constraint);
+
+ if (dialect.equals(DBConstants.DB_DIALECT_MYSQL) || dialect.equals(DBConstants.DB_DIALECT_MYSQL))
+ {
+ constraintName = validateConstraintName("JCR_FK_" + multiDb + "VALUE_PROPERTY", dialect);
+ constraint =
+ "CONSTRAINT " + constraintName + " FOREIGN KEY(PROPERTY_ID) REFERENCES JCR_" + multiDb + "ITEM(ID)";
+ addScript.add("ALTER TABLE JCR_" + multiDb + "VALUE ADD " + constraint);
+ }
+
+ if (dialect.equals(DBConstants.DB_DIALECT_ORACLE) || dialect.equals(DBConstants.DB_DIALECT_ORACLEOCI))
+ {
+ constraintName = validateConstraintName("JCR_PK_" + multiDb + "VALUE", dialect);
+ constraint = "CONSTRAINT " + constraintName + " PRIMARY KEY(ID)";
+ addScript.add("ALTER TABLE JCR_" + multiDb + "VALUE ADD " + constraint);
+
+ constraintName = validateConstraintName("JCR_PK_" + multiDb + "ITEM", dialect);
+ constraint = "CONSTRAINT " + constraintName + " PRIMARY KEY(ID)";
+ addScript.add("ALTER TABLE JCR_" + multiDb + "ITEM ADD " + constraint);
+
+ constraintName = validateConstraintName("JCR_FK_" + multiDb + "VALUE_PROPERTY", dialect);
+ constraint =
+ "CONSTRAINT " + constraintName + " FOREIGN KEY(PROPERTY_ID) REFERENCES JCR_" + multiDb + "ITEM(ID)";
+ addScript.add("ALTER TABLE JCR_" + multiDb + "VALUE ADD " + constraint);
+
+
+ constraintName = validateConstraintName("JCR_PK_" + multiDb + "REF", dialect);
+ constraint = "CONSTRAINT " + constraintName + " PRIMARY KEY(NODE_ID, PROPERTY_ID, ORDER_NUM)";
+ addScript.add("ALTER TABLE JCR_" + multiDb + "REF ADD " + constraint);
+
+ constraintName = validateConstraintName("JCR_PK_" + multiDb + "CONTAINER", dialect);
+ constraint = "CONSTRAINT " + constraintName + " PRIMARY KEY(VERSION)";
+ addScript.add("ALTER TABLE JCR_" + multiDb + "CONTAINER ADD " + constraint);
+
+ addScript.add(DBInitializerHelper.getObjectScript("JCR_IDX_" + multiDb + "ITEM_PARENT_FK", isMultiDB, dialect));
+ addScript.add(DBInitializerHelper.getObjectScript("JCR_IDX_" + multiDb + "ITEM_PARENT", isMultiDB, dialect));
+ addScript.add(DBInitializerHelper.getObjectScript("JCR_IDX_" + multiDb + "ITEM_PARENT_NAME", isMultiDB, dialect));
+ addScript.add(DBInitializerHelper.getObjectScript("JCR_IDX_" + multiDb + "ITEM_PARENT_ID", isMultiDB, dialect));
+ addScript
+ .add(DBInitializerHelper.getObjectScript("JCR_IDX_" + multiDb + "VALUE_PROPERTY", isMultiDB, dialect));
+ addScript.add(DBInitializerHelper.getObjectScript("JCR_IDX_" + multiDb + "REF_PROPERTY", isMultiDB, dialect));
+ }
+
+ return addScript;
+ }
+
+ /**
+ * Validate name of constraint. For some DBs constrains name is limited.
+ *
+ * @param string
+ * the constraint name
+ * @param dialect
+ * String, dialect of DB
+ * @return the constraint name accepted for specific DB
+ */
+ private static String validateConstraintName(String string, String dialect)
+ {
+ if (dialect.equals(DBConstants.DB_DIALECT_DB2) || dialect.equals(DBConstants.DB_DIALECT_DB2V8))
+ {
+ return string.substring(0, DB2_CONSTRAINT_NAME_LENGTH_LIMIT);
+ }
+ else if (dialect.equals(DBConstants.DB_DIALECT_SYBASE) && string.equals("JCR_PK_SCONTAINER"))
+ {
+ return "JCR_PK_MCONTAINER";
+ }
+ else
+ {
+ return string;
+ }
+ }
+
+ /**
+ * Return the command to drop primary or foreign key.
+ *
+ * @param isPrimaryKey
+ * boolean
+ * @param dialect
+ * String, dialect of DB
+ * @return String
+ */
+ protected static String dropCommand(boolean isPrimaryKey, String constraintName, String dialect)
+ {
+ if (dialect.equals(DBConstants.DB_DIALECT_MYSQL) || dialect.equals(DBConstants.DB_DIALECT_MYSQL_UTF8))
+ {
+ return isPrimaryKey == true ? "DROP PRIMARY KEY" : "DROP FOREIGN KEY " + constraintName;
+ }
+ else
+ {
+ return "DROP CONSTRAINT " + constraintName;
+ }
+ }
+
+ /**
* Create list with queries to drop tables, etc...
*
* @param multiDb
@@ -234,61 +489,130 @@
List<String> renameScripts = new ArrayList<String>();
- // JCR_[S,M]VALUE
- renameScripts.add("ALTER TABLE JCR_" + isMultiDB + "VALUE RENAME TO JCR_" + isMultiDB + "VALUE"
- + OLD_OBJECT_SUFFIX);
- renameScripts.add("ALTER TABLE JCR_" + isMultiDB + "VALUE" + OLD_OBJECT_SUFFIX + " RENAME CONSTRAINT JCR_PK_"
- + isMultiDB + "VALUE TO JCR_PK_" + isMultiDB + "VALUE" + OLD_OBJECT_SUFFIX);
- renameScripts.add("ALTER TABLE JCR_" + isMultiDB + "VALUE" + OLD_OBJECT_SUFFIX + " RENAME CONSTRAINT JCR_FK_"
- + isMultiDB + "VALUE_PROPERTY TO JCR_FK_" + isMultiDB + "VALUE_PROPERTY" + OLD_OBJECT_SUFFIX);
- renameScripts.add("ALTER INDEX JCR_PK_" + isMultiDB + "VALUE RENAME TO JCR_PK_" + isMultiDB + "VALUE"
- + OLD_OBJECT_SUFFIX);
- renameScripts.add("ALTER INDEX JCR_IDX_" + isMultiDB + "VALUE_PROPERTY RENAME TO JCR_IDX_" + isMultiDB
- + "VALUE_PROPERTY" + OLD_OBJECT_SUFFIX);
-
if (dialect.equals(DBConstants.DB_DIALECT_ORACLE) || dialect.equals(DBConstants.DB_DIALECT_ORACLEOCI))
{
+ // JCR_[S,M]VALUE
+ renameScripts.add("ALTER TABLE JCR_" + isMultiDB + "VALUE RENAME TO JCR_" + isMultiDB + "VALUE"
+ + OLD_OBJECT_SUFFIX);
+ renameScripts.add("ALTER TABLE JCR_" + isMultiDB + "VALUE" + OLD_OBJECT_SUFFIX + " RENAME CONSTRAINT JCR_PK_"
+ + isMultiDB + "VALUE TO JCR_PK_" + isMultiDB + "VALUE" + OLD_OBJECT_SUFFIX);
+ renameScripts.add("ALTER TABLE JCR_" + isMultiDB + "VALUE" + OLD_OBJECT_SUFFIX + " RENAME CONSTRAINT JCR_FK_"
+ + isMultiDB + "VALUE_PROPERTY TO JCR_FK_" + isMultiDB + "VALUE_PROPERTY" + OLD_OBJECT_SUFFIX);
+ renameScripts.add("ALTER INDEX JCR_PK_" + isMultiDB + "VALUE RENAME TO JCR_PK_" + isMultiDB + "VALUE"
+ + OLD_OBJECT_SUFFIX);
+ renameScripts.add("ALTER INDEX JCR_IDX_" + isMultiDB + "VALUE_PROPERTY RENAME TO JCR_IDX_" + isMultiDB
+ + "VALUE_PROPERTY" + OLD_OBJECT_SUFFIX);
+
renameScripts.add("RENAME JCR_" + isMultiDB + "VALUE_SEQ TO JCR_" + isMultiDB + "VALUE_SEQ"
+ OLD_OBJECT_SUFFIX);
renameScripts.add("ALTER TRIGGER BI_JCR_" + isMultiDB + "VALUE RENAME TO BI_JCR_" + isMultiDB + "VALUE"
+ OLD_OBJECT_SUFFIX);
+
+ // JCR_[S,M]ITEM
+ renameScripts.add("ALTER TABLE JCR_" + isMultiDB + "ITEM RENAME TO JCR_" + isMultiDB + "ITEM"
+ + OLD_OBJECT_SUFFIX);
+ renameScripts.add("ALTER TABLE JCR_" + isMultiDB + "ITEM" + OLD_OBJECT_SUFFIX + " RENAME CONSTRAINT JCR_PK_"
+ + isMultiDB + "ITEM TO JCR_PK_" + isMultiDB + "ITEM" + OLD_OBJECT_SUFFIX);
+ renameScripts.add("ALTER TABLE JCR_" + isMultiDB + "ITEM" + OLD_OBJECT_SUFFIX + " RENAME CONSTRAINT JCR_FK_"
+ + isMultiDB + "ITEM_PARENT TO JCR_FK_" + isMultiDB + "ITEM_PARENT" + OLD_OBJECT_SUFFIX);
+ renameScripts.add("ALTER INDEX JCR_PK_" + isMultiDB + "ITEM RENAME TO JCR_PK_" + isMultiDB + "ITEM"
+ + OLD_OBJECT_SUFFIX);
+ renameScripts.add("ALTER INDEX JCR_IDX_" + isMultiDB + "ITEM_PARENT_FK RENAME TO JCR_IDX_" + isMultiDB
+ + "ITEM_PARENT_FK" + OLD_OBJECT_SUFFIX);
+ renameScripts.add("ALTER INDEX JCR_IDX_" + isMultiDB + "ITEM_PARENT RENAME TO JCR_IDX_" + isMultiDB
+ + "ITEM_PARENT" + OLD_OBJECT_SUFFIX);
+ renameScripts.add("ALTER INDEX JCR_IDX_" + isMultiDB + "ITEM_PARENT_NAME RENAME TO JCR_IDX_" + isMultiDB
+ + "ITEM_PARENT_NAME" + OLD_OBJECT_SUFFIX);
+ renameScripts.add("ALTER INDEX JCR_IDX_" + isMultiDB + "ITEM_PARENT_ID RENAME TO JCR_IDX_" + isMultiDB
+ + "ITEM_PARENT_ID" + OLD_OBJECT_SUFFIX);
+
+ // JCR_[S,M]CONTAINER
+ renameScripts.add("ALTER TABLE JCR_" + isMultiDB + "CONTAINER RENAME TO JCR_" + isMultiDB + "CONTAINER"
+ + OLD_OBJECT_SUFFIX);
+ renameScripts.add("ALTER TABLE JCR_" + isMultiDB + "CONTAINER" + OLD_OBJECT_SUFFIX
+ + " RENAME CONSTRAINT JCR_PK_" + isMultiDB + "CONTAINER TO JCR_PK_" + isMultiDB + "CONTAINER"
+ + OLD_OBJECT_SUFFIX);
+ renameScripts.add("ALTER INDEX JCR_PK_" + isMultiDB + "CONTAINER RENAME TO JCR_PK_" + isMultiDB + "CONTAINER"
+ + OLD_OBJECT_SUFFIX);
+
+ // JCR_[S,M]REF
+ renameScripts.add("ALTER TABLE JCR_" + isMultiDB + "REF RENAME TO JCR_" + isMultiDB + "REF"
+ + OLD_OBJECT_SUFFIX);
+ renameScripts.add("ALTER TABLE JCR_" + isMultiDB + "REF" + OLD_OBJECT_SUFFIX + " RENAME CONSTRAINT JCR_PK_"
+ + isMultiDB + "REF TO JCR_PK_" + isMultiDB + "REF" + OLD_OBJECT_SUFFIX);
+ renameScripts.add("ALTER INDEX JCR_PK_" + isMultiDB + "REF RENAME TO JCR_PK_" + isMultiDB + "REF"
+ + OLD_OBJECT_SUFFIX);
+ renameScripts.add("ALTER INDEX JCR_IDX_" + isMultiDB + "REF_PROPERTY RENAME TO JCR_IDX_" + isMultiDB
+ + "REF_PROPERTY" + OLD_OBJECT_SUFFIX);
}
+ else if (dialect.equals(DBConstants.DB_DIALECT_MYSQL) || dialect.equals(DBConstants.DB_DIALECT_MYSQL_UTF8))
+ {
+ renameScripts.add("ALTER TABLE JCR_" + isMultiDB + "VALUE RENAME TO JCR_" + isMultiDB + "VALUE"
+ + OLD_OBJECT_SUFFIX);
+ renameScripts.add("ALTER TABLE JCR_" + isMultiDB + "ITEM RENAME TO JCR_" + isMultiDB + "ITEM"
+ + OLD_OBJECT_SUFFIX);
- // JCR_[S,M]ITEM
- renameScripts
- .add("ALTER TABLE JCR_" + isMultiDB + "ITEM RENAME TO JCR_" + isMultiDB + "ITEM" + OLD_OBJECT_SUFFIX);
- renameScripts.add("ALTER TABLE JCR_" + isMultiDB + "ITEM" + OLD_OBJECT_SUFFIX + " RENAME CONSTRAINT JCR_PK_"
- + isMultiDB + "ITEM TO JCR_PK_" + isMultiDB + "ITEM" + OLD_OBJECT_SUFFIX);
- renameScripts.add("ALTER TABLE JCR_" + isMultiDB + "ITEM" + OLD_OBJECT_SUFFIX + " RENAME CONSTRAINT JCR_FK_"
- + isMultiDB + "ITEM_PARENT TO JCR_FK_" + isMultiDB + "ITEM_PARENT" + OLD_OBJECT_SUFFIX);
- renameScripts.add("ALTER INDEX JCR_PK_" + isMultiDB + "ITEM RENAME TO JCR_PK_" + isMultiDB + "ITEM"
- + OLD_OBJECT_SUFFIX);
- renameScripts.add("ALTER INDEX JCR_IDX_" + isMultiDB + "ITEM_PARENT_FK RENAME TO JCR_IDX_" + isMultiDB
- + "ITEM_PARENT_FK" + OLD_OBJECT_SUFFIX);
- renameScripts.add("ALTER INDEX JCR_IDX_" + isMultiDB + "ITEM_PARENT RENAME TO JCR_IDX_" + isMultiDB
- + "ITEM_PARENT" + OLD_OBJECT_SUFFIX);
- renameScripts.add("ALTER INDEX JCR_IDX_" + isMultiDB + "ITEM_PARENT_NAME RENAME TO JCR_IDX_" + isMultiDB
- + "ITEM_PARENT_NAME" + OLD_OBJECT_SUFFIX);
- renameScripts.add("ALTER INDEX JCR_IDX_" + isMultiDB + "ITEM_PARENT_ID RENAME TO JCR_IDX_" + isMultiDB
- + "ITEM_PARENT_ID" + OLD_OBJECT_SUFFIX);
+ renameScripts.add("ALTER TABLE JCR_" + isMultiDB + "REF RENAME TO JCR_" + isMultiDB + "REF"
+ + OLD_OBJECT_SUFFIX);
- // JCR_[S,M]CONTAINER
- renameScripts.add("ALTER TABLE JCR_" + isMultiDB + "CONTAINER RENAME TO JCR_" + isMultiDB + "CONTAINER"
- + OLD_OBJECT_SUFFIX);
- renameScripts.add("ALTER TABLE JCR_" + isMultiDB + "CONTAINER" + OLD_OBJECT_SUFFIX + " RENAME CONSTRAINT JCR_PK_"
- + isMultiDB + "CONTAINER TO JCR_PK_" + isMultiDB + "CONTAINER" + OLD_OBJECT_SUFFIX);
- renameScripts.add("ALTER INDEX JCR_PK_" + isMultiDB + "CONTAINER RENAME TO JCR_PK_" + isMultiDB + "CONTAINER"
- + OLD_OBJECT_SUFFIX);
+ renameScripts.add("ALTER TABLE JCR_" + isMultiDB + "CONTAINER RENAME TO JCR_" + isMultiDB + "CONTAINER"
+ + OLD_OBJECT_SUFFIX);
+ }
+ else if (dialect.equals(DBConstants.DB_DIALECT_SYBASE))
+ {
+ renameScripts.add("sp_rename JCR_" + isMultiDB + "VALUE, JCR_" + isMultiDB + "VALUE" + OLD_OBJECT_SUFFIX);
+ renameScripts.add("sp_rename JCR_" + isMultiDB + "ITEM, JCR_" + isMultiDB + "ITEM" + OLD_OBJECT_SUFFIX);
+ renameScripts.add("sp_rename JCR_" + isMultiDB + "CONTAINER, JCR_" + isMultiDB + "CONTAINER" + OLD_OBJECT_SUFFIX);
+ renameScripts.add("sp_rename JCR_" + isMultiDB + "REF, JCR_" + isMultiDB + "REF" + OLD_OBJECT_SUFFIX);
+ renameScripts.add("sp_rename JCR_FK_" + isMultiDB + "VALUE_PROPERTY, JCR_FK_" + isMultiDB + "VALUE_PROPERTY"
+ + OLD_OBJECT_SUFFIX);
+ renameScripts.add("sp_rename JCR_FK_" + isMultiDB + "ITEM_PARENT, JCR_FK_" + isMultiDB + "ITEM_PARENT_OLD");
+ }
+ else if (dialect.equals(DBConstants.DB_DIALECT_HSQLDB))
+ {
+ renameScripts.add("ALTER TABLE JCR_" + isMultiDB + "VALUE RENAME TO JCR_" + isMultiDB + "VALUE"
+ + OLD_OBJECT_SUFFIX);
+ renameScripts.add("ALTER TABLE JCR_" + isMultiDB + "ITEM RENAME TO JCR_" + isMultiDB + "ITEM"
+ + OLD_OBJECT_SUFFIX);
+ renameScripts.add("ALTER TABLE JCR_" + isMultiDB + "CONTAINER RENAME TO JCR_" + isMultiDB + "CONTAINER"
+ + OLD_OBJECT_SUFFIX);
+ renameScripts
+ .add("ALTER TABLE JCR_" + isMultiDB + "REF RENAME TO JCR_" + isMultiDB + "REF" + OLD_OBJECT_SUFFIX);
- // JCR_[S,M]REF
- renameScripts.add("ALTER TABLE JCR_" + isMultiDB + "REF RENAME TO JCR_" + isMultiDB + "REF" + OLD_OBJECT_SUFFIX);
- renameScripts.add("ALTER TABLE JCR_" + isMultiDB + "REF" + OLD_OBJECT_SUFFIX + " RENAME CONSTRAINT JCR_PK_"
- + isMultiDB + "REF TO JCR_PK_" + isMultiDB + "REF" + OLD_OBJECT_SUFFIX);
- renameScripts.add("ALTER INDEX JCR_PK_" + isMultiDB + "REF RENAME TO JCR_PK_" + isMultiDB + "REF"
- + OLD_OBJECT_SUFFIX);
- renameScripts.add("ALTER INDEX JCR_IDX_" + isMultiDB + "REF_PROPERTY RENAME TO JCR_IDX_" + isMultiDB
- + "REF_PROPERTY" + OLD_OBJECT_SUFFIX);
+ renameScripts.add("ALTER TABLE JCR_" + isMultiDB + "VALUE" + OLD_OBJECT_SUFFIX + " DROP CONSTRAINT JCR_FK_"
+ + isMultiDB + "VALUE_PROPERTY");
+ renameScripts.add("ALTER TABLE JCR_" + isMultiDB + "ITEM" + OLD_OBJECT_SUFFIX + " DROP CONSTRAINT JCR_FK_"
+ + isMultiDB + "ITEM_PARENT");
+
+ renameScripts.add("ALTER TABLE JCR_" + isMultiDB + "CONTAINER" + OLD_OBJECT_SUFFIX
+ + " DROP CONSTRAINT JCR_PK_" + isMultiDB + "CONTAINER");
+
+ renameScripts.add("ALTER TABLE JCR_" + isMultiDB + "ITEM" + OLD_OBJECT_SUFFIX + " DROP CONSTRAINT JCR_PK_"
+ + isMultiDB + "ITEM");
+
+ renameScripts.add("ALTER TABLE JCR_" + isMultiDB + "VALUE" + OLD_OBJECT_SUFFIX + " DROP CONSTRAINT JCR_PK_"
+ + isMultiDB + "VALUE");
+
+ renameScripts.add("ALTER TABLE JCR_" + isMultiDB + "REF" + OLD_OBJECT_SUFFIX + " DROP CONSTRAINT JCR_PK_"
+ + isMultiDB + "REF");
+
+ renameScripts.add("ALTER INDEX JCR_IDX_" + isMultiDB + "ITEM_PARENT RENAME TO JCR_IDX_" + isMultiDB
+ + "ITEM_PARENT" + OLD_OBJECT_SUFFIX);
+
+ renameScripts.add("ALTER INDEX JCR_IDX_" + isMultiDB + "ITEM_PARENT_NAME RENAME TO JCR_IDX_" + isMultiDB
+ + "ITEM_PARENT_NAME" + OLD_OBJECT_SUFFIX);
+
+ renameScripts.add("ALTER INDEX JCR_IDX_" + isMultiDB + "ITEM_PARENT_ID RENAME TO JCR_IDX_" + isMultiDB
+ + "ITEM_PARENT_ID" + OLD_OBJECT_SUFFIX);
+
+ renameScripts.add("ALTER INDEX JCR_IDX_" + isMultiDB + "VALUE_PROPERTY RENAME TO JCR_IDX_" + isMultiDB
+ + "VALUE_PROPERTY" + OLD_OBJECT_SUFFIX);
+
+ renameScripts.add("ALTER INDEX JCR_IDX_" + isMultiDB + "REF_PROPERTY RENAME TO JCR_IDX_" + isMultiDB
+ + "REF_PROPERTY" + OLD_OBJECT_SUFFIX);
+ }
+
return renameScripts;
}
@@ -301,8 +625,10 @@
* string
* @return List
* return list with query
+ * @throws RepositoryConfigurationException
*/
protected static List<String> getRollbackRenamedScript(boolean multiDb, String dialect)
+ throws RepositoryConfigurationException
{
final String isMultiDB = (multiDb ? "M" : "S");
@@ -310,62 +636,140 @@
rollbackScripts.addAll(getDropTableScripts(multiDb, dialect));
- // JCR_[S,M]VALUE
- rollbackScripts.add("ALTER TABLE JCR_" + isMultiDB + "VALUE" + OLD_OBJECT_SUFFIX + " RENAME TO JCR_" + isMultiDB
- + "VALUE");
- rollbackScripts.add("ALTER TABLE JCR_" + isMultiDB + "VALUE RENAME CONSTRAINT JCR_PK_" + isMultiDB
- + "VALUE" + OLD_OBJECT_SUFFIX + " TO JCR_PK_" + isMultiDB + "VALUE");
- rollbackScripts.add("ALTER TABLE JCR_" + isMultiDB + "VALUE RENAME CONSTRAINT JCR_FK_" + isMultiDB
- + "VALUE_PROPERTY" + OLD_OBJECT_SUFFIX + " TO JCR_FK_" + isMultiDB + "VALUE_PROPERTY");
- rollbackScripts.add("ALTER INDEX JCR_PK_" + isMultiDB + "VALUE" + OLD_OBJECT_SUFFIX + " RENAME TO JCR_PK_"
- + isMultiDB + "VALUE");
- rollbackScripts.add("ALTER INDEX JCR_IDX_" + isMultiDB + "VALUE_PROPERTY" + OLD_OBJECT_SUFFIX
- + " RENAME TO JCR_IDX_" + isMultiDB + "VALUE_PROPERTY");
-
if (dialect.equals(DBConstants.DB_DIALECT_ORACLE) || dialect.equals(DBConstants.DB_DIALECT_ORACLEOCI))
{
+ // JCR_[S,M]VALUE
+ rollbackScripts.add("ALTER TABLE JCR_" + isMultiDB + "VALUE" + OLD_OBJECT_SUFFIX + " RENAME TO JCR_" + isMultiDB
+ + "VALUE");
+ rollbackScripts.add("ALTER TABLE JCR_" + isMultiDB + "VALUE RENAME CONSTRAINT JCR_PK_" + isMultiDB
+ + "VALUE" + OLD_OBJECT_SUFFIX + " TO JCR_PK_" + isMultiDB + "VALUE");
+ rollbackScripts.add("ALTER TABLE JCR_" + isMultiDB + "VALUE RENAME CONSTRAINT JCR_FK_" + isMultiDB
+ + "VALUE_PROPERTY" + OLD_OBJECT_SUFFIX + " TO JCR_FK_" + isMultiDB + "VALUE_PROPERTY");
+ rollbackScripts.add("ALTER INDEX JCR_PK_" + isMultiDB + "VALUE" + OLD_OBJECT_SUFFIX + " RENAME TO JCR_PK_"
+ + isMultiDB + "VALUE");
+ rollbackScripts.add("ALTER INDEX JCR_IDX_" + isMultiDB + "VALUE_PROPERTY" + OLD_OBJECT_SUFFIX
+ + " RENAME TO JCR_IDX_" + isMultiDB + "VALUE_PROPERTY");
+
rollbackScripts.add("RENAME JCR_" + isMultiDB + "VALUE_SEQ" + OLD_OBJECT_SUFFIX + " TO JCR_" + isMultiDB
+ "VALUE_SEQ");
rollbackScripts.add("ALTER TRIGGER BI_JCR_" + isMultiDB + "VALUE" + OLD_OBJECT_SUFFIX + " RENAME TO BI_JCR_"
+ isMultiDB + "VALUE");
+
+ // JCR_[S,M]ITEM
+ rollbackScripts.add("ALTER TABLE JCR_" + isMultiDB + "ITEM" + OLD_OBJECT_SUFFIX + " RENAME TO JCR_" + isMultiDB
+ + "ITEM");
+ rollbackScripts.add("ALTER TABLE JCR_" + isMultiDB + "ITEM RENAME CONSTRAINT JCR_PK_" + isMultiDB
+ + "ITEM" + OLD_OBJECT_SUFFIX + " TO JCR_PK_" + isMultiDB + "ITEM");
+ rollbackScripts.add("ALTER TABLE JCR_" + isMultiDB + "ITEM RENAME CONSTRAINT JCR_FK_" + isMultiDB
+ + "ITEM_PARENT" + OLD_OBJECT_SUFFIX + " TO JCR_FK_" + isMultiDB + "ITEM_PARENT");
+ rollbackScripts.add("ALTER INDEX JCR_PK_" + isMultiDB + "ITEM" + OLD_OBJECT_SUFFIX + " RENAME TO JCR_PK_"
+ + isMultiDB + "ITEM");
+ rollbackScripts.add("ALTER INDEX JCR_IDX_" + isMultiDB + "ITEM_PARENT_FK" + OLD_OBJECT_SUFFIX
+ + " RENAME TO JCR_IDX_" + isMultiDB + "ITEM_PARENT_FK");
+ rollbackScripts.add("ALTER INDEX JCR_IDX_" + isMultiDB + "ITEM_PARENT" + OLD_OBJECT_SUFFIX
+ + " RENAME TO JCR_IDX_" + isMultiDB + "ITEM_PARENT");
+ rollbackScripts.add("ALTER INDEX JCR_IDX_" + isMultiDB + "ITEM_PARENT_NAME" + OLD_OBJECT_SUFFIX
+ + " RENAME TO JCR_IDX_" + isMultiDB + "ITEM_PARENT_NAME");
+ rollbackScripts.add("ALTER INDEX JCR_IDX_" + isMultiDB + "ITEM_PARENT_ID" + OLD_OBJECT_SUFFIX
+ + " RENAME TO JCR_IDX_" + isMultiDB + "ITEM_PARENT_ID");
+
+ // JCR_[S,M]CONTAINER
+ rollbackScripts.add("ALTER TABLE JCR_" + isMultiDB + "CONTAINER" + OLD_OBJECT_SUFFIX + " RENAME TO JCR_"
+ + isMultiDB + "CONTAINER");
+ rollbackScripts.add("ALTER TABLE JCR_" + isMultiDB + "CONTAINER RENAME CONSTRAINT JCR_PK_" + isMultiDB
+ + "CONTAINER" + OLD_OBJECT_SUFFIX + " TO JCR_PK_" + isMultiDB + "CONTAINER");
+ rollbackScripts.add("ALTER INDEX JCR_PK_" + isMultiDB + "CONTAINER" + OLD_OBJECT_SUFFIX + " RENAME TO JCR_PK_"
+ + isMultiDB + "CONTAINER");
+
+ // JCR_[S,M]REF
+ rollbackScripts.add("ALTER TABLE JCR_" + isMultiDB + "REF" + OLD_OBJECT_SUFFIX + " RENAME TO JCR_" + isMultiDB
+ + "REF");
+ rollbackScripts.add("ALTER TABLE JCR_" + isMultiDB + "REF RENAME CONSTRAINT JCR_PK_" + isMultiDB
+ + "REF" + OLD_OBJECT_SUFFIX + " TO JCR_PK_" + isMultiDB + "REF");
+ rollbackScripts.add("ALTER INDEX JCR_PK_" + isMultiDB + "REF" + OLD_OBJECT_SUFFIX + " RENAME TO JCR_PK_"
+ + isMultiDB + "REF");
+ rollbackScripts.add("ALTER INDEX JCR_IDX_" + isMultiDB + "REF_PROPERTY" + OLD_OBJECT_SUFFIX
+ + " RENAME TO JCR_IDX_" + isMultiDB + "REF_PROPERTY");
}
+ else if (dialect.equals(DBConstants.DB_DIALECT_MYSQL) || dialect.equals(DBConstants.DB_DIALECT_MYSQL_UTF8))
+ {
+ rollbackScripts.add("ALTER TABLE JCR_" + isMultiDB + "ITEM" + OLD_OBJECT_SUFFIX + " RENAME TO JCR_"
+ + isMultiDB + "ITEM");
- // JCR_[S,M]ITEM
- rollbackScripts.add("ALTER TABLE JCR_" + isMultiDB + "ITEM" + OLD_OBJECT_SUFFIX + " RENAME TO JCR_" + isMultiDB
- + "ITEM");
- rollbackScripts.add("ALTER TABLE JCR_" + isMultiDB + "ITEM RENAME CONSTRAINT JCR_PK_" + isMultiDB
- + "ITEM" + OLD_OBJECT_SUFFIX + " TO JCR_PK_" + isMultiDB + "ITEM");
- rollbackScripts.add("ALTER TABLE JCR_" + isMultiDB + "ITEM RENAME CONSTRAINT JCR_FK_" + isMultiDB
- + "ITEM_PARENT" + OLD_OBJECT_SUFFIX + " TO JCR_FK_" + isMultiDB + "ITEM_PARENT");
- rollbackScripts.add("ALTER INDEX JCR_PK_" + isMultiDB + "ITEM" + OLD_OBJECT_SUFFIX + " RENAME TO JCR_PK_"
- + isMultiDB + "ITEM");
- rollbackScripts.add("ALTER INDEX JCR_IDX_" + isMultiDB + "ITEM_PARENT_FK" + OLD_OBJECT_SUFFIX
- + " RENAME TO JCR_IDX_" + isMultiDB + "ITEM_PARENT_FK");
- rollbackScripts.add("ALTER INDEX JCR_IDX_" + isMultiDB + "ITEM_PARENT" + OLD_OBJECT_SUFFIX
- + " RENAME TO JCR_IDX_" + isMultiDB + "ITEM_PARENT");
- rollbackScripts.add("ALTER INDEX JCR_IDX_" + isMultiDB + "ITEM_PARENT_NAME" + OLD_OBJECT_SUFFIX
- + " RENAME TO JCR_IDX_" + isMultiDB + "ITEM_PARENT_NAME");
- rollbackScripts.add("ALTER INDEX JCR_IDX_" + isMultiDB + "ITEM_PARENT_ID" + OLD_OBJECT_SUFFIX
- + " RENAME TO JCR_IDX_" + isMultiDB + "ITEM_PARENT_ID");
+ rollbackScripts.add("ALTER TABLE JCR_" + isMultiDB + "ITEM ADD CONSTRAINT JCR_FK_" + isMultiDB
+ + "ITEM_PARENT FOREIGN KEY(PARENT_ID) REFERENCES JCR_" + isMultiDB + "ITEM(ID)");
- // JCR_[S,M]CONTAINER
- rollbackScripts.add("ALTER TABLE JCR_" + isMultiDB + "CONTAINER" + OLD_OBJECT_SUFFIX + " RENAME TO JCR_"
- + isMultiDB + "CONTAINER");
- rollbackScripts.add("ALTER TABLE JCR_" + isMultiDB + "CONTAINER RENAME CONSTRAINT JCR_PK_" + isMultiDB
- + "CONTAINER" + OLD_OBJECT_SUFFIX + " TO JCR_PK_" + isMultiDB + "CONTAINER");
- rollbackScripts.add("ALTER INDEX JCR_PK_" + isMultiDB + "CONTAINER" + OLD_OBJECT_SUFFIX + " RENAME TO JCR_PK_"
- + isMultiDB + "CONTAINER");
+ rollbackScripts.add("ALTER TABLE JCR_" + isMultiDB + "VALUE" + OLD_OBJECT_SUFFIX + " RENAME TO JCR_"
+ + isMultiDB + "VALUE");
+ rollbackScripts.add("ALTER TABLE JCR_" + isMultiDB + "VALUE ADD CONSTRAINT JCR_FK_" + isMultiDB
+ + "VALUE_PROPERTY FOREIGN KEY(PROPERTY_ID) REFERENCES JCR_" + isMultiDB + "ITEM(ID)");
- // JCR_[S,M]REF
- rollbackScripts.add("ALTER TABLE JCR_" + isMultiDB + "REF" + OLD_OBJECT_SUFFIX + " RENAME TO JCR_" + isMultiDB
- + "REF");
- rollbackScripts.add("ALTER TABLE JCR_" + isMultiDB + "REF RENAME CONSTRAINT JCR_PK_" + isMultiDB
- + "REF" + OLD_OBJECT_SUFFIX + " TO JCR_PK_" + isMultiDB + "REF");
- rollbackScripts.add("ALTER INDEX JCR_PK_" + isMultiDB + "REF" + OLD_OBJECT_SUFFIX + " RENAME TO JCR_PK_"
- + isMultiDB + "REF");
- rollbackScripts.add("ALTER INDEX JCR_IDX_" + isMultiDB + "REF_PROPERTY" + OLD_OBJECT_SUFFIX
- + " RENAME TO JCR_IDX_" + isMultiDB + "REF_PROPERTY");
+ rollbackScripts.add("ALTER TABLE JCR_" + isMultiDB + "CONTAINER" + OLD_OBJECT_SUFFIX + " RENAME TO JCR_"
+ + isMultiDB + "CONTAINER");
+ rollbackScripts.add("ALTER TABLE JCR_" + isMultiDB + "REF" + OLD_OBJECT_SUFFIX + " RENAME TO JCR_" + isMultiDB
+ + "REF");
+ }
+ else if (dialect.equals(DBConstants.DB_DIALECT_SYBASE))
+ {
+ rollbackScripts.add("sp_rename JCR_" + isMultiDB + "VALUE" + OLD_OBJECT_SUFFIX + ", JCR_" + isMultiDB
+ + "VALUE");
+ rollbackScripts.add("sp_rename JCR_" + isMultiDB + "ITEM" + OLD_OBJECT_SUFFIX + ", JCR_" + isMultiDB + "ITEM");
+ rollbackScripts.add("sp_rename JCR_" + isMultiDB + "CONTAINER" + OLD_OBJECT_SUFFIX + ", JCR_" + isMultiDB
+ + "CONTAINER");
+ rollbackScripts.add("sp_rename JCR_" + isMultiDB + "REF" + OLD_OBJECT_SUFFIX + ", JCR_" + isMultiDB + "REF");
+
+ rollbackScripts.add("sp_rename JCR_FK_" + isMultiDB + "VALUE_PROPERTY" + OLD_OBJECT_SUFFIX + ", JCR_FK_"
+ + isMultiDB + "VALUE_PROPERTY");
+
+ rollbackScripts.add("sp_rename JCR_FK_" + isMultiDB + "ITEM_PARENT" + OLD_OBJECT_SUFFIX + ", JCR_FK_"
+ + isMultiDB + "ITEM_PARENT");
+ }
+ else if (dialect.equals(DBConstants.DB_DIALECT_HSQLDB))
+ {
+ rollbackScripts.add("ALTER TABLE JCR_" + isMultiDB + "VALUE" + OLD_OBJECT_SUFFIX + " RENAME TO JCR_"
+ + isMultiDB + "VALUE");
+ rollbackScripts.add("ALTER TABLE JCR_" + isMultiDB + "ITEM" + OLD_OBJECT_SUFFIX + " RENAME TO JCR_"
+ + isMultiDB + "ITEM");
+ rollbackScripts.add("ALTER TABLE JCR_" + isMultiDB + "CONTAINER" + OLD_OBJECT_SUFFIX + " RENAME TO JCR_"
+ + isMultiDB + "CONTAINER");
+ rollbackScripts.add("ALTER TABLE JCR_" + isMultiDB + "REF" + OLD_OBJECT_SUFFIX + " RENAME TO JCR_" + isMultiDB
+ + "REF");
+
+ rollbackScripts.add("ALTER TABLE JCR_" + isMultiDB + "VALUE ADD CONSTRAINT JCR_FK_" + isMultiDB
+ + "VALUE_PROPERTY FOREIGN KEY(PROPERTY_ID) REFERENCES JCR_" + isMultiDB + "ITEM(ID");
+
+ rollbackScripts.add("ALTER TABLE JCR_" + isMultiDB + "ITEM ADD CONSTRAINT JCR_FK_" + isMultiDB
+ + "ITEM_PARENT FOREIGN KEY(PARENT_ID) REFERENCES JCR_" + isMultiDB + "ITEM(ID)");
+
+ rollbackScripts.add("ALTER TABLE JCR_" + isMultiDB + "CONTAINER ADD CONSTRAINT JCR_PK_" + isMultiDB
+ + "CONTAINER PRIMARY KEY(VERSION)");
+
+ rollbackScripts.add("ALTER TABLE JCR_" + isMultiDB + "ITEM ADD CONSTRAINT JCR_PK_" + isMultiDB
+ + "ITEM PRIMARY KEY(ID)");
+
+ rollbackScripts.add("ALTER TABLE JCR_" + isMultiDB + "VALUE ADD CONSTRAINT JCR_PK_" + isMultiDB
+ + "VALUE PRIMARY KEY(ID)");
+
+ rollbackScripts.add("ALTER TABLE JCR_" + isMultiDB + "REF ADD CONSTRAINT JCR_PK_" + isMultiDB
+ + "REF PRIMARY KEY(NODE_ID, PROPERTY_ID, ORDER_NUM)");
+
+ rollbackScripts.add("ALTER INDEX JCR_IDX_" + isMultiDB + "ITEM_PARENT" + OLD_OBJECT_SUFFIX
+ + " RENAME TO JCR_IDX_" + isMultiDB + "ITEM_PARENT");
+
+ rollbackScripts.add("ALTER INDEX JCR_IDX_" + isMultiDB + "ITEM_PARENT_NAME" + OLD_OBJECT_SUFFIX
+ + " RENAME TO JCR_IDX_" + isMultiDB + "ITEM_PARENT_NAME");
+
+ rollbackScripts.add("ALTER INDEX JCR_IDX_" + isMultiDB + "ITEM_PARENT_ID" + OLD_OBJECT_SUFFIX
+ + " RENAME TO JCR_IDX_" + isMultiDB + "ITEM_PARENT_ID");
+
+ rollbackScripts.add("ALTER INDEX JCR_IDX_" + isMultiDB + "VALUE_PROPERTY" + OLD_OBJECT_SUFFIX
+ + " RENAME TO JCR_IDX_" + isMultiDB + "VALUE_PROPERTY");
+
+ rollbackScripts.add("ALTER INDEX JCR_IDX_" + isMultiDB + "REF_PROPERTY" + OLD_OBJECT_SUFFIX
+ + " RENAME TO JCR_IDX_" + isMultiDB + "REF_PROPERTY");
+ }
+
return rollbackScripts;
}
@@ -441,99 +845,39 @@
public static DBCleaner getWorkspaceDBCleaner(Connection jdbcConn, WorkspaceEntry wsEntry) throws SQLException,
RepositoryConfigurationException
{
- boolean multiDb =
+ boolean isMultiDB =
Boolean.parseBoolean(wsEntry.getContainer().getParameterValue(JDBCWorkspaceDataContainer.MULTIDB));
String containerName = wsEntry.getName();
String dialect = DialectDetecter.detect(jdbcConn.getMetaData());
- boolean cleanWithHelper = false;
- if (dialect.equals(DBConstants.DB_DIALECT_HSQLDB))
+ if (dialect.equals(DBConstants.DB_DIALECT_ORACLE) || dialect.equals(DBConstants.DB_DIALECT_ORACLEOCI)
+ || dialect.equals(DBConstants.DB_DIALECT_MYSQL) || dialect.equals(DBConstants.DB_DIALECT_MYSQL_UTF8)
+ || dialect.equals(DBConstants.DB_DIALECT_SYBASE))
{
- cleanWithHelper = true;
- }
- else if (dialect.equals(DBConstants.DB_DIALECT_MYSQL) || dialect.equals(DBConstants.DB_DIALECT_MYSQL_UTF8))
- {
- cleanWithHelper = true;
+ ArrayList<String> dbCleanerScripts = new ArrayList<String>();
+ dbCleanerScripts.addAll(getRenameScripts(isMultiDB, dialect));
+ dbCleanerScripts.addAll(prepareInirializationScript(getInitializationDBScript(isMultiDB, dialect), isMultiDB,
+ dialect));
+ dbCleanerScripts.addAll(getPreTablesRestoreScript(isMultiDB, dialect));
- Statement st = jdbcConn.createStatement();
- st.execute("SELECT ENGINE FROM information_schema.TABLES where TABLE_SCHEMA='" + jdbcConn.getCatalog()
- + "' and (TABLE_NAME='JCR_SITEM' or TABLE_NAME='JCR_MITEM')");
- ResultSet result = st.getResultSet();
- if (result.next())
- {
- String engine = result.getString("ENGINE");
- if (engine.equalsIgnoreCase("MyISAM"))
- {
- cleanWithHelper = false;
- }
- }
- }
+ ArrayList<String> afterRestoreScript = new ArrayList<String>();
+ afterRestoreScript.addAll(getAfterRestoreScript(isMultiDB, dialect));
+ afterRestoreScript.addAll(getPostTablesRestoreScript(isMultiDB, dialect));
- List<String> cleanScripts = new ArrayList<String>();
-
- if (multiDb)
- {
- if (dialect.equals(DBConstants.DB_DIALECT_SYBASE) || dialect.equals(DBConstants.DB_DIALECT_HSQLDB))
- {
- cleanScripts.add("delete from JCR_MVALUE");
- cleanScripts.add("delete from JCR_MREF");
-
- if (cleanWithHelper)
- {
- cleanScripts.add("delete from JCR_MITEM where I_CLASS=2");
-
- String selectItems = "select ID from JCR_MITEM where I_CLASS=1 and PARENT_ID=?";
- String deleteItems = "delete from JCR_MITEM where I_CLASS=1 and PARENT_ID=?";
-
- return new DBCleaner(jdbcConn, cleanScripts, new RecursiveDBCleanHelper(jdbcConn, selectItems,
- deleteItems));
- }
-
- cleanScripts.add("delete from JCR_MITEM where JCR_MITEM.name <> '" + Constants.ROOT_PARENT_NAME + "'");
- }
- else
- {
- cleanScripts.addAll(getDropTableScripts(multiDb, dialect));
- cleanScripts.addAll(getInitializationDBScript(multiDb, dialect));
- }
+ return new DBCleaner(jdbcConn, dbCleanerScripts, getRollbackRenamedScript(isMultiDB, dialect),
+ afterRestoreScript);
}
else
{
- cleanScripts
- .add("delete from JCR_SVALUE where exists(select * from JCR_SITEM where JCR_SITEM.ID=JCR_SVALUE.PROPERTY_ID and JCR_SITEM.CONTAINER_NAME='"
- + containerName + "')");
- cleanScripts
- .add("delete from JCR_SREF where exists(select * from JCR_SITEM where JCR_SITEM.ID=JCR_SREF.PROPERTY_ID and JCR_SITEM.CONTAINER_NAME='"
- + containerName + "')");
+ List<String> cleanScripts = new ArrayList<String>();
+
+ cleanScripts.addAll(getDropTableScripts(isMultiDB, dialect));
+ cleanScripts.addAll(getInitializationDBScript(isMultiDB, dialect));
+ cleanScripts.addAll(getPreTablesRestoreScript(isMultiDB, dialect));
- if (cleanWithHelper)
- {
- cleanScripts.add("delete from JCR_SITEM where I_CLASS=2 and CONTAINER_NAME='" + containerName + "'");
-
- String selectItems =
- "select ID from JCR_SITEM where I_CLASS=1 and CONTAINER_NAME='" + containerName + "' and PARENT_ID=?";
- String deleteItems =
- "delete from JCR_SITEM where I_CLASS=1 and CONTAINER_NAME='" + containerName + "' and PARENT_ID=?";
-
- return new DBCleaner(jdbcConn, cleanScripts, new RecursiveDBCleanHelper(jdbcConn, selectItems, deleteItems));
- }
-
- cleanScripts.add("delete from JCR_SITEM where CONTAINER_NAME='" + containerName + "'");
+ return new DBCleaner(jdbcConn, cleanScripts, new ArrayList<String>(), getPostTablesRestoreScript(
+ isMultiDB, dialect));
}
-
- if (dialect.equals(DBConstants.DB_DIALECT_ORACLE) || dialect.equals(DBConstants.DB_DIALECT_ORACLEOCI))
- {
- ArrayList<String> dbCleanerScripts = new ArrayList<String>();
- dbCleanerScripts.addAll(getRenameScripts(multiDb, dialect));
- dbCleanerScripts.addAll(getInitializationDBScript(multiDb, dialect));
-
- return new DBCleaner(jdbcConn, dbCleanerScripts, getRollbackRenamedScript(multiDb, dialect),
- getAfterRestoreScript(multiDb, dialect));
- }
- else
- {
- return new DBCleaner(jdbcConn, cleanScripts);
- }
}
}
Modified: jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/clean/rdbms/DBCleaner.java
===================================================================
--- jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/clean/rdbms/DBCleaner.java 2011-10-24 10:11:04 UTC (rev 5080)
+++ jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/clean/rdbms/DBCleaner.java 2011-10-24 15:04:53 UTC (rev 5081)
@@ -153,7 +153,7 @@
*/
public void executeCleanScripts() throws SQLException
{
- executeScripts(cleanScripts);
+ executeScripts(cleanScripts, false);
if (dbCleanHelper != null)
{
@@ -169,7 +169,7 @@
*/
public void executeRollbackScripts() throws SQLException
{
- executeScripts(rollbackScripts);
+ executeScripts(rollbackScripts, true);
}
/**
@@ -180,7 +180,7 @@
*/
public void executeCommitScripts() throws SQLException
{
- executeScripts(commitScripts);
+ executeScripts(commitScripts, false);
}
/**
@@ -188,10 +188,12 @@
*
* @param scripts
* the scripts for execution
+ * @param isSkipSQLExceprion
+ * boolean, skipping SQLException on rollback.
* @throws SQLException
* if any exception occurred
*/
- protected void executeScripts(List<String> scripts) throws SQLException
+ protected void executeScripts(List<String> scripts, boolean isSkipSQLExceprion) throws SQLException
{
SecurityManager security = System.getSecurityManager();
if (security != null)
@@ -211,7 +213,23 @@
{
LOG.debug("Execute script: \n[" + sql + "]");
}
- executeQuery(st, sql);
+
+ try
+ {
+ executeQuery(st, sql);
+ }
+ catch (SQLException e)
+ {
+ if (isSkipSQLExceprion)
+ {
+ LOG.warn("Execute script fail: \n[" + sql + "]");
+ continue;
+ }
+ else
+ {
+ throw e;
+ }
+ }
}
}
}
Modified: jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/storage/jdbc/JDBCWorkspaceDataContainer.java
===================================================================
--- jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/storage/jdbc/JDBCWorkspaceDataContainer.java 2011-10-24 10:11:04 UTC (rev 5080)
+++ jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/storage/jdbc/JDBCWorkspaceDataContainer.java 2011-10-24 15:04:53 UTC (rev 5081)
@@ -33,14 +33,10 @@
import org.exoplatform.services.jcr.impl.backup.Backupable;
import org.exoplatform.services.jcr.impl.backup.ComplexDataRestore;
import org.exoplatform.services.jcr.impl.backup.DataRestore;
-import org.exoplatform.services.jcr.impl.backup.rdbms.DB2DBRestore;
import org.exoplatform.services.jcr.impl.backup.rdbms.DBBackup;
import org.exoplatform.services.jcr.impl.backup.rdbms.DBRestore;
import org.exoplatform.services.jcr.impl.backup.rdbms.DataRestoreContext;
import org.exoplatform.services.jcr.impl.backup.rdbms.DirectoryRestore;
-import org.exoplatform.services.jcr.impl.backup.rdbms.H2DBRestore;
-import org.exoplatform.services.jcr.impl.backup.rdbms.MySQLDBRestore;
-import org.exoplatform.services.jcr.impl.backup.rdbms.OracleDBRestore;
import org.exoplatform.services.jcr.impl.backup.rdbms.RestoreTableRule;
import org.exoplatform.services.jcr.impl.backup.rdbms.SybaseDBRestore;
import org.exoplatform.services.jcr.impl.clean.rdbms.DBCleanService;
@@ -1309,26 +1305,10 @@
dbCleaner = DBCleanService.getWorkspaceDBCleaner(jdbcConn, wsConfig);
}
- if (dbDialect == DBConstants.DB_DIALECT_DB2 || dbDialect == DBConstants.DB_DIALECT_DB2V8)
+ if (dbDialect == DBConstants.DB_DIALECT_SYBASE)
{
- restorers.add(new DB2DBRestore(storageDir, jdbcConn, tables, wsConfig, swapCleaner, dbCleaner));
- }
- else if (dbDialect == DBConstants.DB_DIALECT_MYSQL || dbDialect == DBConstants.DB_DIALECT_MYSQL_UTF8)
- {
- restorers.add(new MySQLDBRestore(storageDir, jdbcConn, tables, wsConfig, swapCleaner, dbCleaner));
- }
- else if (dbDialect == DBConstants.DB_DIALECT_H2)
- {
- restorers.add(new H2DBRestore(storageDir, jdbcConn, tables, wsConfig, swapCleaner, dbCleaner));
- }
- else if (dbDialect == DBConstants.DB_DIALECT_SYBASE)
- {
restorers.add(new SybaseDBRestore(storageDir, jdbcConn, tables, wsConfig, swapCleaner, dbCleaner));
}
- else if (dbDialect == DBConstants.DB_DIALECT_ORACLE || dbDialect == DBConstants.DB_DIALECT_ORACLEOCI)
- {
- restorers.add(new OracleDBRestore(storageDir, jdbcConn, tables, wsConfig, swapCleaner, dbCleaner));
- }
else
{
restorers.add(new DBRestore(storageDir, jdbcConn, tables, wsConfig, swapCleaner, dbCleaner));
Modified: jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/util/jdbc/DBInitializerHelper.java
===================================================================
--- jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/util/jdbc/DBInitializerHelper.java 2011-10-24 10:11:04 UTC (rev 5080)
+++ jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/util/jdbc/DBInitializerHelper.java 2011-10-24 15:04:53 UTC (rev 5081)
@@ -17,6 +17,7 @@
package org.exoplatform.services.jcr.impl.util.jdbc;
import org.exoplatform.commons.utils.SecurityHelper;
+import org.exoplatform.services.jcr.config.RepositoryConfigurationException;
import org.exoplatform.services.jcr.impl.Constants;
import org.exoplatform.services.jcr.impl.storage.jdbc.DBConstants;
import org.exoplatform.services.log.ExoLogger;
@@ -268,4 +269,34 @@
}
return string;
}
+
+ /**
+ * Get script for creating object (index, etc...)
+ * @throws RepositoryConfigurationException
+ */
+ public static String getObjectScript(String objectName, boolean multiDb, String dialect)
+ throws RepositoryConfigurationException
+ {
+ String scriptsPath = DBInitializerHelper.scriptPath(dialect, multiDb);
+ String script;
+ try
+ {
+ script = DBInitializerHelper.readScriptResource(scriptsPath);
+ }
+ catch (IOException e)
+ {
+ throw new RepositoryConfigurationException("Can not read script file " + scriptsPath, e);
+ }
+
+ for (String query : DBInitializerHelper.scripts(script))
+ {
+ String q = DBInitializerHelper.cleanWhitespaces(query);
+ if (q.contains(objectName))
+ {
+ return q;
+ }
+ }
+
+ return null;
+ }
}
Modified: jcr/trunk/exo.jcr.component.core/src/main/resources/conf/storage/jcr-mjdbc.mysql-utf8.sql
===================================================================
--- jcr/trunk/exo.jcr.component.core/src/main/resources/conf/storage/jcr-mjdbc.mysql-utf8.sql 2011-10-24 10:11:04 UTC (rev 5080)
+++ jcr/trunk/exo.jcr.component.core/src/main/resources/conf/storage/jcr-mjdbc.mysql-utf8.sql 2011-10-24 15:04:53 UTC (rev 5081)
@@ -12,9 +12,9 @@
N_ORDER_NUM INTEGER,
P_TYPE INTEGER,
P_MULTIVALUED BOOLEAN,
- CONSTRAINT JCR_PK_MITEM PRIMARY KEY(ID),
- CONSTRAINT JCR_FK_MITEM_PARENT FOREIGN KEY(PARENT_ID) REFERENCES JCR_MITEM(ID)
+ CONSTRAINT JCR_PK_MITEM PRIMARY KEY(ID)
) ENGINE=InnoDB;
+ALTER TABLE JCR_MITEM ADD CONSTRAINT JCR_FK_MITEM_PARENT FOREIGN KEY(PARENT_ID) REFERENCES JCR_MITEM(ID);
CREATE UNIQUE INDEX JCR_IDX_MITEM_PARENT ON JCR_MITEM(PARENT_ID, NAME(255), I_INDEX, I_CLASS, VERSION DESC);
CREATE UNIQUE INDEX JCR_IDX_MITEM_PARENT_NAME ON JCR_MITEM(I_CLASS, PARENT_ID, NAME(255), I_INDEX, VERSION DESC);
CREATE UNIQUE INDEX JCR_IDX_MITEM_PARENT_ID ON JCR_MITEM(I_CLASS, PARENT_ID, ID, VERSION DESC);
@@ -25,9 +25,9 @@
ORDER_NUM INTEGER NOT NULL,
PROPERTY_ID VARCHAR(56) NOT NULL,
STORAGE_DESC VARCHAR(512),
- CONSTRAINT JCR_PK_MVALUE PRIMARY KEY(ID),
- CONSTRAINT JCR_FK_MVALUE_PROPERTY FOREIGN KEY(PROPERTY_ID) REFERENCES JCR_MITEM(ID)
+ CONSTRAINT JCR_PK_MVALUE PRIMARY KEY(ID)
) ENGINE=InnoDB;
+ALTER TABLE JCR_MVALUE ADD CONSTRAINT JCR_FK_MVALUE_PROPERTY FOREIGN KEY(PROPERTY_ID) REFERENCES JCR_MITEM(ID);
CREATE UNIQUE INDEX JCR_IDX_MVALUE_PROPERTY ON JCR_MVALUE(PROPERTY_ID, ORDER_NUM);
CREATE INDEX JCR_IDX_MVALUE_STORAGE_DESC ON JCR_MVALUE(PROPERTY_ID, STORAGE_DESC);
CREATE TABLE JCR_MREF(
Modified: jcr/trunk/exo.jcr.component.core/src/main/resources/conf/storage/jcr-mjdbc.mysql.sql
===================================================================
--- jcr/trunk/exo.jcr.component.core/src/main/resources/conf/storage/jcr-mjdbc.mysql.sql 2011-10-24 10:11:04 UTC (rev 5080)
+++ jcr/trunk/exo.jcr.component.core/src/main/resources/conf/storage/jcr-mjdbc.mysql.sql 2011-10-24 15:04:53 UTC (rev 5081)
@@ -12,9 +12,9 @@
N_ORDER_NUM INTEGER,
P_TYPE INTEGER,
P_MULTIVALUED BOOLEAN,
- CONSTRAINT JCR_PK_MITEM PRIMARY KEY(ID),
- CONSTRAINT JCR_FK_MITEM_PARENT FOREIGN KEY(PARENT_ID) REFERENCES JCR_MITEM(ID)
+ CONSTRAINT JCR_PK_MITEM PRIMARY KEY(ID)
) ENGINE=InnoDB;
+ALTER TABLE JCR_MITEM ADD CONSTRAINT JCR_FK_MITEM_PARENT FOREIGN KEY(PARENT_ID) REFERENCES JCR_MITEM(ID);
CREATE UNIQUE INDEX JCR_IDX_MITEM_PARENT ON JCR_MITEM(PARENT_ID, NAME, I_INDEX, I_CLASS, VERSION DESC);
CREATE UNIQUE INDEX JCR_IDX_MITEM_PARENT_NAME ON JCR_MITEM(I_CLASS, PARENT_ID, NAME, I_INDEX, VERSION DESC);
CREATE UNIQUE INDEX JCR_IDX_MITEM_PARENT_ID ON JCR_MITEM(I_CLASS, PARENT_ID, ID, VERSION DESC);
@@ -25,9 +25,9 @@
ORDER_NUM INTEGER NOT NULL,
PROPERTY_ID VARCHAR(96) NOT NULL,
STORAGE_DESC VARCHAR(512),
- CONSTRAINT JCR_PK_MVALUE PRIMARY KEY(ID),
- CONSTRAINT JCR_FK_MVALUE_PROPERTY FOREIGN KEY(PROPERTY_ID) REFERENCES JCR_MITEM(ID)
+ CONSTRAINT JCR_PK_MVALUE PRIMARY KEY(ID)
) ENGINE=InnoDB;
+ALTER TABLE JCR_MVALUE ADD CONSTRAINT JCR_FK_MVALUE_PROPERTY FOREIGN KEY(PROPERTY_ID) REFERENCES JCR_MITEM(ID);
CREATE UNIQUE INDEX JCR_IDX_MVALUE_PROPERTY ON JCR_MVALUE(PROPERTY_ID, ORDER_NUM);
CREATE INDEX JCR_IDX_MVALUE_STORAGE_DESC ON JCR_MVALUE(PROPERTY_ID, STORAGE_DESC);
CREATE TABLE JCR_MREF(
Modified: jcr/trunk/exo.jcr.component.core/src/main/resources/conf/storage/jcr-sjdbc.mysql-utf8.sql
===================================================================
--- jcr/trunk/exo.jcr.component.core/src/main/resources/conf/storage/jcr-sjdbc.mysql-utf8.sql 2011-10-24 10:11:04 UTC (rev 5080)
+++ jcr/trunk/exo.jcr.component.core/src/main/resources/conf/storage/jcr-sjdbc.mysql-utf8.sql 2011-10-24 15:04:53 UTC (rev 5081)
@@ -13,9 +13,9 @@
N_ORDER_NUM INTEGER,
P_TYPE INTEGER,
P_MULTIVALUED BOOLEAN,
- CONSTRAINT JCR_PK_SITEM PRIMARY KEY(ID),
- CONSTRAINT JCR_FK_SITEM_PARENT FOREIGN KEY(PARENT_ID) REFERENCES JCR_SITEM(ID)
+ CONSTRAINT JCR_PK_SITEM PRIMARY KEY(ID)
) ENGINE=InnoDB;
+ALTER TABLE JCR_SITEM ADD CONSTRAINT JCR_FK_SITEM_PARENT FOREIGN KEY(PARENT_ID) REFERENCES JCR_SITEM(ID);
CREATE UNIQUE INDEX JCR_IDX_SITEM_PARENT ON JCR_SITEM(CONTAINER_NAME, PARENT_ID, NAME(255), I_INDEX, I_CLASS, VERSION DESC);
CREATE UNIQUE INDEX JCR_IDX_SITEM_PARENT_NAME ON JCR_SITEM(I_CLASS, CONTAINER_NAME, PARENT_ID, NAME(255), I_INDEX, VERSION DESC);
CREATE UNIQUE INDEX JCR_IDX_SITEM_PARENT_ID ON JCR_SITEM(I_CLASS, CONTAINER_NAME, PARENT_ID, ID, VERSION DESC);
@@ -26,9 +26,9 @@
ORDER_NUM INTEGER NOT NULL,
PROPERTY_ID VARCHAR(56) NOT NULL,
STORAGE_DESC VARCHAR(512),
- CONSTRAINT JCR_PK_SVALUE PRIMARY KEY(ID),
- CONSTRAINT JCR_FK_SVALUE_PROPERTY FOREIGN KEY(PROPERTY_ID) REFERENCES JCR_SITEM(ID)
+ CONSTRAINT JCR_PK_SVALUE PRIMARY KEY(ID)
) ENGINE=InnoDB;
+ALTER TABLE JCR_SVALUE ADD CONSTRAINT JCR_FK_SVALUE_PROPERTY FOREIGN KEY(PROPERTY_ID) REFERENCES JCR_SITEM(ID);
CREATE UNIQUE INDEX JCR_IDX_SVALUE_PROPERTY ON JCR_SVALUE(PROPERTY_ID, ORDER_NUM);
CREATE INDEX JCR_IDX_SVALUE_STORAGE_DESC ON JCR_SVALUE(PROPERTY_ID, STORAGE_DESC);
CREATE TABLE JCR_SREF(
Modified: jcr/trunk/exo.jcr.component.core/src/main/resources/conf/storage/jcr-sjdbc.mysql.sql
===================================================================
--- jcr/trunk/exo.jcr.component.core/src/main/resources/conf/storage/jcr-sjdbc.mysql.sql 2011-10-24 10:11:04 UTC (rev 5080)
+++ jcr/trunk/exo.jcr.component.core/src/main/resources/conf/storage/jcr-sjdbc.mysql.sql 2011-10-24 15:04:53 UTC (rev 5081)
@@ -13,9 +13,9 @@
N_ORDER_NUM INTEGER,
P_TYPE INTEGER,
P_MULTIVALUED BOOLEAN,
- CONSTRAINT JCR_PK_SITEM PRIMARY KEY(ID),
- CONSTRAINT JCR_FK_SITEM_PARENT FOREIGN KEY(PARENT_ID) REFERENCES JCR_SITEM(ID)
+ CONSTRAINT JCR_PK_SITEM PRIMARY KEY(ID)
) ENGINE=InnoDB;
+ALTER TABLE JCR_SITEM ADD CONSTRAINT JCR_FK_SITEM_PARENT FOREIGN KEY(PARENT_ID) REFERENCES JCR_SITEM(ID);
CREATE UNIQUE INDEX JCR_IDX_SITEM_PARENT ON JCR_SITEM(CONTAINER_NAME, PARENT_ID, NAME, I_INDEX, I_CLASS, VERSION DESC);
CREATE UNIQUE INDEX JCR_IDX_SITEM_PARENT_NAME ON JCR_SITEM(I_CLASS, CONTAINER_NAME, PARENT_ID, NAME, I_INDEX, VERSION DESC);
CREATE UNIQUE INDEX JCR_IDX_SITEM_PARENT_ID ON JCR_SITEM(I_CLASS, CONTAINER_NAME, PARENT_ID, ID, VERSION DESC);
@@ -26,9 +26,9 @@
ORDER_NUM INTEGER NOT NULL,
PROPERTY_ID VARCHAR(96) NOT NULL,
STORAGE_DESC VARCHAR(512),
- CONSTRAINT JCR_PK_SVALUE PRIMARY KEY(ID),
- CONSTRAINT JCR_FK_SVALUE_PROPERTY FOREIGN KEY(PROPERTY_ID) REFERENCES JCR_SITEM(ID)
+ CONSTRAINT JCR_PK_SVALUE PRIMARY KEY(ID)
) ENGINE=InnoDB;
+ALTER TABLE JCR_SVALUE ADD CONSTRAINT JCR_FK_SVALUE_PROPERTY FOREIGN KEY(PROPERTY_ID) REFERENCES JCR_SITEM(ID);
CREATE UNIQUE INDEX JCR_IDX_SVALUE_PROPERTY ON JCR_SVALUE(PROPERTY_ID, ORDER_NUM);
CREATE INDEX JCR_IDX_SVALUE_STORAGE_DESC ON JCR_SVALUE(PROPERTY_ID, STORAGE_DESC);
CREATE TABLE JCR_SREF(
14 years, 6 months
exo-jcr SVN: r5080 - jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/core.
by do-not-reply@jboss.org
Author: tolusha
Date: 2011-10-24 06:11:04 -0400 (Mon, 24 Oct 2011)
New Revision: 5080
Modified:
jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/core/NodeImpl.java
Log:
EXOJCR-1600: Throw ConstraintViolationException instead of NPE if child node definition is not found
Modified: jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/core/NodeImpl.java
===================================================================
--- jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/core/NodeImpl.java 2011-10-24 09:29:14 UTC (rev 5079)
+++ jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/core/NodeImpl.java 2011-10-24 10:11:04 UTC (rev 5080)
@@ -3061,8 +3061,14 @@
def =
session.getWorkspace().getNodeTypesHolder().getChildNodeDefinition(nameToAdd, primaryTypeName,
parentNode.getPrimaryTypeName(), parentNode.getMixinTypeNames());
+
+ if (def == null)
+ {
+ throw new ConstraintViolationException("Can't find child node definition for " + nameToAdd + " in parent "
+ + parentNode.getQPath().getAsString());
+ }
}
-
+
boolean allowSns = def.isAllowsSameNameSiblings();
int ind = 1;
14 years, 6 months
exo-jcr SVN: r5079 - in jcr/trunk/exo.jcr.component.core/src: test/java/org/exoplatform/services/jcr/api/importing and 1 other directory.
by do-not-reply@jboss.org
Author: tolusha
Date: 2011-10-24 05:29:14 -0400 (Mon, 24 Oct 2011)
New Revision: 5079
Modified:
jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/xml/importing/BaseXmlImporter.java
jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/xml/importing/DocumentViewImporter.java
jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/xml/importing/SystemViewImporter.java
jcr/trunk/exo.jcr.component.core/src/test/java/org/exoplatform/services/jcr/api/importing/TestImportVersionHistory.java
Log:
EXOJCR-1599: Remove VH during importing verionable node if flag RemoveExisting is set
Modified: jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/xml/importing/BaseXmlImporter.java
===================================================================
--- jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/xml/importing/BaseXmlImporter.java 2011-10-24 08:55:48 UTC (rev 5078)
+++ jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/xml/importing/BaseXmlImporter.java 2011-10-24 09:29:14 UTC (rev 5079)
@@ -344,10 +344,10 @@
PlainChangesLogImpl changes = new PlainChangesLogImpl();
// using VH helper as for one new VH, all changes in changes log
- new VersionHistoryDataHelper(nodeData, changes, dataConsumer, nodeTypeDataManager, nodeData
- .getVersionHistoryIdentifier(), nodeData.getBaseVersionIdentifier());
+ new VersionHistoryDataHelper(nodeData, changes, dataConsumer, nodeTypeDataManager,
+ nodeData.getVersionHistoryIdentifier(), nodeData.getBaseVersionIdentifier());
- if (uuidBehavior == ImportUUIDBehavior.IMPORT_UUID_COLLISION_REPLACE_EXISTING && !newVersionHistory)
+ if (!newVersionHistory)
{
for (ItemState state : changes.getAllStates())
{
@@ -458,7 +458,7 @@
* <li>IMPORT_UUID_COLLISION_REMOVE_EXISTING - Remove same uuid item and his
* subtree. Also if item MIX_VERSIONABLE, remove version history</li>
* <li>IMPORT_UUID_COLLISION_REPLACE_EXISTING - Remove same uuid item and his
- * subtree.</li>
+ * subtree. Also if item MIX_VERSIONABLE, remove version history</li>
* <li>IMPORT_UUID_COLLISION_THROW - throw new ItemExistsException</li>
* </ol>
*
@@ -501,6 +501,11 @@
removeExisted(sameUuidItem);
break;
case ImportUUIDBehavior.IMPORT_UUID_COLLISION_REPLACE_EXISTING :
+ // remove version history before removing item
+ if (isMixVersionable)
+ {
+ removeVersionHistory(sameUuidItem);
+ }
removeExisted(sameUuidItem);
ItemData parentOfsameUuidItem = dataConsumer.getItemData(sameUuidItem.getParentIdentifier());
tree.push(ImportNodeData.createCopy((NodeData)parentOfsameUuidItem));
@@ -558,7 +563,7 @@
* @param identifer
* @return
*/
- private ItemState getLastItemState(String identifer)
+ protected ItemState getLastItemState(String identifer)
{
List<ItemState> allStates = changesLog.getAllStates();
for (int i = allStates.size() - 1; i >= 0; i--)
Modified: jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/xml/importing/DocumentViewImporter.java
===================================================================
--- jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/xml/importing/DocumentViewImporter.java 2011-10-24 08:55:48 UTC (rev 5078)
+++ jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/xml/importing/DocumentViewImporter.java 2011-10-24 09:29:14 UTC (rev 5079)
@@ -593,8 +593,16 @@
throw new RepositoryException(e);
}
- nodeData
- .setContainsVersionhistory(dataConsumer.getItemData(nodeData.getVersionHistoryIdentifier()) != null);
+ // check if node contains VH
+ if (dataConsumer.getItemData(nodeData.getVersionHistoryIdentifier()) != null)
+ {
+ ItemState vhLastState = getLastItemState(nodeData.getVersionHistoryIdentifier());
+ nodeData.setContainsVersionhistory(vhLastState == null || !vhLastState.isDeleted());
+ }
+ else
+ {
+ nodeData.setContainsVersionhistory(false);
+ }
}
else if (propName.equals(Constants.JCR_BASEVERSION))
{
Modified: jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/xml/importing/SystemViewImporter.java
===================================================================
--- jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/xml/importing/SystemViewImporter.java 2011-10-24 08:55:48 UTC (rev 5078)
+++ jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/xml/importing/SystemViewImporter.java 2011-10-24 09:29:14 UTC (rev 5079)
@@ -634,15 +634,23 @@
{
try
{
-
if (propertyInfo.getName().equals(Constants.JCR_VERSIONHISTORY))
{
String versionHistoryIdentifier = null;
versionHistoryIdentifier = ValueDataConvertor.readString(values.get(0));
currentNodeInfo.setVersionHistoryIdentifier(versionHistoryIdentifier);
- currentNodeInfo.setContainsVersionhistory(dataConsumer.getItemData(versionHistoryIdentifier) != null);
+ // check if node contains VH
+ if (dataConsumer.getItemData(versionHistoryIdentifier) != null)
+ {
+ ItemState vhLastState = getLastItemState(versionHistoryIdentifier);
+ currentNodeInfo.setContainsVersionhistory(vhLastState == null || !vhLastState.isDeleted());
+ }
+ else
+ {
+ currentNodeInfo.setContainsVersionhistory(false);
+ }
}
else if (propertyInfo.getName().equals(Constants.JCR_BASEVERSION))
{
Modified: jcr/trunk/exo.jcr.component.core/src/test/java/org/exoplatform/services/jcr/api/importing/TestImportVersionHistory.java
===================================================================
--- jcr/trunk/exo.jcr.component.core/src/test/java/org/exoplatform/services/jcr/api/importing/TestImportVersionHistory.java 2011-10-24 08:55:48 UTC (rev 5078)
+++ jcr/trunk/exo.jcr.component.core/src/test/java/org/exoplatform/services/jcr/api/importing/TestImportVersionHistory.java 2011-10-24 09:29:14 UTC (rev 5079)
@@ -26,6 +26,7 @@
import javax.jcr.ImportUUIDBehavior;
import javax.jcr.Node;
+import javax.jcr.Property;
import javax.jcr.Value;
/**
@@ -133,4 +134,85 @@
// try to restore first version
parent.restore("1", true);
}
+
+ public void testImportVersionHistoryWithReferenceableProperty() throws Exception
+ {
+ Node parent = session.getRootNode().addNode("testRoot");
+ parent.addMixin("mix:versionable");
+ session.save();
+
+ parent.checkin();
+ parent.checkout();
+
+ Property prop = parent.getProperty("jcr:versionHistory");
+ Node vh = session.getNodeByUUID(prop.getValue().getString());
+
+ // add ref property to VH
+ parent.setProperty("ref", vh);
+ parent.save();
+
+ // export import version history and node
+ ByteArrayOutputStream out = new ByteArrayOutputStream();
+ session.exportSystemView("/testRoot", out, false, false);
+
+ ByteArrayOutputStream vhout = new ByteArrayOutputStream();
+ session.exportSystemView(parent.getVersionHistory().getPath(), vhout, false, false);
+
+ // prepare data for version import
+ String versionHistory = parent.getProperty("jcr:versionHistory").getValue().getString();
+ String baseVersion = parent.getProperty("jcr:baseVersion").getValue().getString();
+ Value[] jcrPredecessors = parent.getProperty("jcr:predecessors").getValues();
+ StringBuilder jcrPredecessorsBuilder = new StringBuilder();
+ String[] predecessorsHistory;
+ for (Value value : jcrPredecessors)
+ {
+ if (jcrPredecessorsBuilder.length() > 0)
+ jcrPredecessorsBuilder.append(",");
+ jcrPredecessorsBuilder.append(value.getString());
+ }
+ if (jcrPredecessorsBuilder.toString().indexOf(",") > -1)
+ {
+ predecessorsHistory = jcrPredecessorsBuilder.toString().split(",");
+ }
+ else
+ {
+ predecessorsHistory = new String[]{jcrPredecessorsBuilder.toString()};
+ }
+
+ // remove node
+ parent.remove();
+ session.save();
+
+ // import
+ session.importXML("/", new ByteArrayInputStream(out.toByteArray()),
+ ImportUUIDBehavior.IMPORT_UUID_CREATE_NEW, true);
+
+ session.save();
+
+ parent = (NodeImpl)session.getItem("/testRoot");
+ VersionHistoryImporter versionHistoryImporter =
+ new VersionHistoryImporter((NodeImpl)parent, new ByteArrayInputStream(vhout.toByteArray()), baseVersion,
+ predecessorsHistory, versionHistory);
+ versionHistoryImporter.doImport();
+ session.save();
+
+ // import second time with replace existing flag
+ session.importXML("/", new ByteArrayInputStream(out.toByteArray()),
+ ImportUUIDBehavior.IMPORT_UUID_COLLISION_REPLACE_EXISTING, true);
+
+ session.save();
+
+ parent = (NodeImpl)session.getItem("/testRoot");
+ versionHistoryImporter =
+ new VersionHistoryImporter((NodeImpl)parent, new ByteArrayInputStream(vhout.toByteArray()), baseVersion,
+ predecessorsHistory, versionHistory);
+ versionHistoryImporter.doImport();
+ session.save();
+
+ // try to restore first version
+ parent.restore("1", true);
+
+ parent.remove();
+ session.save();
+ }
}
14 years, 6 months
exo-jcr SVN: r5078 - in jcr/branches/1.12.x/patch/1.12.11-GA: JCR-1684 and 1 other directory.
by do-not-reply@jboss.org
Author: tolusha
Date: 2011-10-24 04:55:48 -0400 (Mon, 24 Oct 2011)
New Revision: 5078
Added:
jcr/branches/1.12.x/patch/1.12.11-GA/JCR-1684/
jcr/branches/1.12.x/patch/1.12.11-GA/JCR-1684/JCR-1684.patch
Log:
JCR-1684: patch proposed
Added: jcr/branches/1.12.x/patch/1.12.11-GA/JCR-1684/JCR-1684.patch
===================================================================
--- jcr/branches/1.12.x/patch/1.12.11-GA/JCR-1684/JCR-1684.patch (rev 0)
+++ jcr/branches/1.12.x/patch/1.12.11-GA/JCR-1684/JCR-1684.patch 2011-10-24 08:55:48 UTC (rev 5078)
@@ -0,0 +1,196 @@
+Index: exo.jcr.component.core/src/test/java/org/exoplatform/services/jcr/api/importing/TestImportVersionHistory.java
+===================================================================
+--- exo.jcr.component.core/src/test/java/org/exoplatform/services/jcr/api/importing/TestImportVersionHistory.java (revision 5039)
++++ exo.jcr.component.core/src/test/java/org/exoplatform/services/jcr/api/importing/TestImportVersionHistory.java (working copy)
+@@ -26,6 +26,7 @@
+
+ import javax.jcr.ImportUUIDBehavior;
+ import javax.jcr.Node;
++import javax.jcr.Property;
+ import javax.jcr.Value;
+
+ /**
+@@ -133,4 +134,82 @@
+ // try to restore first version
+ parent.restore("1", true);
+ }
++
++ public void testImportVersionHistoryWithReferenceableProperty() throws Exception
++ {
++ Node parent = session.getRootNode().addNode("testRoot");
++ parent.addMixin("mix:versionable");
++ session.save();
++
++ parent.checkin();
++ parent.checkout();
++
++ Property prop = parent.getProperty("jcr:versionHistory");
++ Node vh = session.getNodeByUUID(prop.getValue().getString());
++
++ // add ref property to VH
++ parent.setProperty("ref", vh);
++ parent.save();
++
++ // export import version history and node
++ ByteArrayOutputStream out = new ByteArrayOutputStream();
++ session.exportSystemView("/testRoot", out, false, false);
++
++ ByteArrayOutputStream vhout = new ByteArrayOutputStream();
++ session.exportSystemView(parent.getVersionHistory().getPath(), vhout, false, false);
++
++ // prepare data for version import
++ String versionHistory = parent.getProperty("jcr:versionHistory").getValue().getString();
++ String baseVersion = parent.getProperty("jcr:baseVersion").getValue().getString();
++ Value[] jcrPredecessors = parent.getProperty("jcr:predecessors").getValues();
++ StringBuilder jcrPredecessorsBuilder = new StringBuilder();
++ String[] predecessorsHistory;
++ for (Value value : jcrPredecessors)
++ {
++ if (jcrPredecessorsBuilder.length() > 0)
++ jcrPredecessorsBuilder.append(",");
++ jcrPredecessorsBuilder.append(value.getString());
++ }
++ if (jcrPredecessorsBuilder.toString().indexOf(",") > -1)
++ {
++ predecessorsHistory = jcrPredecessorsBuilder.toString().split(",");
++ }
++ else
++ {
++ predecessorsHistory = new String[]{jcrPredecessorsBuilder.toString()};
++ }
++
++ // remove node
++ parent.remove();
++ session.save();
++
++ // import
++ session.importXML("/", new ByteArrayInputStream(out.toByteArray()),
++ ImportUUIDBehavior.IMPORT_UUID_CREATE_NEW, true);
++
++ session.save();
++
++ parent = (NodeImpl)session.getItem("/testRoot");
++ VersionHistoryImporter versionHistoryImporter =
++ new VersionHistoryImporter((NodeImpl)parent, new ByteArrayInputStream(vhout.toByteArray()), baseVersion,
++ predecessorsHistory, versionHistory);
++ versionHistoryImporter.doImport();
++ session.save();
++
++ // import second time with replace existing flag
++ session.importXML("/", new ByteArrayInputStream(out.toByteArray()),
++ ImportUUIDBehavior.IMPORT_UUID_COLLISION_REPLACE_EXISTING, true);
++
++ session.save();
++
++ parent = (NodeImpl)session.getItem("/testRoot");
++ versionHistoryImporter =
++ new VersionHistoryImporter((NodeImpl)parent, new ByteArrayInputStream(vhout.toByteArray()), baseVersion,
++ predecessorsHistory, versionHistory);
++ versionHistoryImporter.doImport();
++ session.save();
++
++ // try to restore first version
++ parent.restore("1", true);
++ }
+ }
+Index: exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/xml/importing/SystemViewImporter.java
+===================================================================
+--- exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/xml/importing/SystemViewImporter.java (revision 5039)
++++ exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/xml/importing/SystemViewImporter.java (working copy)
+@@ -588,15 +588,23 @@
+ {
+ try
+ {
+-
+ if (propertyInfo.getName().equals(Constants.JCR_VERSIONHISTORY))
+ {
+ String versionHistoryIdentifier = null;
+ versionHistoryIdentifier = ValueDataConvertor.readString(values.get(0));
+
+ currentNodeInfo.setVersionHistoryIdentifier(versionHistoryIdentifier);
+- currentNodeInfo.setContainsVersionhistory(dataConsumer.getItemData(versionHistoryIdentifier) != null);
+
++ // check if node contains VH
++ if (dataConsumer.getItemData(versionHistoryIdentifier) != null)
++ {
++ ItemState vhLastState = getLastItemState(versionHistoryIdentifier);
++ currentNodeInfo.setContainsVersionhistory(vhLastState == null || !vhLastState.isDeleted());
++ }
++ else
++ {
++ currentNodeInfo.setContainsVersionhistory(false);
++ }
+ }
+ else if (propertyInfo.getName().equals(Constants.JCR_BASEVERSION))
+ {
+Index: exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/xml/importing/DocumentViewImporter.java
+===================================================================
+--- exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/xml/importing/DocumentViewImporter.java (revision 5039)
++++ exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/xml/importing/DocumentViewImporter.java (working copy)
+@@ -590,8 +590,16 @@
+ throw new RepositoryException(e);
+ }
+
+- nodeData
+- .setContainsVersionhistory(dataConsumer.getItemData(nodeData.getVersionHistoryIdentifier()) != null);
++ // check if node contains VH
++ if (dataConsumer.getItemData(nodeData.getVersionHistoryIdentifier()) != null)
++ {
++ ItemState vhLastState = getLastItemState(nodeData.getVersionHistoryIdentifier());
++ nodeData.setContainsVersionhistory(vhLastState == null || !vhLastState.isDeleted());
++ }
++ else
++ {
++ nodeData.setContainsVersionhistory(false);
++ }
+ }
+ else if (propName.equals(Constants.JCR_BASEVERSION))
+ {
+Index: exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/xml/importing/BaseXmlImporter.java
+===================================================================
+--- exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/xml/importing/BaseXmlImporter.java (revision 5039)
++++ exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/xml/importing/BaseXmlImporter.java (working copy)
+@@ -347,10 +347,10 @@
+
+ PlainChangesLogImpl changes = new PlainChangesLogImpl();
+ // using VH helper as for one new VH, all changes in changes log
+- new VersionHistoryDataHelper(nodeData, changes, dataConsumer, nodeTypeDataManager, nodeData
+- .getVersionHistoryIdentifier(), nodeData.getBaseVersionIdentifier());
++ new VersionHistoryDataHelper(nodeData, changes, dataConsumer, nodeTypeDataManager,
++ nodeData.getVersionHistoryIdentifier(), nodeData.getBaseVersionIdentifier());
+
+- if (uuidBehavior == ImportUUIDBehavior.IMPORT_UUID_COLLISION_REPLACE_EXISTING && !newVersionHistory)
++ if (!newVersionHistory)
+ {
+ for (ItemState state : changes.getAllStates())
+ {
+@@ -544,7 +544,7 @@
+ * <li>IMPORT_UUID_COLLISION_REMOVE_EXISTING - Remove same uuid item and his
+ * subtree. Also if item MIX_VERSIONABLE, remove version history</li>
+ * <li>IMPORT_UUID_COLLISION_REPLACE_EXISTING - Remove same uuid item and his
+- * subtree.</li>
++ * subtree. Also if item MIX_VERSIONABLE, remove version history</li>
+ * <li>IMPORT_UUID_COLLISION_THROW - throw new ItemExistsException</li>
+ * </ol>
+ *
+@@ -587,6 +587,11 @@
+ removeExisted(sameUuidItem);
+ break;
+ case ImportUUIDBehavior.IMPORT_UUID_COLLISION_REPLACE_EXISTING :
++ // remove version history before removing item
++ if (isMixVersionable)
++ {
++ removeVersionHistory(sameUuidItem);
++ }
+ removeExisted(sameUuidItem);
+ ItemData parentOfsameUuidItem = dataConsumer.getItemData(sameUuidItem.getParentIdentifier());
+ tree.push(ImportNodeData.createCopy((NodeData)parentOfsameUuidItem));
+@@ -644,7 +649,7 @@
+ * @param identifer
+ * @return
+ */
+- private ItemState getLastItemState(String identifer)
++ protected ItemState getLastItemState(String identifer)
+ {
+ List<ItemState> allStates = changesLog.getAllStates();
+ for (int i = allStates.size() - 1; i >= 0; i--)
14 years, 6 months
exo-jcr SVN: r5077 - in jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr: jbosscache and 1 other directory.
by do-not-reply@jboss.org
Author: tolusha
Date: 2011-10-24 03:03:54 -0400 (Mon, 24 Oct 2011)
New Revision: 5077
Modified:
jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/core/lock/jbosscache/CacheableLockManagerImpl.java
jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/jbosscache/PrivilegedJBossCacheHelper.java
Log:
EXOJCR-1590: fix test
Modified: jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/core/lock/jbosscache/CacheableLockManagerImpl.java
===================================================================
--- jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/core/lock/jbosscache/CacheableLockManagerImpl.java 2011-10-20 14:02:26 UTC (rev 5076)
+++ jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/core/lock/jbosscache/CacheableLockManagerImpl.java 2011-10-24 07:03:54 UTC (rev 5077)
@@ -621,7 +621,7 @@
@Override
protected void doRemove(LockData lockData)
{
- cache.removeNode(makeLockFqn(lockData.getNodeIdentifier()));
+ PrivilegedJBossCacheHelper.removeNode(cache, makeLockFqn(lockData.getNodeIdentifier()));
}
/**
Modified: jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/jbosscache/PrivilegedJBossCacheHelper.java
===================================================================
--- jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/jbosscache/PrivilegedJBossCacheHelper.java 2011-10-20 14:02:26 UTC (rev 5076)
+++ jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/jbosscache/PrivilegedJBossCacheHelper.java 2011-10-24 07:03:54 UTC (rev 5077)
@@ -125,4 +125,40 @@
}
}
}
+
+ /**
+ * Revemo node in JBoss cache in privileged mode.
+ *
+ * @param cache
+ */
+ public static boolean removeNode(final Cache<Serializable, Object> cache, final Fqn fqn) throws CacheException
+ {
+ PrivilegedExceptionAction<Boolean> action = new PrivilegedExceptionAction<Boolean>()
+ {
+ public Boolean run() throws Exception
+ {
+ return cache.removeNode(fqn);
+ }
+ };
+ try
+ {
+ return SecurityHelper.doPrivilegedExceptionAction(action);
+ }
+ catch (PrivilegedActionException pae)
+ {
+ Throwable cause = pae.getCause();
+ if (cause instanceof CacheException)
+ {
+ throw (CacheException)cause;
+ }
+ else if (cause instanceof RuntimeException)
+ {
+ throw (RuntimeException)cause;
+ }
+ else
+ {
+ throw new RuntimeException(cause);
+ }
+ }
+ }
}
14 years, 6 months