From 95494560abea50b91bb9fd74803de7ab3e42ca17 Mon Sep 17 00:00:00 2001 From: Sizolwakhe Leonard Mthimunye Date: Fri, 27 Feb 2026 12:18:08 +0200 Subject: [PATCH 1/7] add common method --- .../users/application/UsersApplication.java | 4 +- .../com/utils/application/CommonMethods.java | 54 ++++++++----------- 2 files changed, 25 insertions(+), 33 deletions(-) diff --git a/users_microservice/src/main/java/com/users/application/UsersApplication.java b/users_microservice/src/main/java/com/users/application/UsersApplication.java index 1935a3af..a7e1840f 100644 --- a/users_microservice/src/main/java/com/users/application/UsersApplication.java +++ b/users_microservice/src/main/java/com/users/application/UsersApplication.java @@ -10,8 +10,8 @@ @EnableAsync @EnableJpaRepositories( - basePackages = { - "com.users.application.repository"}) + basePackages = {"com.privileges.application.repository", + "com.users.application.repository",}) @EntityScan({"com.privileges.application.entity","com.users.application.entities"}) @ComponentScan(basePackages ={ diff --git a/utils_microservice/src/main/java/com/utils/application/CommonMethods.java b/utils_microservice/src/main/java/com/utils/application/CommonMethods.java index b24abc52..24177990 100644 --- a/utils_microservice/src/main/java/com/utils/application/CommonMethods.java +++ b/utils_microservice/src/main/java/com/utils/application/CommonMethods.java @@ -1,18 +1,15 @@ package com.utils.application; import com.utils.application.controllerAdvice.ExecutorControllerAdvice; +import com.utils.application.globalExceptions.ServiceTimeoutException; +import com.utils.application.globalExceptions.errorResponse.ErrorResponse; import org.slf4j.Logger; import org.slf4j.LoggerFactory; - import java.time.LocalDateTime; import java.time.format.DateTimeFormatter; import java.util.List; -import java.util.concurrent.ExecutionException; -import java.util.concurrent.Future; -import java.util.concurrent.TimeUnit; -import java.util.concurrent.TimeoutException; - import static com.utils.application.ExceptionHandler.returnErrorResponse; +import static com.utils.application.ExceptionHandler.throwExceptionAndReport; public class CommonMethods { private static final Logger logger= LoggerFactory.getLogger(CommonMethods.class); @@ -21,33 +18,28 @@ public static String formatDateTime(LocalDateTime issueDate) { return issueDate.format(formatter); } - public static List returnServiceResults(Future> futureResults,byte retryAttempt,byte retryTimes, String serviceName) { - while (true) { + public static List retryServiceTimeout(int retryAttempt, int retryTime, ServiceContract service){ + retryAttempt++; + if (retryAttempt >= retryTime) { try { - return futureResults.get(15, TimeUnit.SECONDS); - } catch (InterruptedException e) { - var errorMessage = ExecutorControllerAdvice.setMessage("Interruption occurred while executing service : " + serviceName + " reason " + e.getMessage()); - ExecutorControllerAdvice.setResolveIssueDetails("issue is under investigation, please try again later"); - return returnErrorResponse(false, errorMessage, "please reload the application"); - } catch (ExecutionException e) { - return returnErrorResponse(false, ExceptionHandlerReporter.getMessage() + " " + e.getMessage(), ExceptionHandlerReporter.getResolveIssueDetails()); - } catch (TimeoutException e) { - retryAttempt++; - if (retryAttempt >= retryTimes) { - ExecutorControllerAdvice.setMessage("Time out occurred while executing service : " + serviceName + " reason service waited 60 seconds"); - ExecutorControllerAdvice.setResolveIssueDetails("please try again later"); - return returnErrorResponse(false, ExceptionHandlerReporter.getMessage(), ExceptionHandlerReporter.getResolveIssueDetails()); - } - - - logger.info("service has failed due to time out, retrying {}:", retryAttempt); - - try { - Thread.sleep(5000); - } catch (InterruptedException ex) { - throw new RuntimeException(ex); - } + ExecutorControllerAdvice.setMessage("Time out occurred while executing service : " + service + " reason service waited 60 seconds"); + ExecutorControllerAdvice.setResolveIssueDetails("please try again later"); + throw throwExceptionAndReport(new ServiceTimeoutException(ExceptionHandlerReporter.getMessage()), ExceptionHandlerReporter.getMessage(), ExceptionHandlerReporter.getResolveIssueDetails()); + }catch(RuntimeException ee){ + return returnErrorResponse(ExceptionHandlerReporter.getMessage(), ExceptionHandlerReporter.getResolveIssueDetails(), ee); } } + + + logger.info("service has failed due to time out, retrying {}:", retryAttempt); + + try { + Thread.sleep(5000); + } catch (InterruptedException ex) { + logger.info("During service time out, sleep method interrupted while sleeping 5 seconds : {}",ex.getMessage()); + + } + return null; } + } From f29f990d51a061cf6fd64ab000afe2e90d8b3d01 Mon Sep 17 00:00:00 2001 From: Sizolwakhe Leonard Mthimunye Date: Fri, 27 Feb 2026 12:23:37 +0200 Subject: [PATCH 2/7] add throwable to handle rest status code --- .../globalExceptions/errorResponse/ErrorResponse.java | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/utils_microservice/src/main/java/com/utils/application/globalExceptions/errorResponse/ErrorResponse.java b/utils_microservice/src/main/java/com/utils/application/globalExceptions/errorResponse/ErrorResponse.java index e96cee3b..f50ccb0a 100644 --- a/utils_microservice/src/main/java/com/utils/application/globalExceptions/errorResponse/ErrorResponse.java +++ b/utils_microservice/src/main/java/com/utils/application/globalExceptions/errorResponse/ErrorResponse.java @@ -1,6 +1,8 @@ package com.utils.application.globalExceptions.errorResponse; +import com.fasterxml.jackson.annotation.JsonIgnore; import com.utils.application.ResponseContract; +import lombok.AccessLevel; import lombok.AllArgsConstructor; import lombok.Data; import lombok.Getter; @@ -12,5 +14,6 @@ public class ErrorResponse implements ResponseContract { private String errorOccurredDate; private String message; private String resolveIssueDetails; - +@JsonIgnore +private transient Throwable exception; } From 6033d0e9d84bd13d65a622247e7314b68e5f8a7a Mon Sep 17 00:00:00 2001 From: Sizolwakhe Leonard Mthimunye Date: Fri, 27 Feb 2026 12:25:46 +0200 Subject: [PATCH 3/7] Amend retrn response method --- .../utils/application/ExceptionHandler.java | 26 +++---------------- 1 file changed, 3 insertions(+), 23 deletions(-) diff --git a/utils_microservice/src/main/java/com/utils/application/ExceptionHandler.java b/utils_microservice/src/main/java/com/utils/application/ExceptionHandler.java index 225246f3..f22f7e55 100644 --- a/utils_microservice/src/main/java/com/utils/application/ExceptionHandler.java +++ b/utils_microservice/src/main/java/com/utils/application/ExceptionHandler.java @@ -21,32 +21,12 @@ public static RuntimeException throwExceptionAndReport(RuntimeException ex,Strin throw ex; }catch (RuntimeException reportException){ logger.warn("Error thrown by exception : {}\n Time thrown : {}\n Trace exception :{}", ex,formatDateTime(LocalDateTime.now()) , Arrays.stream(reportException.getStackTrace()).toList()); + ExceptionHandlerReporter.setException(reportException); return reportException; } } - public static List returnErrorResponse(boolean logging,RuntimeException ex, String errorMessage, String resolveIssueDetails){ - try{ - ExceptionHandlerReporter.setMessage(errorMessage); - ExceptionHandlerReporter.setResolveIssueDetails(resolveIssueDetails); - throw ex; - }catch (RuntimeException reportException){ - if(logging) - logger.warn("Error thrown by exception : {}\n Time thrown : {}\n Trace exception :{}", ex,formatDateTime(LocalDateTime.now()) , Arrays.stream(reportException.getStackTrace()).toList()); - - return List.of(new ErrorResponse(errorMessage,formatDateTime(),resolveIssueDetails)); - } - } - - public static List returnErrorResponse(boolean logging, String errorMessage, String resolveIssueDetails){ - - ExceptionHandlerReporter.setMessage(errorMessage); - ExceptionHandlerReporter.setResolveIssueDetails(resolveIssueDetails); - - if(logging) - logger.warn("Exception trhown by controller advicer exception details "); - - return List.of(new ErrorResponse(errorMessage,formatDateTime(),resolveIssueDetails)); - + public static List returnErrorResponse(String errorMessage, String resolveIssueDetails,Throwable throwable){ + return List.of(new ErrorResponse(errorMessage,formatDateTime(),resolveIssueDetails,throwable)); } } \ No newline at end of file From 410c255d84270d4783d0dcfa313df8b9440e4ff9 Mon Sep 17 00:00:00 2001 From: Sizolwakhe Leonard Mthimunye Date: Fri, 27 Feb 2026 12:26:29 +0200 Subject: [PATCH 4/7] return throwable --- .../java/com/utils/application/ExceptionHandlerReporter.java | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/utils_microservice/src/main/java/com/utils/application/ExceptionHandlerReporter.java b/utils_microservice/src/main/java/com/utils/application/ExceptionHandlerReporter.java index a707f7e3..608512e5 100644 --- a/utils_microservice/src/main/java/com/utils/application/ExceptionHandlerReporter.java +++ b/utils_microservice/src/main/java/com/utils/application/ExceptionHandlerReporter.java @@ -12,6 +12,8 @@ public class ExceptionHandlerReporter { private static String resolveIssueDetails; @Getter private static String issueDateFormatted; + @Getter + private static RuntimeException exception; public static String formatDateTime(LocalDateTime issueDate) { DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"); @@ -35,4 +37,7 @@ public static void setResolveIssueDetails(String resolveIssueDetails) { ExceptionHandlerReporter.resolveIssueDetails = resolveIssueDetails; } + public static void setException(RuntimeException exception) { + ExceptionHandlerReporter.exception = exception; + } } From b34c33dfc9c05de6df4ae742291a637975205836 Mon Sep 17 00:00:00 2001 From: Sizolwakhe Leonard Mthimunye Date: Fri, 27 Feb 2026 12:28:29 +0200 Subject: [PATCH 5/7] Add Service Runner exception advice --- .../ExecutorControllerAdvice.java | 23 +++++++++++++++---- 1 file changed, 18 insertions(+), 5 deletions(-) diff --git a/utils_microservice/src/main/java/com/utils/application/controllerAdvice/ExecutorControllerAdvice.java b/utils_microservice/src/main/java/com/utils/application/controllerAdvice/ExecutorControllerAdvice.java index 4cc80f75..e26ff416 100644 --- a/utils_microservice/src/main/java/com/utils/application/controllerAdvice/ExecutorControllerAdvice.java +++ b/utils_microservice/src/main/java/com/utils/application/controllerAdvice/ExecutorControllerAdvice.java @@ -18,23 +18,36 @@ public class ExecutorControllerAdvice extends ExceptionHandlerReporter { private static final Logger logger = LoggerFactory.getLogger(ExecutorControllerAdvice.class); - - @ExceptionHandler(ServiceTimeoutException.class) public ResponseEntity> manageServiceTimeoutException(){ - var list = List.of(new ErrorResponse(getIssueDateFormatted(),getResolveIssueDetails(), getMessage())); + var list = List.of(new ErrorResponse(getIssueDateFormatted(),getResolveIssueDetails(), getMessage(),getException())); + logger.warn("Error response : {}, error code : {}", list,HttpStatus.FORBIDDEN.value()); + return new ResponseEntity<>(list, HttpStatus.FORBIDDEN); + } + + @ExceptionHandler(ServiceRunnerNotFoundException.class) + public ResponseEntity> manageServiceRunnerNotFoundException(){ + var list = List.of(new ErrorResponse(getIssueDateFormatted(),getResolveIssueDetails(), getMessage(),getException())); + logger.warn("Error response : {}, error code : {}", list,HttpStatus.FORBIDDEN.value()); + return new ResponseEntity<>(list, HttpStatus.FORBIDDEN); + } + + + @ExceptionHandler(IncorrectRequestException.class) + public ResponseEntity> manageIncorrectRequestException(){ + var list = List.of(new ErrorResponse(getIssueDateFormatted(),getResolveIssueDetails(), getMessage(),getException())); logger.warn("Error response : {}, error code : {}", list,HttpStatus.FORBIDDEN.value()); return new ResponseEntity<>(list, HttpStatus.FORBIDDEN); } @ExceptionHandler(ServiceInterruptedException.class) public ResponseEntity manageServiceInterruptedException(){ - return new ResponseEntity<>(new ErrorResponse(getIssueDateFormatted(),getResolveIssueDetails(), getMessage()),HttpStatus.BAD_GATEWAY); + return new ResponseEntity<>(new ErrorResponse(getIssueDateFormatted(),getResolveIssueDetails(), getMessage(),getException()),HttpStatus.BAD_GATEWAY); } @ExceptionHandler(ServiceExecutionException.class) public ResponseEntity manageServiceExecutionException(){ - return new ResponseEntity<>(new ErrorResponse(getIssueDateFormatted(),getResolveIssueDetails(), getMessage()),HttpStatus.BAD_GATEWAY); + return new ResponseEntity<>(new ErrorResponse(getIssueDateFormatted(),getResolveIssueDetails(), getMessage(),getException()),HttpStatus.BAD_GATEWAY); } } From 0c2aaeb2c28db2d75ff852f41be277c910a498f2 Mon Sep 17 00:00:00 2001 From: Sizolwakhe Leonard Mthimunye Date: Fri, 27 Feb 2026 12:28:58 +0200 Subject: [PATCH 6/7] Uncommenting unready feature --- utils_microservice/pom.xml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/utils_microservice/pom.xml b/utils_microservice/pom.xml index 4428d7da..02dc8fc2 100644 --- a/utils_microservice/pom.xml +++ b/utils_microservice/pom.xml @@ -153,9 +153,9 @@ maven-compiler-plugin 3.11.0 - 17 - 17 - 17 + 21 + 21 + 21 org.mapstruct From 7c0db595d1396917db9a512b08191dfce8aec911 Mon Sep 17 00:00:00 2001 From: Sizolwakhe Leonard Mthimunye Date: Fri, 27 Feb 2026 12:30:06 +0200 Subject: [PATCH 7/7] adding exception --- .../globalExceptions/ServiceRunnerNotFoundException.java | 7 +++++++ 1 file changed, 7 insertions(+) create mode 100644 utils_microservice/src/main/java/com/utils/application/globalExceptions/ServiceRunnerNotFoundException.java diff --git a/utils_microservice/src/main/java/com/utils/application/globalExceptions/ServiceRunnerNotFoundException.java b/utils_microservice/src/main/java/com/utils/application/globalExceptions/ServiceRunnerNotFoundException.java new file mode 100644 index 00000000..0ca87880 --- /dev/null +++ b/utils_microservice/src/main/java/com/utils/application/globalExceptions/ServiceRunnerNotFoundException.java @@ -0,0 +1,7 @@ +package com.utils.application.globalExceptions; + +public class ServiceRunnerNotFoundException extends RuntimeException { + public ServiceRunnerNotFoundException(String message) { + super(message); + } +}