From 134b097a5e8c08f3851f7ef9855034ece59c8ccf Mon Sep 17 00:00:00 2001 From: Arnold Galovics Date: Wed, 26 Mar 2025 10:32:18 +0100 Subject: [PATCH] FINERACT-2181: Added threadlocal context reset during parallel accrual processing --- .../LoanAccrualsProcessingServiceImpl.java | 30 +++++++++++-------- 1 file changed, 17 insertions(+), 13 deletions(-) diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/service/LoanAccrualsProcessingServiceImpl.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/service/LoanAccrualsProcessingServiceImpl.java index 553add8a4..2e566a4b5 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/service/LoanAccrualsProcessingServiceImpl.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/service/LoanAccrualsProcessingServiceImpl.java @@ -161,19 +161,23 @@ public class LoanAccrualsProcessingServiceImpl implements LoanAccrualsProcessing loans.forEach(outerLoan -> { loanTasks.add(taskExecutor.submit(() -> { - ThreadLocalContextUtil.init(context); - transactionTemplate.executeWithoutResult(status -> { - Loan loan = loanRepositoryWrapper.findOneWithNotFoundDetection(outerLoan.getId()); - setSetHelpers(loan); - try { - log.debug("Adding accruals for loan '{}'", loan.getId()); - addAccruals(loan, tillDate, false, false, true); - log.debug("Successfully processed loan: '{}' for accrual entries", loan.getId()); - } catch (Exception e) { - log.error("Failed to add accrual for loan {}", loan.getId(), e); - throw new RuntimeException("Failed to add accrual for loan " + loan.getId(), e); - } - }); + try { + ThreadLocalContextUtil.init(context); + transactionTemplate.executeWithoutResult(status -> { + Loan loan = loanRepositoryWrapper.findOneWithNotFoundDetection(outerLoan.getId()); + setSetHelpers(loan); + try { + log.debug("Adding accruals for loan '{}'", loan.getId()); + addAccruals(loan, tillDate, false, false, true); + log.debug("Successfully processed loan: '{}' for accrual entries", loan.getId()); + } catch (Exception e) { + log.error("Failed to add accrual for loan {}", loan.getId(), e); + throw new RuntimeException("Failed to add accrual for loan " + loan.getId(), e); + } + }); + } finally { + ThreadLocalContextUtil.reset(); + } })); });