From 0fd088fc597c38608feb8f9dffb56fcf01f9fb7a Mon Sep 17 00:00:00 2001 From: Eva Vasques Date: Wed, 18 Sep 2024 15:46:53 +0100 Subject: [PATCH] MNT-24441 Transaction Retries From A Behavior Can Fail During REST API Calls (#2921) * Reset the buffered request at the beginning of the transaction --- .../webscripts/AbstractResourceWebScript.java | 29 +++++++++---------- 1 file changed, 13 insertions(+), 16 deletions(-) diff --git a/remote-api/src/main/java/org/alfresco/rest/framework/webscripts/AbstractResourceWebScript.java b/remote-api/src/main/java/org/alfresco/rest/framework/webscripts/AbstractResourceWebScript.java index 32c0180c9c..360ca7b9fa 100644 --- a/remote-api/src/main/java/org/alfresco/rest/framework/webscripts/AbstractResourceWebScript.java +++ b/remote-api/src/main/java/org/alfresco/rest/framework/webscripts/AbstractResourceWebScript.java @@ -110,22 +110,10 @@ public abstract class AbstractResourceWebScript extends ApiWebScript implements @Override public Object execute() throws Throwable { - try - { - final Params params = paramsExtractor.extractParams(resource.getMetaData(), req); - return AbstractResourceWebScript.this.execute(resource, params, res, isReadOnly); - } - catch (Exception e) - { - if (req instanceof BufferedRequest) - { - // Reset the request in case of a transaction retry - ((BufferedRequest) req).reset(); - } - - // re-throw original exception for retry - throw e; - } + // Reset the request so that it can be read again in case of retry + resetRequest(req); + final Params params = paramsExtractor.extractParams(resource.getMetaData(), req); + return AbstractResourceWebScript.this.execute(resource, params, res, isReadOnly); } }; @@ -238,6 +226,15 @@ public abstract class AbstractResourceWebScript extends ApiWebScript implements } } + protected void resetRequest(WebScriptRequest req) + { + if (req instanceof BufferedRequest) + { + BufferedRequest bufferedRequest = (BufferedRequest) req; + bufferedRequest.reset(); + } + } + protected RetryingTransactionHelper getTransactionHelper(String api) { RetryingTransactionHelper transHelper = transactionService.getRetryingTransactionHelper();