RM-4921 - use retrying transaction for all write operations: create and update

This commit is contained in:
Ramona Popa
2017-05-04 18:22:56 +03:00
parent 84a770d289
commit 7352c1fae0
13 changed files with 172 additions and 19 deletions

View File

@@ -58,6 +58,7 @@
<property name="apiUtils" ref="apiUtils" /> <property name="apiUtils" ref="apiUtils" />
<property name="nodesModelFactory" ref="nodesModelFactory" /> <property name="nodesModelFactory" ref="nodesModelFactory" />
<property name="fileFolderService" ref="FileFolderService" /> <property name="fileFolderService" ref="FileFolderService" />
<property name="transactionService" ref="transactionService" />
</bean> </bean>
<bean class="org.alfresco.rm.rest.api.fileplans.FilePlanChildrenRelation"> <bean class="org.alfresco.rm.rest.api.fileplans.FilePlanChildrenRelation">
@@ -65,12 +66,14 @@
<property name="nodesModelFactory" ref="nodesModelFactory" /> <property name="nodesModelFactory" ref="nodesModelFactory" />
<property name="fileFolderService" ref="FileFolderService" /> <property name="fileFolderService" ref="FileFolderService" />
<property name="searchTypesFactory" ref="searchTypesFactory" /> <property name="searchTypesFactory" ref="searchTypesFactory" />
<property name="transactionService" ref="transactionService" />
</bean> </bean>
<bean class="org.alfresco.rm.rest.api.unfiledcontainers.UnfiledContainerEntityResource"> <bean class="org.alfresco.rm.rest.api.unfiledcontainers.UnfiledContainerEntityResource">
<property name="apiUtils" ref="apiUtils" /> <property name="apiUtils" ref="apiUtils" />
<property name="fileFolderService" ref="FileFolderService" /> <property name="fileFolderService" ref="FileFolderService" />
<property name="nodesModelFactory" ref="nodesModelFactory" /> <property name="nodesModelFactory" ref="nodesModelFactory" />
<property name="transactionService" ref="transactionService" />
</bean> </bean>
<bean class="org.alfresco.rm.rest.api.unfiledcontainers.UnfiledContainerChildrenRelation"> <bean class="org.alfresco.rm.rest.api.unfiledcontainers.UnfiledContainerChildrenRelation">
@@ -85,6 +88,7 @@
<property name="apiUtils" ref="apiUtils" /> <property name="apiUtils" ref="apiUtils" />
<property name="fileFolderService" ref="FileFolderService" /> <property name="fileFolderService" ref="FileFolderService" />
<property name="nodesModelFactory" ref="nodesModelFactory" /> <property name="nodesModelFactory" ref="nodesModelFactory" />
<property name="transactionService" ref="transactionService" />
</bean> </bean>
<bean class="org.alfresco.rm.rest.api.unfiledrecordfolders.UnfiledRecordFolderChildrenRelation"> <bean class="org.alfresco.rm.rest.api.unfiledrecordfolders.UnfiledRecordFolderChildrenRelation">
@@ -99,6 +103,7 @@
<property name="apiUtils" ref="apiUtils" /> <property name="apiUtils" ref="apiUtils" />
<property name="fileFolderService" ref="FileFolderService" /> <property name="fileFolderService" ref="FileFolderService" />
<property name="nodesModelFactory" ref="nodesModelFactory" /> <property name="nodesModelFactory" ref="nodesModelFactory" />
<property name="transactionService" ref="transactionService" />
</bean> </bean>
<bean class="org.alfresco.rm.rest.api.recordcategories.RecordCategoryChildrenRelation"> <bean class="org.alfresco.rm.rest.api.recordcategories.RecordCategoryChildrenRelation">
@@ -113,6 +118,7 @@
<property name="apiUtils" ref="apiUtils" /> <property name="apiUtils" ref="apiUtils" />
<property name="fileFolderService" ref="FileFolderService" /> <property name="fileFolderService" ref="FileFolderService" />
<property name="nodesModelFactory" ref="nodesModelFactory" /> <property name="nodesModelFactory" ref="nodesModelFactory" />
<property name="transactionService" ref="transactionService" />
</bean> </bean>
<bean class="org.alfresco.rm.rest.api.recordfolders.RecordFolderChildrenRelation"> <bean class="org.alfresco.rm.rest.api.recordfolders.RecordFolderChildrenRelation">
@@ -129,6 +135,7 @@
<property name="nodesModelFactory" ref="nodesModelFactory" /> <property name="nodesModelFactory" ref="nodesModelFactory" />
<property name="recordService" ref="RecordService"/> <property name="recordService" ref="RecordService"/>
<property name="nodeService" ref="NodeService"/> <property name="nodeService" ref="NodeService"/>
<property name="transactionService" ref="transactionService" />
</bean> </bean>
<bean class="org.alfresco.rm.rest.api.files.FilesEntityResource"> <bean class="org.alfresco.rm.rest.api.files.FilesEntityResource">
@@ -143,6 +150,7 @@
<property name="apiUtils" ref="apiUtils" /> <property name="apiUtils" ref="apiUtils" />
<property name="fileFolderService" ref="FileFolderService" /> <property name="fileFolderService" ref="FileFolderService" />
<property name="nodesModelFactory" ref="nodesModelFactory" /> <property name="nodesModelFactory" ref="nodesModelFactory" />
<property name="transactionService" ref="transactionService" />
</bean> </bean>
<bean class="org.alfresco.rm.rest.api.transfercontainers.TransferContainerChildrenRelation"> <bean class="org.alfresco.rm.rest.api.transfercontainers.TransferContainerChildrenRelation">

