From 20616495ada9a83f63fa5e1c8d7fb3b8987a3b18 Mon Sep 17 00:00:00 2001 From: Raluca Munteanu Date: Thu, 22 Apr 2021 15:18:28 +0300 Subject: [PATCH] RM-7103: [AGS] Updating record retention schedule to a longer period fails - Added check for read only transactions. --- .../disposition/DispositionServiceImpl.java | 27 +++++++++++-------- 1 file changed, 16 insertions(+), 11 deletions(-) diff --git a/rm-community/rm-community-repo/source/java/org/alfresco/module/org_alfresco_module_rm/disposition/DispositionServiceImpl.java b/rm-community/rm-community-repo/source/java/org/alfresco/module/org_alfresco_module_rm/disposition/DispositionServiceImpl.java index 8cfdaa818c..411320d2ed 100644 --- a/rm-community/rm-community-repo/source/java/org/alfresco/module/org_alfresco_module_rm/disposition/DispositionServiceImpl.java +++ b/rm-community/rm-community-repo/source/java/org/alfresco/module/org_alfresco_module_rm/disposition/DispositionServiceImpl.java @@ -330,19 +330,24 @@ public class DispositionServiceImpl extends ServiceBaseImpl final String dispositionActionName = dsNextAction.getNextActionName(); final Date dispositionActionDate = dsNextAction.getNextActionDateAsOf(); - AuthenticationUtil.runAsSystem(new RunAsWork() + // check if current transaction is a READ ONLY one and if true set the property on the node + // in a READ WRITE transaction + if (AlfrescoTransactionSupport.getTransactionReadState().equals(TxnReadState.TXN_READ_ONLY)) { - @Override - public Void doWork() - { - nodeService.setProperty(action, PROP_DISPOSITION_AS_OF, dispositionActionDate); - if (dsNextAction.getWriteMode().equals(WriteMode.DATE_AND_NAME)) - { - nodeService.setProperty(action, PROP_DISPOSITION_ACTION_NAME, dispositionActionName); - } + transactionService.getRetryingTransactionHelper().doInTransaction((RetryingTransactionCallback) () -> { + getInternalNodeService().setProperty(action, PROP_DISPOSITION_AS_OF, dispositionActionDate); return null; - } - }); + }, false, true); + } + else + { + getInternalNodeService().setProperty(action, PROP_DISPOSITION_AS_OF, dispositionActionDate); + } + + if (dsNextAction.getWriteMode().equals(WriteMode.DATE_AND_NAME)) + { + nodeService.setProperty(action, PROP_DISPOSITION_ACTION_NAME, dispositionActionName); + } } }