Fix ALF-2591: FixNameCrcValuesPatch needs to use Savepoint (PostgreSQL)

- PostgreSQL doesn't have automatic recovery after constraint violations
 - Added in calls to new ControlDAO's createSavepoint


git-svn-id: https://svn.alfresco.com/repos/alfresco-enterprise/alfresco/HEAD/root@20001 c4b6b30b-aa2e-2d43-bbcb-ca4b014f7261
This commit is contained in:
Derek Hulley
2010-04-27 09:58:28 +00:00
parent 6e0abbb516
commit c46bc9dd26
2 changed files with 19 additions and 2 deletions

View File

@@ -1978,7 +1978,6 @@
<ref bean="patch.InvalidNameEnding" />
</list>
</property>
<!-- helper beans -->
<property name="sessionFactory">
<ref bean="sessionFactory" />
</property>
@@ -1988,6 +1987,9 @@
<property name="qnameDAO">
<ref bean="qnameDAO" />
</property>
<property name="controlDAO">
<ref bean="controlDAO" />
</property>
<property name="ruleService">
<ref bean="ruleService" />
</property>

View File

@@ -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);
@@ -102,6 +105,14 @@ 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