View File

@@ -33,12 +33,15 @@ import static org.alfresco.util.ParameterCheck.mandatory;
import java.util.AbstractList; import java.util.AbstractList;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.HashMap; import java.util.HashMap;
import java.util.LinkedList;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.Set; import java.util.Set;
import org.alfresco.query.PagingResults; import org.alfresco.query.PagingResults;
import org.alfresco.repo.activities.ActivityType;
import org.alfresco.repo.node.getchildren.FilterProp; 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.impl.Util;
import org.alfresco.rest.api.model.UserInfo; import org.alfresco.rest.api.model.UserInfo;
import org.alfresco.rest.framework.WebApiDescription; 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.FilePlanComponentsApiUtils;
import org.alfresco.rm.rest.api.impl.SearchTypesFactory; import org.alfresco.rm.rest.api.impl.SearchTypesFactory;
import org.alfresco.rm.rest.api.model.FilePlan; 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.rm.rest.api.model.RecordCategory;
import org.alfresco.service.cmr.model.FileFolderService; import org.alfresco.service.cmr.model.FileFolderService;
import org.alfresco.service.cmr.model.FileInfo; import org.alfresco.service.cmr.model.FileInfo;
import org.alfresco.service.cmr.repository.NodeRef; import org.alfresco.service.cmr.repository.NodeRef;
import org.alfresco.service.namespace.QName; import org.alfresco.service.namespace.QName;
import org.alfresco.service.transaction.TransactionService;
import org.alfresco.util.ParameterCheck; import org.alfresco.util.ParameterCheck;
import org.springframework.beans.factory.InitializingBean; import org.springframework.beans.factory.InitializingBean;
@@ -76,6 +81,7 @@ public class FilePlanChildrenRelation implements RelationshipResourceAction.Read
private FileFolderService fileFolderService; private FileFolderService fileFolderService;
private ApiNodesModelFactory nodesModelFactory; private ApiNodesModelFactory nodesModelFactory;
private SearchTypesFactory searchTypesFactory; private SearchTypesFactory searchTypesFactory;
private TransactionService transactionService;
public void setApiUtils(FilePlanComponentsApiUtils apiUtils) public void setApiUtils(FilePlanComponentsApiUtils apiUtils)
{ {
@@ -97,6 +103,11 @@ public class FilePlanChildrenRelation implements RelationshipResourceAction.Read
this.searchTypesFactory = searchTypesFactory; this.searchTypesFactory = searchTypesFactory;
} }
public void setTransactionService(TransactionService transactionService)
{
this.transactionService = transactionService;
}
@Override @Override
public void afterPropertiesSet() throws Exception public void afterPropertiesSet() throws Exception
{ {
@@ -173,21 +184,38 @@ public class FilePlanChildrenRelation implements RelationshipResourceAction.Read
mandatory("parameters", parameters); mandatory("parameters", parameters);
QName filePlanType = apiUtils.getFilePlanType(); QName filePlanType = apiUtils.getFilePlanType();
if(filePlanType == null)// rm site not created if (filePlanType == null)// rm site not created
{ {
throw new EntityNotFoundException(filePlanId); throw new EntityNotFoundException(filePlanId);
} }
NodeRef parentNodeRef = apiUtils.lookupAndValidateNodeType(filePlanId, filePlanType); NodeRef parentNodeRef = apiUtils.lookupAndValidateNodeType(filePlanId, filePlanType);
RetryingTransactionCallback<List<NodeRef>> callback = new RetryingTransactionCallback<List<NodeRef>>()
{
public List<NodeRef> execute()
{
List<NodeRef> 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<NodeRef> createdNodes = transactionService.getRetryingTransactionHelper().doInTransaction(callback);
// Get the nodes info
List<RecordCategory> result = new ArrayList<>(nodeInfos.size()); List<RecordCategory> result = new ArrayList<>(nodeInfos.size());
Map<String, UserInfo> mapUserInfo = new HashMap<>(); Map<String, UserInfo> mapUserInfo = new HashMap<>();
for (RecordCategory nodeInfo : nodeInfos) for (NodeRef newNodeRef : createdNodes)
{ {
// Create the node FileInfo info = fileFolderService.getFileInfo(newNodeRef);
NodeRef newNode = apiUtils.createRMNode(parentNodeRef, nodeInfo.getName(), RECORD_CATEGORY_TYPE, nodeInfo.getProperties(), nodeInfo.getAspectNames());
FileInfo info = fileFolderService.getFileInfo(newNode);
result.add(nodesModelFactory.createRecordCategory(info, parameters, mapUserInfo, false)); result.add(nodesModelFactory.createRecordCategory(info, parameters, mapUserInfo, false));
} }
return result; return result;
} }
} }

