diff --git a/config/alfresco/patch/patch-services-context.xml b/config/alfresco/patch/patch-services-context.xml
index a4bc459a26..5229bd73bc 100644
--- a/config/alfresco/patch/patch-services-context.xml
+++ b/config/alfresco/patch/patch-services-context.xml
@@ -1978,7 +1978,6 @@
-
@@ -1988,6 +1987,9 @@
+
+
+
diff --git a/source/java/org/alfresco/repo/admin/patch/impl/FixNameCrcValuesPatch.java b/source/java/org/alfresco/repo/admin/patch/impl/FixNameCrcValuesPatch.java
index 3a1fdffaee..6e030acf79 100644
--- a/source/java/org/alfresco/repo/admin/patch/impl/FixNameCrcValuesPatch.java
+++ b/source/java/org/alfresco/repo/admin/patch/impl/FixNameCrcValuesPatch.java
@@ -24,6 +24,7 @@ import java.io.RandomAccessFile;
import java.io.UnsupportedEncodingException;
import java.nio.ByteBuffer;
import java.nio.channels.FileChannel;
+import java.sql.Savepoint;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
@@ -36,6 +37,7 @@ import org.alfresco.repo.batch.BatchProcessor;
import org.alfresco.repo.batch.BatchProcessor.BatchProcessWorker;
import org.alfresco.repo.domain.ChildAssoc;
import org.alfresco.repo.domain.Node;
+import org.alfresco.repo.domain.control.ControlDAO;
import org.alfresco.repo.domain.hibernate.ChildAssocImpl;
import org.alfresco.repo.domain.qname.QNameDAO;
import org.alfresco.repo.node.db.NodeDaoService;
@@ -73,6 +75,7 @@ public class FixNameCrcValuesPatch extends AbstractPatch
private SessionFactory sessionFactory;
private NodeDaoService nodeDaoService;
private QNameDAO qnameDAO;
+ private ControlDAO controlDAO;
private RuleService ruleService;
private static Log progress_logger = LogFactory.getLog(PatchExecuter.class);
@@ -101,7 +104,15 @@ public class FixNameCrcValuesPatch extends AbstractPatch
{
this.qnameDAO = qnameDAO;
}
-
+
+ /**
+ * @param controlDAO used to create Savepoints
+ */
+ public void setControlDAO(ControlDAO controlDAO)
+ {
+ this.controlDAO = controlDAO;
+ }
+
/**
* @param ruleService the rule service
*/
@@ -236,12 +247,16 @@ public class FixNameCrcValuesPatch extends AbstractPatch
assoc.setChildNodeNameCrc(childCrc);
assoc.setQnameCrc(qnameCrc);
// Persist
+ Savepoint savepoint = controlDAO.createSavepoint("FixNameCrcValuesPatch");
try
{
getSession().flush();
+ controlDAO.releaseSavepoint(savepoint);
}
catch (Throwable e)
{
+ controlDAO.releaseSavepoint(savepoint);
+
String msg = I18NUtil.getMessage(MSG_UNABLE_TO_CHANGE, childNode.getId(), childName, oldChildCrc,
childCrc, qname, oldQNameCrc, qnameCrc, e.getMessage());
// We just log this and add details to the message file