[exo-jcr-commits] exo-jcr SVN: r5116 - in jcr/trunk/exo.jcr.component.core/src: test/java/org/exoplatform/services/jcr/impl/util/jdbc and 1 other directory.

do-not-reply at jboss.org do-not-reply at jboss.org
Fri Oct 28 03:02:27 EDT 2011


Author: tolusha
Date: 2011-10-28 03:02:26 -0400 (Fri, 28 Oct 2011)
New Revision: 5116

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/test/java/org/exoplatform/services/jcr/impl/util/jdbc/TestDBCleaner.java
Log:
EXOJCR-1585: Fix bug

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-27 15:49:58 UTC (rev 5115)
+++ jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/clean/rdbms/DBCleanService.java	2011-10-28 07:02:26 UTC (rev 5116)
@@ -99,6 +99,7 @@
       try
       {
          dbCleaner.executeCleanScripts();
+
          try
          {
             dbCleaner.executeCommitScripts();
@@ -107,6 +108,7 @@
          {
             LOG.error("Can't remove temporary objects", e);
          }
+
          jdbcConn.commit();
       }
       catch (SQLException e)
@@ -171,6 +173,19 @@
          dialect = DialectDetecter.detect(jdbcConn.getMetaData());
       }
 
+      // Sybase doesn't allow DDL scripts inside transaction
+      if (dialect.equalsIgnoreCase(DBConstants.DB_DIALECT_SYBASE))
+      {
+         if (!jdbcConn.getAutoCommit())
+         {
+            jdbcConn.setAutoCommit(true);
+         }
+      }
+      else
+      {
+         jdbcConn.setAutoCommit(false);
+      }
+
       if (dialect.equalsIgnoreCase(DBConstants.DB_DIALECT_ORACLE)
          || dialect.equalsIgnoreCase(DBConstants.DB_DIALECT_ORACLEOCI)
          || dialect.equalsIgnoreCase(DBConstants.DB_DIALECT_MYSQL)
@@ -178,19 +193,6 @@
          || dialect.equalsIgnoreCase(DBConstants.DB_DIALECT_SYBASE)
          || dialect.equalsIgnoreCase(DBConstants.DB_DIALECT_HSQLDB))
       {
-         // Sybase doesn't allow DDL scripts inside transaction
-         if (dialect.equalsIgnoreCase(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(getInitializationDBScripts(isMultiDB, dialect));
@@ -875,6 +877,7 @@
 
          List<String> cleanScripts = new ArrayList<String>();
          List<String> commitScripts = new ArrayList<String>();
+         List<String> rollbackScripts = new ArrayList<String>();
 
          String constraintName = validateConstraintName("JCR_FK_" + multiDb + "ITEM_PARENT", dialect);
          cleanScripts.add("ALTER TABLE JCR_" + multiDb + "ITEM " + dropCommand(false, constraintName, dialect));
@@ -883,6 +886,7 @@
          String constraint =
             "CONSTRAINT " + constraintName + " FOREIGN KEY(PARENT_ID) REFERENCES JCR_" + multiDb + "ITEM(ID)";
          commitScripts.add("ALTER TABLE JCR_" + multiDb + "ITEM ADD " + constraint);
+         rollbackScripts.add("ALTER TABLE JCR_" + multiDb + "ITEM ADD " + constraint);
 
          cleanScripts
             .add("delete from JCR_SVALUE where PROPERTY_ID IN (select ID from JCR_SITEM where CONTAINER_NAME='"
@@ -899,12 +903,12 @@
             String deleteItems =
                "delete from JCR_SITEM where I_CLASS=1 and CONTAINER_NAME='" + containerName + "' and PARENT_ID=?";
 
-            return new DBCleaner(jdbcConn, cleanScripts, new ArrayList<String>(), commitScripts,
+            return new DBCleaner(jdbcConn, cleanScripts, rollbackScripts, commitScripts,
                new RecursiveDBCleanHelper(jdbcConn, selectItems, deleteItems));
          }
 
          cleanScripts.add("delete from JCR_SITEM where CONTAINER_NAME='" + containerName + "'");
-         return new DBCleaner(jdbcConn, new ArrayList<String>(), commitScripts, cleanScripts);
+         return new DBCleaner(jdbcConn, cleanScripts, rollbackScripts, commitScripts);
       }
       else
       {

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-27 15:49:58 UTC (rev 5115)
+++ jcr/trunk/exo.jcr.component.core/src/test/java/org/exoplatform/services/jcr/impl/util/jdbc/TestDBCleaner.java	2011-10-28 07:02:26 UTC (rev 5116)
@@ -250,8 +250,8 @@
       DBCleaner repositoryDBCleaner = DBCleanService.getRepositoryDBCleaner(jdbcConn, repositoryEntry);
 
       repositoryDBCleaner.executeCleanScripts();
+      repositoryDBCleaner.executeCommitScripts();
       jdbcConn.commit();
-      repositoryDBCleaner.executeCommitScripts();
 
       // check - does JCR_SITEM become empty
       res = statement.executeQuery("select * from JCR_SITEM where ID='" + wsName + id + "'");
@@ -297,7 +297,9 @@
 
       repositoryDBCleaner.executeCleanScripts();
       jdbcConn.rollback();
+
       repositoryDBCleaner.executeRollbackScripts();
+      jdbcConn.commit();
 
       // check - does JCR_SITEM become empty
       res = statement.executeQuery("select * from JCR_SITEM where ID='" + wsName + id + "'");



More information about the exo-jcr-commits mailing list