View File

@@ -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.module.org_alfresco_module_rm.util.RMParameterCheck.checkNotBlank;
import static org.alfresco.util.ParameterCheck.mandatory; 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.WebApiDescription;
import org.alfresco.rest.framework.WebApiParam; import org.alfresco.rest.framework.WebApiParam;
import org.alfresco.rest.framework.core.exceptions.EntityNotFoundException; 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.model.FileInfo;
import org.alfresco.service.cmr.repository.NodeRef; import org.alfresco.service.cmr.repository.NodeRef;
import org.alfresco.service.namespace.QName; import org.alfresco.service.namespace.QName;
import org.alfresco.service.transaction.TransactionService;
import org.alfresco.util.ParameterCheck; import org.alfresco.util.ParameterCheck;
import org.springframework.beans.factory.InitializingBean; import org.springframework.beans.factory.InitializingBean;
@@ -60,6 +62,7 @@ public class FilePlanEntityResource
private FilePlanComponentsApiUtils apiUtils; private FilePlanComponentsApiUtils apiUtils;
private FileFolderService fileFolderService; private FileFolderService fileFolderService;
private ApiNodesModelFactory nodesModelFactory; private ApiNodesModelFactory nodesModelFactory;
private TransactionService transactionService;
public void setApiUtils(FilePlanComponentsApiUtils apiUtils) public void setApiUtils(FilePlanComponentsApiUtils apiUtils)
{ {
@@ -76,6 +79,11 @@ public class FilePlanEntityResource
this.nodesModelFactory = nodesModelFactory; this.nodesModelFactory = nodesModelFactory;
} }
public void setTransactionService(TransactionService transactionService)
{
this.transactionService = transactionService;
}
@Override @Override
public void afterPropertiesSet() throws Exception public void afterPropertiesSet() throws Exception
{ {
@@ -117,7 +125,16 @@ public class FilePlanEntityResource
throw new EntityNotFoundException(filePlanId); throw new EntityNotFoundException(filePlanId);
} }
NodeRef nodeRef = apiUtils.lookupAndValidateNodeType(filePlanId, filePlanType); NodeRef nodeRef = apiUtils.lookupAndValidateNodeType(filePlanId, filePlanType);
apiUtils.updateNode(nodeRef, filePlanInfo, parameters);
RetryingTransactionCallback<Void> callback = new RetryingTransactionCallback<Void>()
{
public Void execute()
{
apiUtils.updateNode(nodeRef, filePlanInfo, parameters);
return null;
}
};
transactionService.getRetryingTransactionHelper().doInTransaction(callback);
FileInfo info = fileFolderService.getFileInfo(nodeRef); FileInfo info = fileFolderService.getFileInfo(nodeRef);
return nodesModelFactory.createFilePlan(info, parameters, null, false); return nodesModelFactory.createFilePlan(info, parameters, null, false);

