From 7352c1fae004f240ae8c96289800eaa60bb7d76b Mon Sep 17 00:00:00 2001 From: Ramona Popa Date: Thu, 4 May 2017 18:22:56 +0300 Subject: [PATCH] RM-4921 - use retrying transaction for all write operations: create and update --- .../rm-public-rest-context.xml | 8 ++++ .../fileplans/FilePlanChildrenRelation.java | 38 ++++++++++++++++--- .../api/fileplans/FilePlanEntityResource.java | 19 +++++++++- .../RecordCategoriesEntityResource.java | 19 +++++++++- .../RecordCategoryChildrenRelation.java | 3 +- .../RecordFolderChildrenRelation.java | 2 - .../RecordFolderEntityResource.java | 19 +++++++++- .../api/records/RecordsEntityResource.java | 19 +++++++++- .../TransferContainerEntityResource.java | 20 +++++++++- .../UnfiledContainerChildrenRelation.java | 1 - .../UnfiledContainerEntityResource.java | 21 +++++++++- .../UnfiledRecordFolderChildrenRelation.java | 2 - .../UnfiledRecordFolderEntityResource.java | 20 +++++++++- 13 files changed, 172 insertions(+), 19 deletions(-) diff --git a/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/rm-public-rest-context.xml b/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/rm-public-rest-context.xml index 048f415c31..bbee8b5b35 100644 --- a/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/rm-public-rest-context.xml +++ b/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/rm-public-rest-context.xml @@ -58,6 +58,7 @@ + @@ -65,12 +66,14 @@ + + @@ -85,6 +88,7 @@ + @@ -99,6 +103,7 @@ + @@ -113,6 +118,7 @@ + @@ -129,6 +135,7 @@ + @@ -143,6 +150,7 @@ + diff --git a/rm-community/rm-community-repo/source/java/org/alfresco/rm/rest/api/fileplans/FilePlanChildrenRelation.java b/rm-community/rm-community-repo/source/java/org/alfresco/rm/rest/api/fileplans/FilePlanChildrenRelation.java index 2ed5d321ac..cda7d8f384 100644 --- a/rm-community/rm-community-repo/source/java/org/alfresco/rm/rest/api/fileplans/FilePlanChildrenRelation.java +++ b/rm-community/rm-community-repo/source/java/org/alfresco/rm/rest/api/fileplans/FilePlanChildrenRelation.java @@ -33,12 +33,15 @@ import static org.alfresco.util.ParameterCheck.mandatory; import java.util.AbstractList; import java.util.ArrayList; import java.util.HashMap; +import java.util.LinkedList; import java.util.List; import java.util.Map; import java.util.Set; import org.alfresco.query.PagingResults; +import org.alfresco.repo.activities.ActivityType; import org.alfresco.repo.node.getchildren.FilterProp; +import org.alfresco.repo.transaction.RetryingTransactionHelper.RetryingTransactionCallback; import org.alfresco.rest.api.impl.Util; import org.alfresco.rest.api.model.UserInfo; import org.alfresco.rest.framework.WebApiDescription; @@ -51,11 +54,13 @@ import org.alfresco.rm.rest.api.impl.ApiNodesModelFactory; import org.alfresco.rm.rest.api.impl.FilePlanComponentsApiUtils; import org.alfresco.rm.rest.api.impl.SearchTypesFactory; import org.alfresco.rm.rest.api.model.FilePlan; +import org.alfresco.rm.rest.api.model.Record; import org.alfresco.rm.rest.api.model.RecordCategory; import org.alfresco.service.cmr.model.FileFolderService; import org.alfresco.service.cmr.model.FileInfo; import org.alfresco.service.cmr.repository.NodeRef; import org.alfresco.service.namespace.QName; +import org.alfresco.service.transaction.TransactionService; import org.alfresco.util.ParameterCheck; import org.springframework.beans.factory.InitializingBean; @@ -76,6 +81,7 @@ public class FilePlanChildrenRelation implements RelationshipResourceAction.Read private FileFolderService fileFolderService; private ApiNodesModelFactory nodesModelFactory; private SearchTypesFactory searchTypesFactory; + private TransactionService transactionService; public void setApiUtils(FilePlanComponentsApiUtils apiUtils) { @@ -97,6 +103,11 @@ public class FilePlanChildrenRelation implements RelationshipResourceAction.Read this.searchTypesFactory = searchTypesFactory; } + public void setTransactionService(TransactionService transactionService) + { + this.transactionService = transactionService; + } + @Override public void afterPropertiesSet() throws Exception { @@ -173,21 +184,38 @@ public class FilePlanChildrenRelation implements RelationshipResourceAction.Read mandatory("parameters", parameters); QName filePlanType = apiUtils.getFilePlanType(); - if(filePlanType == null)// rm site not created + if (filePlanType == null)// rm site not created { throw new EntityNotFoundException(filePlanId); } NodeRef parentNodeRef = apiUtils.lookupAndValidateNodeType(filePlanId, filePlanType); + RetryingTransactionCallback> callback = new RetryingTransactionCallback>() + { + public List execute() + { + List createdNodes = new LinkedList<>(); + for (RecordCategory nodeInfo : nodeInfos) + { + // Create the node + NodeRef newNodeRef = apiUtils.createRMNode(parentNodeRef, nodeInfo.getName(), RECORD_CATEGORY_TYPE, + nodeInfo.getProperties(), nodeInfo.getAspectNames()); + createdNodes.add(newNodeRef); + } + return createdNodes; + } + }; + List createdNodes = transactionService.getRetryingTransactionHelper().doInTransaction(callback); + + // Get the nodes info List result = new ArrayList<>(nodeInfos.size()); Map mapUserInfo = new HashMap<>(); - for (RecordCategory nodeInfo : nodeInfos) + for (NodeRef newNodeRef : createdNodes) { - // Create the node - NodeRef newNode = apiUtils.createRMNode(parentNodeRef, nodeInfo.getName(), RECORD_CATEGORY_TYPE, nodeInfo.getProperties(), nodeInfo.getAspectNames()); - FileInfo info = fileFolderService.getFileInfo(newNode); + FileInfo info = fileFolderService.getFileInfo(newNodeRef); result.add(nodesModelFactory.createRecordCategory(info, parameters, mapUserInfo, false)); } + return result; } } diff --git a/rm-community/rm-community-repo/source/java/org/alfresco/rm/rest/api/fileplans/FilePlanEntityResource.java b/rm-community/rm-community-repo/source/java/org/alfresco/rm/rest/api/fileplans/FilePlanEntityResource.java index 2e8a3097b5..c2fa329a16 100644 --- a/rm-community/rm-community-repo/source/java/org/alfresco/rm/rest/api/fileplans/FilePlanEntityResource.java +++ b/rm-community/rm-community-repo/source/java/org/alfresco/rm/rest/api/fileplans/FilePlanEntityResource.java @@ -30,6 +30,7 @@ package org.alfresco.rm.rest.api.fileplans; import static org.alfresco.module.org_alfresco_module_rm.util.RMParameterCheck.checkNotBlank; import static org.alfresco.util.ParameterCheck.mandatory; +import org.alfresco.repo.transaction.RetryingTransactionHelper.RetryingTransactionCallback; import org.alfresco.rest.framework.WebApiDescription; import org.alfresco.rest.framework.WebApiParam; import org.alfresco.rest.framework.core.exceptions.EntityNotFoundException; @@ -43,6 +44,7 @@ import org.alfresco.service.cmr.model.FileFolderService; import org.alfresco.service.cmr.model.FileInfo; import org.alfresco.service.cmr.repository.NodeRef; import org.alfresco.service.namespace.QName; +import org.alfresco.service.transaction.TransactionService; import org.alfresco.util.ParameterCheck; import org.springframework.beans.factory.InitializingBean; @@ -60,6 +62,7 @@ public class FilePlanEntityResource private FilePlanComponentsApiUtils apiUtils; private FileFolderService fileFolderService; private ApiNodesModelFactory nodesModelFactory; + private TransactionService transactionService; public void setApiUtils(FilePlanComponentsApiUtils apiUtils) { @@ -76,6 +79,11 @@ public class FilePlanEntityResource this.nodesModelFactory = nodesModelFactory; } + public void setTransactionService(TransactionService transactionService) + { + this.transactionService = transactionService; + } + @Override public void afterPropertiesSet() throws Exception { @@ -117,7 +125,16 @@ public class FilePlanEntityResource throw new EntityNotFoundException(filePlanId); } NodeRef nodeRef = apiUtils.lookupAndValidateNodeType(filePlanId, filePlanType); - apiUtils.updateNode(nodeRef, filePlanInfo, parameters); + + RetryingTransactionCallback callback = new RetryingTransactionCallback() + { + public Void execute() + { + apiUtils.updateNode(nodeRef, filePlanInfo, parameters); + return null; + } + }; + transactionService.getRetryingTransactionHelper().doInTransaction(callback); FileInfo info = fileFolderService.getFileInfo(nodeRef); return nodesModelFactory.createFilePlan(info, parameters, null, false); diff --git a/rm-community/rm-community-repo/source/java/org/alfresco/rm/rest/api/recordcategories/RecordCategoriesEntityResource.java b/rm-community/rm-community-repo/source/java/org/alfresco/rm/rest/api/recordcategories/RecordCategoriesEntityResource.java index 4b82ed9750..e3addac7b6 100644 --- a/rm-community/rm-community-repo/source/java/org/alfresco/rm/rest/api/recordcategories/RecordCategoriesEntityResource.java +++ b/rm-community/rm-community-repo/source/java/org/alfresco/rm/rest/api/recordcategories/RecordCategoriesEntityResource.java @@ -31,6 +31,7 @@ import static org.alfresco.module.org_alfresco_module_rm.util.RMParameterCheck.c import static org.alfresco.util.ParameterCheck.mandatory; import org.alfresco.module.org_alfresco_module_rm.model.RecordsManagementModel; +import org.alfresco.repo.transaction.RetryingTransactionHelper.RetryingTransactionCallback; import org.alfresco.rest.api.Nodes; import org.alfresco.rest.framework.WebApiDescription; import org.alfresco.rest.framework.WebApiParam; @@ -43,6 +44,7 @@ import org.alfresco.rm.rest.api.model.RecordCategory; import org.alfresco.service.cmr.model.FileFolderService; import org.alfresco.service.cmr.model.FileInfo; import org.alfresco.service.cmr.repository.NodeRef; +import org.alfresco.service.transaction.TransactionService; import org.springframework.beans.factory.InitializingBean; /** @@ -62,6 +64,7 @@ public class RecordCategoriesEntityResource implements private FilePlanComponentsApiUtils apiUtils; private FileFolderService fileFolderService; private ApiNodesModelFactory nodesModelFactory; + private TransactionService transactionService; public void setApiUtils(FilePlanComponentsApiUtils apiUtils) { @@ -78,6 +81,11 @@ public class RecordCategoriesEntityResource implements this.nodesModelFactory = nodesModelFactory; } + public void setTransactionService(TransactionService transactionService) + { + this.transactionService = transactionService; + } + @Override public void afterPropertiesSet() throws Exception { @@ -111,7 +119,16 @@ public class RecordCategoriesEntityResource implements mandatory("parameters", parameters); NodeRef nodeRef = apiUtils.lookupAndValidateNodeType(recordCategoryId, RecordsManagementModel.TYPE_RECORD_CATEGORY); - apiUtils.updateNode(nodeRef, recordCategoryInfo, parameters); + + RetryingTransactionCallback callback = new RetryingTransactionCallback() + { + public Void execute() + { + apiUtils.updateNode(nodeRef, recordCategoryInfo, parameters); + return null; + } + }; + transactionService.getRetryingTransactionHelper().doInTransaction(callback); FileInfo info = fileFolderService.getFileInfo(nodeRef); return nodesModelFactory.createRecordCategory(info, parameters, null, false); diff --git a/rm-community/rm-community-repo/source/java/org/alfresco/rm/rest/api/recordcategories/RecordCategoryChildrenRelation.java b/rm-community/rm-community-repo/source/java/org/alfresco/rm/rest/api/recordcategories/RecordCategoryChildrenRelation.java index 198863b2d8..1d600a6ebf 100644 --- a/rm-community/rm-community-repo/source/java/org/alfresco/rm/rest/api/recordcategories/RecordCategoryChildrenRelation.java +++ b/rm-community/rm-community-repo/source/java/org/alfresco/rm/rest/api/recordcategories/RecordCategoryChildrenRelation.java @@ -189,7 +189,8 @@ public class RecordCategoryChildrenRelation implements RelationshipResourceActio RecordsManagementModel.TYPE_RECORD_CATEGORY); } // Create the node - NodeRef newNode = apiUtils.createRMNode(nodeParent, nodeInfo.getName(), nodeInfo.getNodeType(), nodeInfo.getProperties(), nodeInfo.getAspectNames()); + NodeRef newNode = apiUtils.createRMNode(nodeParent, nodeInfo.getName(), nodeInfo.getNodeType(), + nodeInfo.getProperties(), nodeInfo.getAspectNames()); createdNodes.add(newNode); } return createdNodes; diff --git a/rm-community/rm-community-repo/source/java/org/alfresco/rm/rest/api/recordfolders/RecordFolderChildrenRelation.java b/rm-community/rm-community-repo/source/java/org/alfresco/rm/rest/api/recordfolders/RecordFolderChildrenRelation.java index 9ba8c695ba..ab68cf9ed4 100644 --- a/rm-community/rm-community-repo/source/java/org/alfresco/rm/rest/api/recordfolders/RecordFolderChildrenRelation.java +++ b/rm-community/rm-community-repo/source/java/org/alfresco/rm/rest/api/recordfolders/RecordFolderChildrenRelation.java @@ -31,7 +31,6 @@ import static org.alfresco.module.org_alfresco_module_rm.util.RMParameterCheck.c import static org.alfresco.util.ParameterCheck.mandatory; import java.util.AbstractList; -import java.util.ArrayList; import java.util.HashMap; import java.util.LinkedList; import java.util.List; @@ -57,7 +56,6 @@ import org.alfresco.rm.rest.api.impl.FilePlanComponentsApiUtils; import org.alfresco.rm.rest.api.impl.SearchTypesFactory; import org.alfresco.rm.rest.api.model.Record; import org.alfresco.rm.rest.api.model.RecordFolder; -import org.alfresco.rm.rest.api.model.UnfiledContainerChild; import org.alfresco.rm.rest.api.model.UploadInfo; import org.alfresco.service.cmr.model.FileFolderService; import org.alfresco.service.cmr.model.FileInfo; diff --git a/rm-community/rm-community-repo/source/java/org/alfresco/rm/rest/api/recordfolders/RecordFolderEntityResource.java b/rm-community/rm-community-repo/source/java/org/alfresco/rm/rest/api/recordfolders/RecordFolderEntityResource.java index 83acf7c9ca..c582f41888 100644 --- a/rm-community/rm-community-repo/source/java/org/alfresco/rm/rest/api/recordfolders/RecordFolderEntityResource.java +++ b/rm-community/rm-community-repo/source/java/org/alfresco/rm/rest/api/recordfolders/RecordFolderEntityResource.java @@ -31,6 +31,7 @@ import static org.alfresco.module.org_alfresco_module_rm.util.RMParameterCheck.c import static org.alfresco.util.ParameterCheck.mandatory; import org.alfresco.module.org_alfresco_module_rm.model.RecordsManagementModel; +import org.alfresco.repo.transaction.RetryingTransactionHelper.RetryingTransactionCallback; import org.alfresco.rest.framework.WebApiDescription; import org.alfresco.rest.framework.WebApiParam; import org.alfresco.rest.framework.resource.EntityResource; @@ -42,6 +43,7 @@ import org.alfresco.rm.rest.api.model.RecordFolder; import org.alfresco.service.cmr.model.FileFolderService; import org.alfresco.service.cmr.model.FileInfo; import org.alfresco.service.cmr.repository.NodeRef; +import org.alfresco.service.transaction.TransactionService; import org.springframework.beans.factory.InitializingBean; /** @@ -59,6 +61,7 @@ public class RecordFolderEntityResource implements EntityResourceAction.ReadById private FilePlanComponentsApiUtils apiUtils; private FileFolderService fileFolderService; private ApiNodesModelFactory nodesModelFactory; + private TransactionService transactionService; public void setApiUtils(FilePlanComponentsApiUtils apiUtils) { @@ -75,6 +78,11 @@ public class RecordFolderEntityResource implements EntityResourceAction.ReadById this.nodesModelFactory = nodesModelFactory; } + public void setTransactionService(TransactionService transactionService) + { + this.transactionService = transactionService; + } + @Override public void afterPropertiesSet() throws Exception { @@ -106,7 +114,16 @@ public class RecordFolderEntityResource implements EntityResourceAction.ReadById mandatory("parameters", parameters); NodeRef nodeRef = apiUtils.lookupAndValidateNodeType(recordFolderId, RecordsManagementModel.TYPE_RECORD_FOLDER); - apiUtils.updateNode(nodeRef, recordFolderInfo, parameters); + + RetryingTransactionCallback callback = new RetryingTransactionCallback() + { + public Void execute() + { + apiUtils.updateNode(nodeRef, recordFolderInfo, parameters); + return null; + } + }; + transactionService.getRetryingTransactionHelper().doInTransaction(callback); FileInfo info = fileFolderService.getFileInfo(nodeRef); return nodesModelFactory.createRecordFolder(info, parameters, null, false); diff --git a/rm-community/rm-community-repo/source/java/org/alfresco/rm/rest/api/records/RecordsEntityResource.java b/rm-community/rm-community-repo/source/java/org/alfresco/rm/rest/api/records/RecordsEntityResource.java index 931fd9e950..1b3e18b1eb 100644 --- a/rm-community/rm-community-repo/source/java/org/alfresco/rm/rest/api/records/RecordsEntityResource.java +++ b/rm-community/rm-community-repo/source/java/org/alfresco/rm/rest/api/records/RecordsEntityResource.java @@ -34,6 +34,7 @@ import org.alfresco.module.org_alfresco_module_rm.model.RecordsManagementModel; import org.alfresco.module.org_alfresco_module_rm.record.RecordService; import org.alfresco.repo.activities.ActivityType; import org.alfresco.repo.node.integrity.IntegrityException; +import org.alfresco.repo.transaction.RetryingTransactionHelper.RetryingTransactionCallback; import org.alfresco.rest.framework.BinaryProperties; import org.alfresco.rest.framework.Operation; import org.alfresco.rest.framework.WebApiDescription; @@ -56,6 +57,7 @@ import org.alfresco.service.cmr.model.FileInfo; import org.alfresco.service.cmr.model.FileNotFoundException; import org.alfresco.service.cmr.repository.NodeRef; import org.alfresco.service.cmr.repository.NodeService; +import org.alfresco.service.transaction.TransactionService; import org.alfresco.util.ParameterCheck; import org.springframework.beans.factory.InitializingBean; import org.springframework.dao.ConcurrencyFailureException; @@ -80,6 +82,7 @@ public class RecordsEntityResource implements BinaryResourceAction.Read, private FileFolderService fileFolderService; private RecordService recordService; private NodeService nodeService; + private TransactionService transactionService; public void setNodesModelFactory(ApiNodesModelFactory nodesModelFactory) { @@ -105,6 +108,12 @@ public class RecordsEntityResource implements BinaryResourceAction.Read, { this.fileFolderService = fileFolderService; } + + public void setTransactionService(TransactionService transactionService) + { + this.transactionService = transactionService; + } + /** * Download content * @@ -197,7 +206,15 @@ public class RecordsEntityResource implements BinaryResourceAction.Read, NodeRef record = apiUtils.validateRecord(recordId); // update info - apiUtils.updateNode(record, recordInfo, parameters); + RetryingTransactionCallback callback = new RetryingTransactionCallback() + { + public Void execute() + { + apiUtils.updateNode(record, recordInfo, parameters); + return null; + } + }; + transactionService.getRetryingTransactionHelper().doInTransaction(callback); // return record state FileInfo info = fileFolderService.getFileInfo(record); diff --git a/rm-community/rm-community-repo/source/java/org/alfresco/rm/rest/api/transfercontainers/TransferContainerEntityResource.java b/rm-community/rm-community-repo/source/java/org/alfresco/rm/rest/api/transfercontainers/TransferContainerEntityResource.java index b3b106e6ee..7e0ea82040 100644 --- a/rm-community/rm-community-repo/source/java/org/alfresco/rm/rest/api/transfercontainers/TransferContainerEntityResource.java +++ b/rm-community/rm-community-repo/source/java/org/alfresco/rm/rest/api/transfercontainers/TransferContainerEntityResource.java @@ -31,6 +31,7 @@ import static org.alfresco.module.org_alfresco_module_rm.util.RMParameterCheck.c import static org.alfresco.util.ParameterCheck.mandatory; import org.alfresco.module.org_alfresco_module_rm.model.RecordsManagementModel; +import org.alfresco.repo.transaction.RetryingTransactionHelper.RetryingTransactionCallback; import org.alfresco.rest.framework.WebApiDescription; import org.alfresco.rest.framework.WebApiParam; import org.alfresco.rest.framework.core.exceptions.EntityNotFoundException; @@ -43,6 +44,7 @@ import org.alfresco.rm.rest.api.model.TransferContainer; import org.alfresco.service.cmr.model.FileFolderService; import org.alfresco.service.cmr.model.FileInfo; import org.alfresco.service.cmr.repository.NodeRef; +import org.alfresco.service.transaction.TransactionService; import org.springframework.beans.factory.InitializingBean; /** @@ -60,6 +62,7 @@ public class TransferContainerEntityResource implements private FilePlanComponentsApiUtils apiUtils; private FileFolderService fileFolderService; private ApiNodesModelFactory nodesModelFactory; + private TransactionService transactionService; public void setApiUtils(FilePlanComponentsApiUtils apiUtils) { @@ -76,6 +79,11 @@ public class TransferContainerEntityResource implements this.nodesModelFactory = nodesModelFactory; } + public void setTransactionService(TransactionService transactionService) + { + this.transactionService = transactionService; + } + @Override public void afterPropertiesSet() throws Exception { @@ -108,7 +116,17 @@ public class TransferContainerEntityResource implements mandatory("parameters", parameters); NodeRef nodeRef = apiUtils.lookupAndValidateNodeType(transferContainerId, RecordsManagementModel.TYPE_TRANSFER_CONTAINER); - apiUtils.updateTransferContainer(nodeRef, transferContainerInfo, parameters); + + // update info + RetryingTransactionCallback callback = new RetryingTransactionCallback() + { + public Void execute() + { + apiUtils.updateTransferContainer(nodeRef, transferContainerInfo, parameters); + return null; + } + }; + transactionService.getRetryingTransactionHelper().doInTransaction(callback); FileInfo info = fileFolderService.getFileInfo(nodeRef); return nodesModelFactory.createTransferContainer(info, parameters, null, false); diff --git a/rm-community/rm-community-repo/source/java/org/alfresco/rm/rest/api/unfiledcontainers/UnfiledContainerChildrenRelation.java b/rm-community/rm-community-repo/source/java/org/alfresco/rm/rest/api/unfiledcontainers/UnfiledContainerChildrenRelation.java index ab419a57ca..2e026f856c 100644 --- a/rm-community/rm-community-repo/source/java/org/alfresco/rm/rest/api/unfiledcontainers/UnfiledContainerChildrenRelation.java +++ b/rm-community/rm-community-repo/source/java/org/alfresco/rm/rest/api/unfiledcontainers/UnfiledContainerChildrenRelation.java @@ -31,7 +31,6 @@ import static org.alfresco.module.org_alfresco_module_rm.util.RMParameterCheck.c import static org.alfresco.util.ParameterCheck.mandatory; import java.util.AbstractList; -import java.util.ArrayList; import java.util.Arrays; import java.util.HashMap; import java.util.HashSet; diff --git a/rm-community/rm-community-repo/source/java/org/alfresco/rm/rest/api/unfiledcontainers/UnfiledContainerEntityResource.java b/rm-community/rm-community-repo/source/java/org/alfresco/rm/rest/api/unfiledcontainers/UnfiledContainerEntityResource.java index e3219d634f..9be5f5a79e 100644 --- a/rm-community/rm-community-repo/source/java/org/alfresco/rm/rest/api/unfiledcontainers/UnfiledContainerEntityResource.java +++ b/rm-community/rm-community-repo/source/java/org/alfresco/rm/rest/api/unfiledcontainers/UnfiledContainerEntityResource.java @@ -32,6 +32,7 @@ import static org.alfresco.util.ParameterCheck.mandatory; import org.alfresco.module.org_alfresco_module_rm.model.RecordsManagementModel; import org.alfresco.repo.activities.ActivityType; +import org.alfresco.repo.transaction.RetryingTransactionHelper.RetryingTransactionCallback; import org.alfresco.rest.framework.WebApiDescription; import org.alfresco.rest.framework.WebApiParam; import org.alfresco.rest.framework.resource.EntityResource; @@ -43,6 +44,7 @@ import org.alfresco.rm.rest.api.model.UnfiledContainer; import org.alfresco.service.cmr.model.FileFolderService; import org.alfresco.service.cmr.model.FileInfo; import org.alfresco.service.cmr.repository.NodeRef; +import org.alfresco.service.transaction.TransactionService; import org.springframework.beans.factory.InitializingBean; /** @@ -60,6 +62,7 @@ public class UnfiledContainerEntityResource private FilePlanComponentsApiUtils apiUtils; private FileFolderService fileFolderService; private ApiNodesModelFactory nodesModelFactory; + private TransactionService transactionService; public void setApiUtils(FilePlanComponentsApiUtils apiUtils) { @@ -76,6 +79,11 @@ public class UnfiledContainerEntityResource this.nodesModelFactory = nodesModelFactory; } + public void setTransactionService(TransactionService transactionService) + { + this.transactionService = transactionService; + } + @Override public void afterPropertiesSet() throws Exception { @@ -107,8 +115,17 @@ public class UnfiledContainerEntityResource mandatory("parameters", parameters); NodeRef nodeRef = apiUtils.lookupAndValidateNodeType(unfiledContainerId, RecordsManagementModel.TYPE_UNFILED_RECORD_CONTAINER); - apiUtils.updateNode(nodeRef, unfiledContainerInfo, parameters); - + + RetryingTransactionCallback callback = new RetryingTransactionCallback() + { + public Void execute() + { + apiUtils.updateNode(nodeRef, unfiledContainerInfo, parameters); + return null; + } + }; + transactionService.getRetryingTransactionHelper().doInTransaction(callback); + FileInfo info = fileFolderService.getFileInfo(nodeRef); apiUtils.postActivity(info, unfiledContainerInfo.getParentId(), ActivityType.FILE_UPDATED); return nodesModelFactory.createUnfiledContainer(info, parameters, null, false); diff --git a/rm-community/rm-community-repo/source/java/org/alfresco/rm/rest/api/unfiledrecordfolders/UnfiledRecordFolderChildrenRelation.java b/rm-community/rm-community-repo/source/java/org/alfresco/rm/rest/api/unfiledrecordfolders/UnfiledRecordFolderChildrenRelation.java index 0a7faf4771..aebe691a3b 100644 --- a/rm-community/rm-community-repo/source/java/org/alfresco/rm/rest/api/unfiledrecordfolders/UnfiledRecordFolderChildrenRelation.java +++ b/rm-community/rm-community-repo/source/java/org/alfresco/rm/rest/api/unfiledrecordfolders/UnfiledRecordFolderChildrenRelation.java @@ -31,7 +31,6 @@ import static org.alfresco.module.org_alfresco_module_rm.util.RMParameterCheck.c import static org.alfresco.util.ParameterCheck.mandatory; import java.util.AbstractList; -import java.util.ArrayList; import java.util.Arrays; import java.util.HashMap; import java.util.HashSet; @@ -60,7 +59,6 @@ import org.alfresco.rm.rest.api.impl.FilePlanComponentsApiUtils; import org.alfresco.rm.rest.api.impl.SearchTypesFactory; import org.alfresco.rm.rest.api.model.RMNode; import org.alfresco.rm.rest.api.model.UnfiledChild; -import org.alfresco.rm.rest.api.model.UnfiledContainerChild; import org.alfresco.rm.rest.api.model.UnfiledRecordFolder; import org.alfresco.rm.rest.api.model.UnfiledRecordFolderChild; import org.alfresco.rm.rest.api.model.UploadInfo; diff --git a/rm-community/rm-community-repo/source/java/org/alfresco/rm/rest/api/unfiledrecordfolders/UnfiledRecordFolderEntityResource.java b/rm-community/rm-community-repo/source/java/org/alfresco/rm/rest/api/unfiledrecordfolders/UnfiledRecordFolderEntityResource.java index c03f04ca05..bf626a0020 100644 --- a/rm-community/rm-community-repo/source/java/org/alfresco/rm/rest/api/unfiledrecordfolders/UnfiledRecordFolderEntityResource.java +++ b/rm-community/rm-community-repo/source/java/org/alfresco/rm/rest/api/unfiledrecordfolders/UnfiledRecordFolderEntityResource.java @@ -32,6 +32,7 @@ import static org.alfresco.util.ParameterCheck.mandatory; import org.alfresco.module.org_alfresco_module_rm.model.RecordsManagementModel; import org.alfresco.repo.activities.ActivityType; +import org.alfresco.repo.transaction.RetryingTransactionHelper.RetryingTransactionCallback; import org.alfresco.rest.api.Nodes; import org.alfresco.rest.framework.WebApiDescription; import org.alfresco.rest.framework.WebApiParam; @@ -44,6 +45,7 @@ import org.alfresco.rm.rest.api.model.UnfiledRecordFolder; import org.alfresco.service.cmr.model.FileFolderService; import org.alfresco.service.cmr.model.FileInfo; import org.alfresco.service.cmr.repository.NodeRef; +import org.alfresco.service.transaction.TransactionService; import org.springframework.beans.factory.InitializingBean; /** @@ -61,6 +63,8 @@ public class UnfiledRecordFolderEntityResource implements EntityResourceAction.R private FilePlanComponentsApiUtils apiUtils; private FileFolderService fileFolderService; private ApiNodesModelFactory nodesModelFactory; + private TransactionService transactionService; + public void setApiUtils(FilePlanComponentsApiUtils apiUtils) { this.apiUtils = apiUtils; @@ -76,6 +80,11 @@ public class UnfiledRecordFolderEntityResource implements EntityResourceAction.R this.nodesModelFactory = nodesModelFactory; } + public void setTransactionService(TransactionService transactionService) + { + this.transactionService = transactionService; + } + @Override public void afterPropertiesSet() throws Exception { @@ -110,7 +119,16 @@ public class UnfiledRecordFolderEntityResource implements EntityResourceAction.R mandatory("parameters", parameters); NodeRef nodeRef = apiUtils.lookupAndValidateNodeType(unfiledRecordFolderId, RecordsManagementModel.TYPE_UNFILED_RECORD_FOLDER); - apiUtils.updateNode(nodeRef, unfiledRecordFolderInfo, parameters); + + RetryingTransactionCallback callback = new RetryingTransactionCallback() + { + public Void execute() + { + apiUtils.updateNode(nodeRef, unfiledRecordFolderInfo, parameters); + return null; + } + }; + transactionService.getRetryingTransactionHelper().doInTransaction(callback); FileInfo info = fileFolderService.getFileInfo(nodeRef); apiUtils.postActivity(info, unfiledRecordFolderInfo.getParentId(), ActivityType.FILE_UPDATED);