View File

@@ -31,6 +31,7 @@ import static org.alfresco.module.org_alfresco_module_rm.util.RMParameterCheck.c
import static org.alfresco.util.ParameterCheck.mandatory; import static org.alfresco.util.ParameterCheck.mandatory;
import org.alfresco.module.org_alfresco_module_rm.model.RecordsManagementModel; 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.api.Nodes;
import org.alfresco.rest.framework.WebApiDescription; import org.alfresco.rest.framework.WebApiDescription;
import org.alfresco.rest.framework.WebApiParam; 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.FileFolderService;
import org.alfresco.service.cmr.model.FileInfo; import org.alfresco.service.cmr.model.FileInfo;
import org.alfresco.service.cmr.repository.NodeRef; import org.alfresco.service.cmr.repository.NodeRef;
import org.alfresco.service.transaction.TransactionService;
import org.springframework.beans.factory.InitializingBean; import org.springframework.beans.factory.InitializingBean;
/** /**
@@ -62,6 +64,7 @@ public class RecordCategoriesEntityResource implements
private FilePlanComponentsApiUtils apiUtils; private FilePlanComponentsApiUtils apiUtils;
private FileFolderService fileFolderService; private FileFolderService fileFolderService;
private ApiNodesModelFactory nodesModelFactory; private ApiNodesModelFactory nodesModelFactory;
private TransactionService transactionService;
public void setApiUtils(FilePlanComponentsApiUtils apiUtils) public void setApiUtils(FilePlanComponentsApiUtils apiUtils)
{ {
@@ -78,6 +81,11 @@ public class RecordCategoriesEntityResource implements
this.nodesModelFactory = nodesModelFactory; this.nodesModelFactory = nodesModelFactory;
} }
public void setTransactionService(TransactionService transactionService)
{
this.transactionService = transactionService;
}
@Override @Override
public void afterPropertiesSet() throws Exception public void afterPropertiesSet() throws Exception
{ {
@@ -111,7 +119,16 @@ public class RecordCategoriesEntityResource implements
mandatory("parameters", parameters); mandatory("parameters", parameters);
NodeRef nodeRef = apiUtils.lookupAndValidateNodeType(recordCategoryId, RecordsManagementModel.TYPE_RECORD_CATEGORY); NodeRef nodeRef = apiUtils.lookupAndValidateNodeType(recordCategoryId, RecordsManagementModel.TYPE_RECORD_CATEGORY);
apiUtils.updateNode(nodeRef, recordCategoryInfo, parameters);
RetryingTransactionCallback<Void> callback = new RetryingTransactionCallback<Void>()
{
public Void execute()
{
apiUtils.updateNode(nodeRef, recordCategoryInfo, parameters);
return null;
}
};
transactionService.getRetryingTransactionHelper().doInTransaction(callback);
FileInfo info = fileFolderService.getFileInfo(nodeRef); FileInfo info = fileFolderService.getFileInfo(nodeRef);
return nodesModelFactory.createRecordCategory(info, parameters, null, false); return nodesModelFactory.createRecordCategory(info, parameters, null, false);

View File

@@ -189,7 +189,8 @@ public class RecordCategoryChildrenRelation implements RelationshipResourceActio
RecordsManagementModel.TYPE_RECORD_CATEGORY); RecordsManagementModel.TYPE_RECORD_CATEGORY);
} }
// Create the node // 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); createdNodes.add(newNode);
} }
return createdNodes; return createdNodes;

View File

@@ -31,7 +31,6 @@ import static org.alfresco.module.org_alfresco_module_rm.util.RMParameterCheck.c
import static org.alfresco.util.ParameterCheck.mandatory; import static org.alfresco.util.ParameterCheck.mandatory;
import java.util.AbstractList; import java.util.AbstractList;
import java.util.ArrayList;
import java.util.HashMap; import java.util.HashMap;
import java.util.LinkedList; import java.util.LinkedList;
import java.util.List; 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.impl.SearchTypesFactory;
import org.alfresco.rm.rest.api.model.Record; import org.alfresco.rm.rest.api.model.Record;
import org.alfresco.rm.rest.api.model.RecordFolder; 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.rm.rest.api.model.UploadInfo;
import org.alfresco.service.cmr.model.FileFolderService; import org.alfresco.service.cmr.model.FileFolderService;
import org.alfresco.service.cmr.model.FileInfo; import org.alfresco.service.cmr.model.FileInfo;

View File

@@ -31,6 +31,7 @@ import static org.alfresco.module.org_alfresco_module_rm.util.RMParameterCheck.c
import static org.alfresco.util.ParameterCheck.mandatory; import static org.alfresco.util.ParameterCheck.mandatory;
import org.alfresco.module.org_alfresco_module_rm.model.RecordsManagementModel; 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.WebApiDescription;
import org.alfresco.rest.framework.WebApiParam; import org.alfresco.rest.framework.WebApiParam;
import org.alfresco.rest.framework.resource.EntityResource; 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.FileFolderService;
import org.alfresco.service.cmr.model.FileInfo; import org.alfresco.service.cmr.model.FileInfo;
import org.alfresco.service.cmr.repository.NodeRef; import org.alfresco.service.cmr.repository.NodeRef;
import org.alfresco.service.transaction.TransactionService;
import org.springframework.beans.factory.InitializingBean; import org.springframework.beans.factory.InitializingBean;
/** /**
@@ -59,6 +61,7 @@ public class RecordFolderEntityResource implements EntityResourceAction.ReadById
private FilePlanComponentsApiUtils apiUtils; private FilePlanComponentsApiUtils apiUtils;
private FileFolderService fileFolderService; private FileFolderService fileFolderService;
private ApiNodesModelFactory nodesModelFactory; private ApiNodesModelFactory nodesModelFactory;
private TransactionService transactionService;
public void setApiUtils(FilePlanComponentsApiUtils apiUtils) public void setApiUtils(FilePlanComponentsApiUtils apiUtils)
{ {
@@ -75,6 +78,11 @@ public class RecordFolderEntityResource implements EntityResourceAction.ReadById
this.nodesModelFactory = nodesModelFactory; this.nodesModelFactory = nodesModelFactory;
} }
public void setTransactionService(TransactionService transactionService)
{
this.transactionService = transactionService;
}
@Override @Override
public void afterPropertiesSet() throws Exception public void afterPropertiesSet() throws Exception
{ {
@@ -106,7 +114,16 @@ public class RecordFolderEntityResource implements EntityResourceAction.ReadById
mandatory("parameters", parameters); mandatory("parameters", parameters);
NodeRef nodeRef = apiUtils.lookupAndValidateNodeType(recordFolderId, RecordsManagementModel.TYPE_RECORD_FOLDER); NodeRef nodeRef = apiUtils.lookupAndValidateNodeType(recordFolderId, RecordsManagementModel.TYPE_RECORD_FOLDER);
apiUtils.updateNode(nodeRef, recordFolderInfo, parameters);
RetryingTransactionCallback<Void> callback = new RetryingTransactionCallback<Void>()
{
public Void execute()
{
apiUtils.updateNode(nodeRef, recordFolderInfo, parameters);
return null;
}
};
transactionService.getRetryingTransactionHelper().doInTransaction(callback);
FileInfo info = fileFolderService.getFileInfo(nodeRef); FileInfo info = fileFolderService.getFileInfo(nodeRef);
return nodesModelFactory.createRecordFolder(info, parameters, null, false); return nodesModelFactory.createRecordFolder(info, parameters, null, false);

View File

@@ -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.module.org_alfresco_module_rm.record.RecordService;
import org.alfresco.repo.activities.ActivityType; import org.alfresco.repo.activities.ActivityType;
import org.alfresco.repo.node.integrity.IntegrityException; 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.BinaryProperties;
import org.alfresco.rest.framework.Operation; import org.alfresco.rest.framework.Operation;
import org.alfresco.rest.framework.WebApiDescription; 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.model.FileNotFoundException;
import org.alfresco.service.cmr.repository.NodeRef; import org.alfresco.service.cmr.repository.NodeRef;
import org.alfresco.service.cmr.repository.NodeService; import org.alfresco.service.cmr.repository.NodeService;
import org.alfresco.service.transaction.TransactionService;
import org.alfresco.util.ParameterCheck; import org.alfresco.util.ParameterCheck;
import org.springframework.beans.factory.InitializingBean; import org.springframework.beans.factory.InitializingBean;
import org.springframework.dao.ConcurrencyFailureException; import org.springframework.dao.ConcurrencyFailureException;
@@ -80,6 +82,7 @@ public class RecordsEntityResource implements BinaryResourceAction.Read,
private FileFolderService fileFolderService; private FileFolderService fileFolderService;
private RecordService recordService; private RecordService recordService;
private NodeService nodeService; private NodeService nodeService;
private TransactionService transactionService;
public void setNodesModelFactory(ApiNodesModelFactory nodesModelFactory) public void setNodesModelFactory(ApiNodesModelFactory nodesModelFactory)
{ {
@@ -105,6 +108,12 @@ public class RecordsEntityResource implements BinaryResourceAction.Read,
{ {
this.fileFolderService = fileFolderService; this.fileFolderService = fileFolderService;
} }
public void setTransactionService(TransactionService transactionService)
{
this.transactionService = transactionService;
}
/** /**
* Download content * Download content
* *
@@ -197,7 +206,15 @@ public class RecordsEntityResource implements BinaryResourceAction.Read,
NodeRef record = apiUtils.validateRecord(recordId); NodeRef record = apiUtils.validateRecord(recordId);
// update info // update info
apiUtils.updateNode(record, recordInfo, parameters); RetryingTransactionCallback<Void> callback = new RetryingTransactionCallback<Void>()
{
public Void execute()
{
apiUtils.updateNode(record, recordInfo, parameters);
return null;
}
};
transactionService.getRetryingTransactionHelper().doInTransaction(callback);
// return record state // return record state
FileInfo info = fileFolderService.getFileInfo(record); FileInfo info = fileFolderService.getFileInfo(record);

View File

@@ -31,6 +31,7 @@ import static org.alfresco.module.org_alfresco_module_rm.util.RMParameterCheck.c
import static org.alfresco.util.ParameterCheck.mandatory; import static org.alfresco.util.ParameterCheck.mandatory;
import org.alfresco.module.org_alfresco_module_rm.model.RecordsManagementModel; 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.WebApiDescription;
import org.alfresco.rest.framework.WebApiParam; import org.alfresco.rest.framework.WebApiParam;
import org.alfresco.rest.framework.core.exceptions.EntityNotFoundException; 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.FileFolderService;
import org.alfresco.service.cmr.model.FileInfo; import org.alfresco.service.cmr.model.FileInfo;
import org.alfresco.service.cmr.repository.NodeRef; import org.alfresco.service.cmr.repository.NodeRef;
import org.alfresco.service.transaction.TransactionService;
import org.springframework.beans.factory.InitializingBean; import org.springframework.beans.factory.InitializingBean;
/** /**
@@ -60,6 +62,7 @@ public class TransferContainerEntityResource implements
private FilePlanComponentsApiUtils apiUtils; private FilePlanComponentsApiUtils apiUtils;
private FileFolderService fileFolderService; private FileFolderService fileFolderService;
private ApiNodesModelFactory nodesModelFactory; private ApiNodesModelFactory nodesModelFactory;
private TransactionService transactionService;
public void setApiUtils(FilePlanComponentsApiUtils apiUtils) public void setApiUtils(FilePlanComponentsApiUtils apiUtils)
{ {
@@ -76,6 +79,11 @@ public class TransferContainerEntityResource implements
this.nodesModelFactory = nodesModelFactory; this.nodesModelFactory = nodesModelFactory;
} }
public void setTransactionService(TransactionService transactionService)
{
this.transactionService = transactionService;
}
@Override @Override
public void afterPropertiesSet() throws Exception public void afterPropertiesSet() throws Exception
{ {
@@ -108,7 +116,17 @@ public class TransferContainerEntityResource implements
mandatory("parameters", parameters); mandatory("parameters", parameters);
NodeRef nodeRef = apiUtils.lookupAndValidateNodeType(transferContainerId, RecordsManagementModel.TYPE_TRANSFER_CONTAINER); NodeRef nodeRef = apiUtils.lookupAndValidateNodeType(transferContainerId, RecordsManagementModel.TYPE_TRANSFER_CONTAINER);
apiUtils.updateTransferContainer(nodeRef, transferContainerInfo, parameters);
// update info
RetryingTransactionCallback<Void> callback = new RetryingTransactionCallback<Void>()
{
public Void execute()
{
apiUtils.updateTransferContainer(nodeRef, transferContainerInfo, parameters);
return null;
}
};
transactionService.getRetryingTransactionHelper().doInTransaction(callback);
FileInfo info = fileFolderService.getFileInfo(nodeRef); FileInfo info = fileFolderService.getFileInfo(nodeRef);
return nodesModelFactory.createTransferContainer(info, parameters, null, false); return nodesModelFactory.createTransferContainer(info, parameters, null, false);

View File

@@ -31,7 +31,6 @@ import static org.alfresco.module.org_alfresco_module_rm.util.RMParameterCheck.c
import static org.alfresco.util.ParameterCheck.mandatory; import static org.alfresco.util.ParameterCheck.mandatory;
import java.util.AbstractList; import java.util.AbstractList;
import java.util.ArrayList;
import java.util.Arrays; import java.util.Arrays;
import java.util.HashMap; import java.util.HashMap;
import java.util.HashSet; import java.util.HashSet;

View File

@@ -32,6 +32,7 @@ import static org.alfresco.util.ParameterCheck.mandatory;
import org.alfresco.module.org_alfresco_module_rm.model.RecordsManagementModel; import org.alfresco.module.org_alfresco_module_rm.model.RecordsManagementModel;
import org.alfresco.repo.activities.ActivityType; import org.alfresco.repo.activities.ActivityType;
import org.alfresco.repo.transaction.RetryingTransactionHelper.RetryingTransactionCallback;
import org.alfresco.rest.framework.WebApiDescription; import org.alfresco.rest.framework.WebApiDescription;
import org.alfresco.rest.framework.WebApiParam; import org.alfresco.rest.framework.WebApiParam;
import org.alfresco.rest.framework.resource.EntityResource; 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.FileFolderService;
import org.alfresco.service.cmr.model.FileInfo; import org.alfresco.service.cmr.model.FileInfo;
import org.alfresco.service.cmr.repository.NodeRef; import org.alfresco.service.cmr.repository.NodeRef;
import org.alfresco.service.transaction.TransactionService;
import org.springframework.beans.factory.InitializingBean; import org.springframework.beans.factory.InitializingBean;
/** /**
@@ -60,6 +62,7 @@ public class UnfiledContainerEntityResource
private FilePlanComponentsApiUtils apiUtils; private FilePlanComponentsApiUtils apiUtils;
private FileFolderService fileFolderService; private FileFolderService fileFolderService;
private ApiNodesModelFactory nodesModelFactory; private ApiNodesModelFactory nodesModelFactory;
private TransactionService transactionService;
public void setApiUtils(FilePlanComponentsApiUtils apiUtils) public void setApiUtils(FilePlanComponentsApiUtils apiUtils)
{ {
@@ -76,6 +79,11 @@ public class UnfiledContainerEntityResource
this.nodesModelFactory = nodesModelFactory; this.nodesModelFactory = nodesModelFactory;
} }
public void setTransactionService(TransactionService transactionService)
{
this.transactionService = transactionService;
}
@Override @Override
public void afterPropertiesSet() throws Exception public void afterPropertiesSet() throws Exception
{ {
@@ -107,7 +115,16 @@ public class UnfiledContainerEntityResource
mandatory("parameters", parameters); mandatory("parameters", parameters);
NodeRef nodeRef = apiUtils.lookupAndValidateNodeType(unfiledContainerId, RecordsManagementModel.TYPE_UNFILED_RECORD_CONTAINER); NodeRef nodeRef = apiUtils.lookupAndValidateNodeType(unfiledContainerId, RecordsManagementModel.TYPE_UNFILED_RECORD_CONTAINER);
apiUtils.updateNode(nodeRef, unfiledContainerInfo, parameters);
RetryingTransactionCallback<Void> callback = new RetryingTransactionCallback<Void>()
{
public Void execute()
{
apiUtils.updateNode(nodeRef, unfiledContainerInfo, parameters);
return null;
}
};
transactionService.getRetryingTransactionHelper().doInTransaction(callback);
FileInfo info = fileFolderService.getFileInfo(nodeRef); FileInfo info = fileFolderService.getFileInfo(nodeRef);
apiUtils.postActivity(info, unfiledContainerInfo.getParentId(), ActivityType.FILE_UPDATED); apiUtils.postActivity(info, unfiledContainerInfo.getParentId(), ActivityType.FILE_UPDATED);

View File

@@ -31,7 +31,6 @@ import static org.alfresco.module.org_alfresco_module_rm.util.RMParameterCheck.c
import static org.alfresco.util.ParameterCheck.mandatory; import static org.alfresco.util.ParameterCheck.mandatory;
import java.util.AbstractList; import java.util.AbstractList;
import java.util.ArrayList;
import java.util.Arrays; import java.util.Arrays;
import java.util.HashMap; import java.util.HashMap;
import java.util.HashSet; 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.impl.SearchTypesFactory;
import org.alfresco.rm.rest.api.model.RMNode; import org.alfresco.rm.rest.api.model.RMNode;
import org.alfresco.rm.rest.api.model.UnfiledChild; 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.UnfiledRecordFolder;
import org.alfresco.rm.rest.api.model.UnfiledRecordFolderChild; import org.alfresco.rm.rest.api.model.UnfiledRecordFolderChild;
import org.alfresco.rm.rest.api.model.UploadInfo; import org.alfresco.rm.rest.api.model.UploadInfo;

View File

@@ -32,6 +32,7 @@ import static org.alfresco.util.ParameterCheck.mandatory;
import org.alfresco.module.org_alfresco_module_rm.model.RecordsManagementModel; import org.alfresco.module.org_alfresco_module_rm.model.RecordsManagementModel;
import org.alfresco.repo.activities.ActivityType; import org.alfresco.repo.activities.ActivityType;
import org.alfresco.repo.transaction.RetryingTransactionHelper.RetryingTransactionCallback;
import org.alfresco.rest.api.Nodes; import org.alfresco.rest.api.Nodes;
import org.alfresco.rest.framework.WebApiDescription; import org.alfresco.rest.framework.WebApiDescription;
import org.alfresco.rest.framework.WebApiParam; 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.FileFolderService;
import org.alfresco.service.cmr.model.FileInfo; import org.alfresco.service.cmr.model.FileInfo;
import org.alfresco.service.cmr.repository.NodeRef; import org.alfresco.service.cmr.repository.NodeRef;
import org.alfresco.service.transaction.TransactionService;
import org.springframework.beans.factory.InitializingBean; import org.springframework.beans.factory.InitializingBean;
/** /**
@@ -61,6 +63,8 @@ public class UnfiledRecordFolderEntityResource implements EntityResourceAction.R
private FilePlanComponentsApiUtils apiUtils; private FilePlanComponentsApiUtils apiUtils;
private FileFolderService fileFolderService; private FileFolderService fileFolderService;
private ApiNodesModelFactory nodesModelFactory; private ApiNodesModelFactory nodesModelFactory;
private TransactionService transactionService;
public void setApiUtils(FilePlanComponentsApiUtils apiUtils) public void setApiUtils(FilePlanComponentsApiUtils apiUtils)
{ {
this.apiUtils = apiUtils; this.apiUtils = apiUtils;
@@ -76,6 +80,11 @@ public class UnfiledRecordFolderEntityResource implements EntityResourceAction.R
this.nodesModelFactory = nodesModelFactory; this.nodesModelFactory = nodesModelFactory;
} }
public void setTransactionService(TransactionService transactionService)
{
this.transactionService = transactionService;
}
@Override @Override
public void afterPropertiesSet() throws Exception public void afterPropertiesSet() throws Exception
{ {
@@ -110,7 +119,16 @@ public class UnfiledRecordFolderEntityResource implements EntityResourceAction.R
mandatory("parameters", parameters); mandatory("parameters", parameters);
NodeRef nodeRef = apiUtils.lookupAndValidateNodeType(unfiledRecordFolderId, RecordsManagementModel.TYPE_UNFILED_RECORD_FOLDER); NodeRef nodeRef = apiUtils.lookupAndValidateNodeType(unfiledRecordFolderId, RecordsManagementModel.TYPE_UNFILED_RECORD_FOLDER);
apiUtils.updateNode(nodeRef, unfiledRecordFolderInfo, parameters);
RetryingTransactionCallback<Void> callback = new RetryingTransactionCallback<Void>()
{
public Void execute()
{
apiUtils.updateNode(nodeRef, unfiledRecordFolderInfo, parameters);
return null;
}
};
transactionService.getRetryingTransactionHelper().doInTransaction(callback);
FileInfo info = fileFolderService.getFileInfo(nodeRef); FileInfo info = fileFolderService.getFileInfo(nodeRef);
apiUtils.postActivity(info, unfiledRecordFolderInfo.getParentId(), ActivityType.FILE_UPDATED); apiUtils.postActivity(info, unfiledRecordFolderInfo.getParentId(), ActivityType.FILE_UPDATED);