This is an automated email from the ASF dual-hosted git repository.

arnold pushed a commit to branch develop
in repository https://gitbox.apache.org/repos/asf/fineract.git

commit 51028fdbd0e7432ede22c4ca776b7ed63dfb202f
Author: Arnold Galovics <[email protected]>
AuthorDate: Tue Jan 16 09:50:50 2024 +0100

    Liquibase compatibility fix
---
 .../service/RuntimeDelegatingCacheManager.java     |  2 +-
 .../infrastructure/core/api/DateParam.java         |  3 +-
 .../core/exception/MultiException.java             | 12 +++--
 .../DataSourcePerTenantServiceFactory.java         |  2 +
 .../fineract/cob/api/InternalCOBApiResource.java   |  2 +
 .../api/InternalLoanAccountLockApiResource.java    |  3 ++
 .../fineract/cob/loan/ApplyLoanLockTasklet.java    |  2 +
 .../loan/SetLoanDelinquencyTagsBusinessStep.java   | 63 ++++++++++++----------
 .../service/AsyncLoanCOBExecutorServiceImpl.java   |  2 +
 .../service/InlineLoanCOBExecutorServiceImpl.java  |  8 +--
 .../SendMessageToSmsGatewayTasklet.java            |  2 +
 .../core/config/CompatibilityConfig.java           |  2 +
 .../infrastructure/core/config/HikariCpConfig.java | 13 ++---
 .../sampling/core/AbstractSamplingService.java     |  2 +
 .../migration/ExtendedSpringLiquibaseBuilder.java  |  6 +--
 .../FineractEntityAccessReadServiceImpl.java       |  2 +
 .../instancemode/api/InstanceModeApiResource.java  |  3 ++
 .../jobs/service/JobRegisterServiceImpl.java       |  2 +
 .../jobs/service/JobSchedulerServiceImpl.java      |  2 +
 .../TenantAwareBasicAuthenticationFilter.java      | 35 ++++++------
 .../filter/TenantAwareTenantIdentifierFilter.java  | 34 ++++++------
 .../CustomAuthenticationFailureHandler.java        | 12 ++---
 .../SmsMessageScheduledJobServiceImpl.java         |  2 +
 .../api/InternalClientInformationApiResource.java  |  3 ++
 .../validator/LoanDelinquencyActionData.java       | 16 +++---
 .../api/InternalLoanInformationApiResource.java    |  6 +++
 .../LoanWritePlatformServiceJpaRepositoryImpl.java |  2 +
 .../PostInterestForSavingTasklet.java              |  7 +--
 .../org/apache/fineract/TestConfiguration.java     | 35 ++++++++----
 .../cob/COBBusinessStepServiceStepDefinitions.java |  1 +
 .../ClasspathDuplicatesStepDefinitions.java        |  2 +
 .../core/MultiExceptionStepDefinitions.java        |  1 +
 integration-tests/dependencies.gradle              |  2 +-
 33 files changed, 178 insertions(+), 113 deletions(-)

diff --git 
a/fineract-core/src/main/java/org/apache/fineract/infrastructure/cache/service/RuntimeDelegatingCacheManager.java
 
b/fineract-core/src/main/java/org/apache/fineract/infrastructure/cache/service/RuntimeDelegatingCacheManager.java
index f2d3b4e97..188670129 100644
--- 
a/fineract-core/src/main/java/org/apache/fineract/infrastructure/cache/service/RuntimeDelegatingCacheManager.java
+++ 
b/fineract-core/src/main/java/org/apache/fineract/infrastructure/cache/service/RuntimeDelegatingCacheManager.java
@@ -126,7 +126,7 @@ public class RuntimeDelegatingCacheManager implements 
CacheManager, Initializing
                     
Objects.requireNonNull(ehCacheManager.getCache(cacheName)).clear();
                 }
             } catch (NullPointerException npe) {
-                log.warn(npe.getMessage());
+                log.warn("NullPointerException occurred", npe);
             }
         }
     }
diff --git 
a/fineract-core/src/main/java/org/apache/fineract/infrastructure/core/api/DateParam.java
 
b/fineract-core/src/main/java/org/apache/fineract/infrastructure/core/api/DateParam.java
index b801f041c..fcf183388 100755
--- 
a/fineract-core/src/main/java/org/apache/fineract/infrastructure/core/api/DateParam.java
+++ 
b/fineract-core/src/main/java/org/apache/fineract/infrastructure/core/api/DateParam.java
@@ -18,7 +18,6 @@
  */
 package org.apache.fineract.infrastructure.core.api;
 
-import jakarta.ws.rs.WebApplicationException;
 import java.time.LocalDate;
 import java.util.Locale;
 import org.apache.fineract.infrastructure.core.data.DateFormat;
@@ -31,7 +30,7 @@ public class DateParam {
 
     private final String dateAsString;
 
-    public DateParam(final String dateStr) throws WebApplicationException {
+    public DateParam(final String dateStr) {
         this.dateAsString = dateStr;
     }
 
diff --git 
a/fineract-core/src/main/java/org/apache/fineract/infrastructure/core/exception/MultiException.java
 
b/fineract-core/src/main/java/org/apache/fineract/infrastructure/core/exception/MultiException.java
index 212761fb9..17276de5a 100644
--- 
a/fineract-core/src/main/java/org/apache/fineract/infrastructure/core/exception/MultiException.java
+++ 
b/fineract-core/src/main/java/org/apache/fineract/infrastructure/core/exception/MultiException.java
@@ -19,14 +19,14 @@
 package org.apache.fineract.infrastructure.core.exception;
 
 import com.google.common.io.CharStreams;
+import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
 import java.io.PrintStream;
 import java.io.PrintWriter;
 import java.io.Writer;
 import java.util.ArrayList;
 import java.util.Collections;
 import java.util.List;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
+import lombok.extern.slf4j.Slf4j;
 
 /**
  * Exception with multiple root causes.
@@ -45,11 +45,12 @@ import org.slf4j.LoggerFactory;
  *
  * @author Michael Vorburger.ch <[email protected]>
  */
+@Slf4j
 public class MultiException extends Exception {
 
-    private static final Logger LOG = 
LoggerFactory.getLogger(MultiException.class);
     private final List<Throwable> throwables;
 
+    @SuppressFBWarnings("CT_CONSTRUCTOR_THROW")
     public MultiException(List<Throwable> problems) {
         super("MultiException with " + problems.size() + " contained causes 
(details available)");
         if (problems.isEmpty()) {
@@ -80,11 +81,12 @@ public class MultiException extends Exception {
 
     @Override
     @SuppressWarnings("RegexpSinglelineJava")
+    @SuppressFBWarnings("SLF4J_SIGN_ONLY_FORMAT")
     public void printStackTrace() {
-        LOG.error("{}", super.getMessage());
+        log.error("{}", super.getMessage());
         int i = 0;
         for (Throwable e : throwables) {
-            LOG.error("{}.", ++i);
+            log.error("{}.", ++i);
             e.printStackTrace();
         }
     }
diff --git 
a/fineract-core/src/main/java/org/apache/fineract/infrastructure/core/service/database/DataSourcePerTenantServiceFactory.java
 
b/fineract-core/src/main/java/org/apache/fineract/infrastructure/core/service/database/DataSourcePerTenantServiceFactory.java
index 410b3db96..ea980e516 100644
--- 
a/fineract-core/src/main/java/org/apache/fineract/infrastructure/core/service/database/DataSourcePerTenantServiceFactory.java
+++ 
b/fineract-core/src/main/java/org/apache/fineract/infrastructure/core/service/database/DataSourcePerTenantServiceFactory.java
@@ -22,6 +22,7 @@ import static 
org.apache.fineract.infrastructure.core.domain.FineractPlatformTen
 import static 
org.apache.fineract.infrastructure.core.domain.FineractPlatformTenantConnection.toProtocol;
 
 import com.zaxxer.hikari.HikariConfig;
+import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
 import javax.sql.DataSource;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.lang3.StringUtils;
@@ -60,6 +61,7 @@ public class DataSourcePerTenantServiceFactory {
         this.databasePasswordEncryptor = databasePasswordEncryptor;
     }
 
+    @SuppressFBWarnings(value = "SLF4J_SIGN_ONLY_FORMAT")
     public DataSource createNewDataSourceFor(final 
FineractPlatformTenantConnection tenantConnection) {
         if 
(!databasePasswordEncryptor.isMasterPasswordHashValid(tenantConnection.getMasterPasswordHash()))
 {
             throw new IllegalArgumentException(
diff --git 
a/fineract-provider/src/main/java/org/apache/fineract/cob/api/InternalCOBApiResource.java
 
b/fineract-provider/src/main/java/org/apache/fineract/cob/api/InternalCOBApiResource.java
index 3a4165617..7402955bc 100644
--- 
a/fineract-provider/src/main/java/org/apache/fineract/cob/api/InternalCOBApiResource.java
+++ 
b/fineract-provider/src/main/java/org/apache/fineract/cob/api/InternalCOBApiResource.java
@@ -18,6 +18,7 @@
  */
 package org.apache.fineract.cob.api;
 
+import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
 import jakarta.ws.rs.Consumes;
 import jakarta.ws.rs.GET;
 import jakarta.ws.rs.Path;
@@ -54,6 +55,7 @@ public class InternalCOBApiResource implements 
InitializingBean {
     private final ToApiJsonSerializer<List> toApiJsonSerializerForList;
 
     @Override
+    @SuppressFBWarnings("SLF4J_SIGN_ONLY_FORMAT")
     public void afterPropertiesSet() throws Exception {
         
log.warn("------------------------------------------------------------");
         log.warn("                                                            
");
diff --git 
a/fineract-provider/src/main/java/org/apache/fineract/cob/api/InternalLoanAccountLockApiResource.java
 
b/fineract-provider/src/main/java/org/apache/fineract/cob/api/InternalLoanAccountLockApiResource.java
index 59746d54b..9d5d731d3 100644
--- 
a/fineract-provider/src/main/java/org/apache/fineract/cob/api/InternalLoanAccountLockApiResource.java
+++ 
b/fineract-provider/src/main/java/org/apache/fineract/cob/api/InternalLoanAccountLockApiResource.java
@@ -18,6 +18,7 @@
  */
 package org.apache.fineract.cob.api;
 
+import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
 import jakarta.ws.rs.Consumes;
 import jakarta.ws.rs.POST;
 import jakarta.ws.rs.Path;
@@ -50,6 +51,7 @@ public class InternalLoanAccountLockApiResource implements 
InitializingBean {
     private final LoanAccountLockRepository loanAccountLockRepository;
 
     @Override
+    @SuppressFBWarnings("SLF4J_SIGN_ONLY_FORMAT")
     public void afterPropertiesSet() throws Exception {
         
log.warn("------------------------------------------------------------");
         log.warn("                                                            
");
@@ -65,6 +67,7 @@ public class InternalLoanAccountLockApiResource implements 
InitializingBean {
     @Path("{loanId}/place-lock/{lockOwner}")
     @Consumes({ MediaType.APPLICATION_JSON })
     @Produces({ MediaType.APPLICATION_JSON })
+    @SuppressFBWarnings("SLF4J_SIGN_ONLY_FORMAT")
     public Response placeLockOnLoanAccount(@Context final UriInfo uriInfo, 
@PathParam("loanId") Long loanId,
             @PathParam("lockOwner") String lockOwner, @RequestBody(required = 
false) String error) {
         
log.warn("------------------------------------------------------------");
diff --git 
a/fineract-provider/src/main/java/org/apache/fineract/cob/loan/ApplyLoanLockTasklet.java
 
b/fineract-provider/src/main/java/org/apache/fineract/cob/loan/ApplyLoanLockTasklet.java
index 00397a9e7..f3e713f7a 100644
--- 
a/fineract-provider/src/main/java/org/apache/fineract/cob/loan/ApplyLoanLockTasklet.java
+++ 
b/fineract-provider/src/main/java/org/apache/fineract/cob/loan/ApplyLoanLockTasklet.java
@@ -21,6 +21,7 @@ package org.apache.fineract.cob.loan;
 import static 
org.springframework.transaction.TransactionDefinition.PROPAGATION_REQUIRES_NEW;
 
 import com.google.common.collect.Lists;
+import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
 import java.util.ArrayList;
 import java.util.Collections;
 import java.util.List;
@@ -55,6 +56,7 @@ public class ApplyLoanLockTasklet implements Tasklet {
     private final TransactionTemplate transactionTemplate;
 
     @Override
+    @SuppressFBWarnings("SLF4J_SIGN_ONLY_FORMAT")
     public RepeatStatus execute(@NotNull StepContribution contribution, 
@NotNull ChunkContext chunkContext)
             throws LoanLockCannotBeAppliedException {
         ExecutionContext executionContext = 
contribution.getStepExecution().getExecutionContext();
diff --git 
a/fineract-provider/src/main/java/org/apache/fineract/cob/loan/SetLoanDelinquencyTagsBusinessStep.java
 
b/fineract-provider/src/main/java/org/apache/fineract/cob/loan/SetLoanDelinquencyTagsBusinessStep.java
index 732af1ba3..9c9904f19 100644
--- 
a/fineract-provider/src/main/java/org/apache/fineract/cob/loan/SetLoanDelinquencyTagsBusinessStep.java
+++ 
b/fineract-provider/src/main/java/org/apache/fineract/cob/loan/SetLoanDelinquencyTagsBusinessStep.java
@@ -20,6 +20,7 @@ package org.apache.fineract.cob.loan;
 
 import static 
org.apache.fineract.infrastructure.core.diagnostics.performance.MeasuringUtil.measure;
 
+import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
 import java.time.LocalDate;
 import java.util.List;
 import java.util.Optional;
@@ -57,35 +58,41 @@ public class SetLoanDelinquencyTagsBusinessStep implements 
LoanCOBBusinessStep {
         }
 
         String externalId = 
Optional.ofNullable(loan.getExternalId()).map(ExternalId::getValue).orElse(null);
-        measure(() -> {
-            try {
-                log.debug("Starting delinquency tag processing for loan with 
Id [{}], account number [{}], external Id [{}]", loan.getId(),
-                        loan.getAccountNumber(), externalId);
-
-                // Change the Action Context to DEFAULT for Business Date so 
that we can compare the loan due date to
-                // the
-                // current date and not the previous (COB) date.
-                ThreadLocalContextUtil.setActionContext(ActionContext.DEFAULT);
-
-                final List<LoanDelinquencyAction> savedDelinquencyList = 
delinquencyReadPlatformService
-                        .retrieveLoanDelinquencyActions(loan.getId());
-                List<LoanDelinquencyActionData> effectiveDelinquencyList = 
delinquencyEffectivePauseHelper
-                        
.calculateEffectiveDelinquencyList(savedDelinquencyList);
-
-                if (!isDelinquencyOnPause(loan, effectiveDelinquencyList)) {
-                    loanAccountDomainService.setLoanDelinquencyTag(loan, 
DateUtils.getBusinessLocalDate(), effectiveDelinquencyList);
-                } else {
-                    log.debug("Delinquency is on pause for loan with ID [{}]", 
loan.getId());
+        measure(new Runnable() {
+
+            @SuppressFBWarnings("SLF4J_MANUALLY_PROVIDED_MESSAGE")
+            @Override
+            public void run() {
+                try {
+                    log.debug("Starting delinquency tag processing for loan 
with Id [{}], account number [{}], external Id [{}]",
+                            loan.getId(), loan.getAccountNumber(), externalId);
+
+                    // Change the Action Context to DEFAULT for Business Date 
so that we can compare the loan due date
+                    // to
+                    // the
+                    // current date and not the previous (COB) date.
+                    
ThreadLocalContextUtil.setActionContext(ActionContext.DEFAULT);
+
+                    final List<LoanDelinquencyAction> savedDelinquencyList = 
delinquencyReadPlatformService
+                            .retrieveLoanDelinquencyActions(loan.getId());
+                    List<LoanDelinquencyActionData> effectiveDelinquencyList = 
delinquencyEffectivePauseHelper
+                            
.calculateEffectiveDelinquencyList(savedDelinquencyList);
+
+                    if 
(!SetLoanDelinquencyTagsBusinessStep.this.isDelinquencyOnPause(loan, 
effectiveDelinquencyList)) {
+                        loanAccountDomainService.setLoanDelinquencyTag(loan, 
DateUtils.getBusinessLocalDate(), effectiveDelinquencyList);
+                    } else {
+                        log.debug("Delinquency is on pause for loan with ID 
[{}]", loan.getId());
+                    }
+                } catch (RuntimeException re) {
+                    log.error(
+                            "Received [{}] exception while processing 
delinquency tag for loan with Id [{}], account number [{}], external Id [{}]",
+                            re.getMessage(), loan.getId(), 
loan.getAccountNumber(), externalId, re);
+
+                    throw re;
+                } finally {
+                    // Change the Action Context back to COB to resume COB 
steps.
+                    ThreadLocalContextUtil.setActionContext(ActionContext.COB);
                 }
-            } catch (RuntimeException re) {
-                log.error(
-                        "Received [{}] exception while processing delinquency 
tag for loan with Id [{}], account number [{}], external Id [{}]",
-                        re.getMessage(), loan.getId(), 
loan.getAccountNumber(), externalId, re);
-
-                throw re;
-            } finally {
-                // Change the Action Context back to COB to resume COB steps.
-                ThreadLocalContextUtil.setActionContext(ActionContext.COB);
             }
         }, duration -> {
             log.debug("Ending delinquency tag processing for loan with Id 
[{}], account number [{}], external Id [{}], finished in [{}]ms",
diff --git 
a/fineract-provider/src/main/java/org/apache/fineract/cob/service/AsyncLoanCOBExecutorServiceImpl.java
 
b/fineract-provider/src/main/java/org/apache/fineract/cob/service/AsyncLoanCOBExecutorServiceImpl.java
index ece705203..f4051256b 100644
--- 
a/fineract-provider/src/main/java/org/apache/fineract/cob/service/AsyncLoanCOBExecutorServiceImpl.java
+++ 
b/fineract-provider/src/main/java/org/apache/fineract/cob/service/AsyncLoanCOBExecutorServiceImpl.java
@@ -18,6 +18,7 @@
  */
 package org.apache.fineract.cob.service;
 
+import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
 import java.time.LocalDate;
 import java.time.format.DateTimeFormatter;
 import java.util.Collections;
@@ -67,6 +68,7 @@ public class AsyncLoanCOBExecutorServiceImpl implements 
AsyncLoanCOBExecutorServ
 
     @Override
     @Async(TaskExecutorConstant.LOAN_COB_CATCH_UP_TASK_EXECUTOR_BEAN_NAME)
+    @SuppressFBWarnings("SLF4J_SIGN_ONLY_FORMAT")
     public void executeLoanCOBCatchUpAsync(FineractContext context) {
         try {
             ThreadLocalContextUtil.init(context);
diff --git 
a/fineract-provider/src/main/java/org/apache/fineract/cob/service/InlineLoanCOBExecutorServiceImpl.java
 
b/fineract-provider/src/main/java/org/apache/fineract/cob/service/InlineLoanCOBExecutorServiceImpl.java
index b46831726..cd23952bc 100644
--- 
a/fineract-provider/src/main/java/org/apache/fineract/cob/service/InlineLoanCOBExecutorServiceImpl.java
+++ 
b/fineract-provider/src/main/java/org/apache/fineract/cob/service/InlineLoanCOBExecutorServiceImpl.java
@@ -22,6 +22,7 @@ import static 
org.springframework.transaction.TransactionDefinition.PROPAGATION_
 
 import com.google.common.collect.Lists;
 import com.google.gson.Gson;
+import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
 import java.time.LocalDate;
 import java.time.format.DateTimeFormatter;
 import java.util.ArrayList;
@@ -134,6 +135,7 @@ public class InlineLoanCOBExecutorServiceImpl implements 
InlineExecutorService<L
         return loanIdsToBeProcessed;
     }
 
+    @SuppressFBWarnings("SLF4J_SIGN_ONLY_FORMAT")
     private void execute(List<Long> loanIds, String jobName, LocalDate 
businessDate) {
         lockLoanAccounts(loanIds, businessDate);
         Job inlineLoanCOBJob;
@@ -226,9 +228,9 @@ public class InlineLoanCOBExecutorServiceImpl implements 
InlineExecutorService<L
                         
loanAccountLock.setNewLockOwner(LockOwner.LOAN_INLINE_COB_PROCESSING);
                         
loanAccountLockRepository.saveAndFlush(loanAccountLock);
                     } catch (Exception e) {
-                        String message = "Error updating lock on loan account. 
Locked loan ID: %s".formatted(loanAccountLock.getLoanId());
-                        log.error("{}", message, e);
-                        throw new 
LoanAccountLockCannotBeOverruledException(message, e);
+                        log.error("Error updating lock on loan account. Locked 
loan ID: {}", loanAccountLock.getLoanId(), e);
+                        throw new LoanAccountLockCannotBeOverruledException(
+                                "Error updating lock on loan account. Locked 
loan ID: %s".formatted(loanAccountLock.getLoanId()), e);
                     }
                 });
             }
diff --git 
a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/campaigns/jobs/sendmessagetosmsgateway/SendMessageToSmsGatewayTasklet.java
 
b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/campaigns/jobs/sendmessagetosmsgateway/SendMessageToSmsGatewayTasklet.java
index edd9abbc7..4ef12fcf7 100644
--- 
a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/campaigns/jobs/sendmessagetosmsgateway/SendMessageToSmsGatewayTasklet.java
+++ 
b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/campaigns/jobs/sendmessagetosmsgateway/SendMessageToSmsGatewayTasklet.java
@@ -18,6 +18,7 @@
  */
 package 
org.apache.fineract.infrastructure.campaigns.jobs.sendmessagetosmsgateway;
 
+import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
 import java.net.URI;
 import java.util.ArrayList;
 import java.util.Collection;
@@ -133,6 +134,7 @@ public class SendMessageToSmsGatewayTasklet implements 
Tasklet {
         }
     }
 
+    @SuppressFBWarnings("SLF4J_SIGN_ONLY_FORMAT")
     private void 
connectAndSendToIntermediateServer(Collection<SmsMessageApiQueueResourceData> 
apiQueueResourceDatas) {
         Map<String, Object> hostConfig = 
smsConfigUtils.getMessageGateWayRequestURI("sms",
                 
SmsMessageApiQueueResourceData.toJsonString(apiQueueResourceDatas));
diff --git 
a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/core/config/CompatibilityConfig.java
 
b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/core/config/CompatibilityConfig.java
index c6d8c305d..11811517e 100644
--- 
a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/core/config/CompatibilityConfig.java
+++ 
b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/core/config/CompatibilityConfig.java
@@ -21,6 +21,7 @@ package org.apache.fineract.infrastructure.core.config;
 
 import com.zaxxer.hikari.HikariConfig;
 import com.zaxxer.hikari.HikariDataSource;
+import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
 import jakarta.annotation.PostConstruct;
 import java.util.Properties;
 import org.slf4j.Logger;
@@ -43,6 +44,7 @@ public class CompatibilityConfig {
     ApplicationContext context;
 
     @PostConstruct
+    @SuppressFBWarnings("SLF4J_SIGN_ONLY_FORMAT")
     public void init() {
         Environment environment = context.getEnvironment();
 
diff --git 
a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/core/config/HikariCpConfig.java
 
b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/core/config/HikariCpConfig.java
index 90a7204e6..31ef03327 100644
--- 
a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/core/config/HikariCpConfig.java
+++ 
b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/core/config/HikariCpConfig.java
@@ -19,7 +19,6 @@
 
 package org.apache.fineract.infrastructure.core.config;
 
-import com.zaxxer.hikari.HikariConfig;
 import com.zaxxer.hikari.HikariDataSource;
 import 
org.springframework.boot.autoconfigure.condition.ConditionalOnExpression;
 import org.springframework.boot.context.properties.ConfigurationProperties;
@@ -33,14 +32,10 @@ public class HikariCpConfig {
     // TODO: we can get rid of this config class by defining 
"spring.hikariTenantDataSource.hikari.*" in
     // "application.properties" and enabling auto-configuration
 
-    @Bean
+    // initMethod is triggering lazy initialization of Hikari pool
+    @Bean(initMethod = "getConnection", destroyMethod = "close")
     @ConfigurationProperties(prefix = "spring.datasource.hikari")
-    public HikariConfig hikariConfig() {
-        return new HikariConfig();
-    }
-
-    @Bean(destroyMethod = "close")
-    public HikariDataSource hikariTenantDataSource(HikariConfig hikariConfig) {
-        return new HikariDataSource(hikariConfig);
+    public HikariDataSource hikariTenantDataSource() {
+        return new HikariDataSource();
     }
 }
diff --git 
a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/core/diagnostics/performance/sampling/core/AbstractSamplingService.java
 
b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/core/diagnostics/performance/sampling/core/AbstractSamplingService.java
index 116380cfd..91b87c4d8 100644
--- 
a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/core/diagnostics/performance/sampling/core/AbstractSamplingService.java
+++ 
b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/core/diagnostics/performance/sampling/core/AbstractSamplingService.java
@@ -20,6 +20,7 @@ package 
org.apache.fineract.infrastructure.core.diagnostics.performance.sampling
 
 import static 
org.apache.fineract.infrastructure.core.diagnostics.performance.MeasuringUtil.measure;
 
+import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
 import java.time.Duration;
 import java.util.Map;
 import java.util.concurrent.ConcurrentHashMap;
@@ -31,6 +32,7 @@ public abstract class AbstractSamplingService implements 
SamplingService {
     private final Map<String, AtomicInteger> sampleCounters = new 
ConcurrentHashMap<>();
     private final int samplingRate;
 
+    @SuppressFBWarnings("CT_CONSTRUCTOR_THROW")
     public AbstractSamplingService(int samplingRate) {
         if (samplingRate < 1) {
             throw new IllegalArgumentException("samplingRate cannot be less 
than 1");
diff --git 
a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/core/service/migration/ExtendedSpringLiquibaseBuilder.java
 
b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/core/service/migration/ExtendedSpringLiquibaseBuilder.java
index 484fe9476..cf4969567 100644
--- 
a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/core/service/migration/ExtendedSpringLiquibaseBuilder.java
+++ 
b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/core/service/migration/ExtendedSpringLiquibaseBuilder.java
@@ -42,7 +42,7 @@ public class ExtendedSpringLiquibaseBuilder {
     private final String databaseChangeLogTable;
     private final String databaseChangeLogLockTable;
     private final boolean shouldRun;
-    private final String labels;
+    private final String labelFilter;
     private final File rollbackFile;
     private final boolean testRollbackOnUpdate;
     private final String tag;
@@ -68,7 +68,7 @@ public class ExtendedSpringLiquibaseBuilder {
         this.databaseChangeLogTable = 
liquibaseProperties.getDatabaseChangeLogTable();
         this.databaseChangeLogLockTable = 
liquibaseProperties.getDatabaseChangeLogLockTable();
         this.shouldRun = liquibaseProperties.isEnabled();
-        this.labels = liquibaseProperties.getLabels();
+        this.labelFilter = liquibaseProperties.getLabelFilter();
         this.rollbackFile = liquibaseProperties.getRollbackFile();
         this.testRollbackOnUpdate = 
liquibaseProperties.isTestRollbackOnUpdate();
         this.tag = liquibaseProperties.getTag();
@@ -116,7 +116,7 @@ public class ExtendedSpringLiquibaseBuilder {
         result.setDatabaseChangeLogTable(databaseChangeLogTable);
         result.setDatabaseChangeLogLockTable(databaseChangeLogLockTable);
         result.setShouldRun(shouldRun);
-        result.setLabels(labels);
+        result.setLabelFilter(labelFilter);
         result.setRollbackFile(rollbackFile);
         result.setTestRollbackOnUpdate(testRollbackOnUpdate);
         result.setTag(tag);
diff --git 
a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/entityaccess/service/FineractEntityAccessReadServiceImpl.java
 
b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/entityaccess/service/FineractEntityAccessReadServiceImpl.java
index 057d135ac..22c1c0b3c 100644
--- 
a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/entityaccess/service/FineractEntityAccessReadServiceImpl.java
+++ 
b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/entityaccess/service/FineractEntityAccessReadServiceImpl.java
@@ -18,6 +18,7 @@
  */
 package org.apache.fineract.infrastructure.entityaccess.service;
 
+import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
 import java.sql.Date;
 import java.sql.ResultSet;
 import java.sql.SQLException;
@@ -132,6 +133,7 @@ public class FineractEntityAccessReadServiceImpl implements 
FineractEntityAccess
         return entityAccessData;
     }
 
+    @SuppressFBWarnings("SLF4J_SIGN_ONLY_FORMAT")
     private String getSQLForRetriveEntityAccessFor() {
         StringBuilder str = new StringBuilder("select  eem.rel_id as 
relId,eem.from_id as fromId, ");
         str.append("eem.to_id as toId, eem.start_date as startDate, 
eem.end_date as endDate ");
diff --git 
a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/instancemode/api/InstanceModeApiResource.java
 
b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/instancemode/api/InstanceModeApiResource.java
index fb9882312..215b75463 100644
--- 
a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/instancemode/api/InstanceModeApiResource.java
+++ 
b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/instancemode/api/InstanceModeApiResource.java
@@ -18,6 +18,7 @@
  */
 package org.apache.fineract.infrastructure.instancemode.api;
 
+import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
 import io.swagger.v3.oas.annotations.Operation;
 import io.swagger.v3.oas.annotations.media.Content;
 import io.swagger.v3.oas.annotations.media.Schema;
@@ -48,6 +49,7 @@ public class InstanceModeApiResource implements 
InitializingBean {
     private final FineractProperties fineractProperties;
 
     @Override
+    @SuppressFBWarnings("SLF4J_SIGN_ONLY_FORMAT")
     public void afterPropertiesSet() throws Exception {
         
log.warn("------------------------------------------------------------");
         log.warn("                                                            
");
@@ -63,6 +65,7 @@ public class InstanceModeApiResource implements 
InitializingBean {
     @Operation(summary = "Changes the Fineract instance mode", description = 
"")
     @RequestBody(required = true, content = @Content(schema = 
@Schema(implementation = 
InstanceModeApiResourceSwagger.ChangeInstanceModeRequest.class)))
     @ApiResponses({ @ApiResponse(responseCode = "200", description = "OK") })
+    @SuppressFBWarnings("SLF4J_SIGN_ONLY_FORMAT")
     public Response 
changeMode(InstanceModeApiResourceSwagger.ChangeInstanceModeRequest request) {
         
log.warn("------------------------------------------------------------");
         log.warn("                                                            
");
diff --git 
a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/jobs/service/JobRegisterServiceImpl.java
 
b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/jobs/service/JobRegisterServiceImpl.java
index e89f30a97..b9dd7f26f 100644
--- 
a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/jobs/service/JobRegisterServiceImpl.java
+++ 
b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/jobs/service/JobRegisterServiceImpl.java
@@ -19,6 +19,7 @@
 package org.apache.fineract.infrastructure.jobs.service;
 
 import com.google.common.base.Splitter;
+import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
 import java.text.ParseException;
 import java.util.Collections;
 import java.util.HashMap;
@@ -96,6 +97,7 @@ public class JobRegisterServiceImpl implements 
JobRegisterService, ApplicationLi
 
     private static final String JOB_STARTER_METHOD_NAME = "run";
 
+    @SuppressFBWarnings("SLF4J_SIGN_ONLY_FORMAT")
     public void executeJob(final ScheduledJobDetail scheduledJobDetail, String 
triggerType, Set<JobParameterDTO> jobParameterDTOSet) {
         try {
             final JobDataMap jobDataMap = new JobDataMap();
diff --git 
a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/jobs/service/JobSchedulerServiceImpl.java
 
b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/jobs/service/JobSchedulerServiceImpl.java
index ab5b6ecb4..adb90ec41 100644
--- 
a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/jobs/service/JobSchedulerServiceImpl.java
+++ 
b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/jobs/service/JobSchedulerServiceImpl.java
@@ -18,6 +18,7 @@
  */
 package org.apache.fineract.infrastructure.jobs.service;
 
+import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
 import java.time.LocalDate;
 import java.util.HashMap;
 import java.util.List;
@@ -49,6 +50,7 @@ public class JobSchedulerServiceImpl implements 
ApplicationListener<ContextRefre
     private final BusinessDateReadPlatformService 
businessDateReadPlatformService;
 
     @Override
+    @SuppressFBWarnings("SLF4J_SIGN_ONLY_FORMAT")
     public void onApplicationEvent(ContextRefreshedEvent event) {
         // If the instance is not Batch Enabled will not load the Jobs
         if (!fineractProperties.getMode().isBatchManagerEnabled()) {
diff --git 
a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/security/filter/TenantAwareBasicAuthenticationFilter.java
 
b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/security/filter/TenantAwareBasicAuthenticationFilter.java
index 99059c16a..498e3b064 100644
--- 
a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/security/filter/TenantAwareBasicAuthenticationFilter.java
+++ 
b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/security/filter/TenantAwareBasicAuthenticationFilter.java
@@ -18,6 +18,7 @@
  */
 package org.apache.fineract.infrastructure.security.filter;
 
+import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
 import jakarta.servlet.FilterChain;
 import jakarta.servlet.ServletException;
 import jakarta.servlet.http.HttpServletRequest;
@@ -66,7 +67,10 @@ import 
org.springframework.security.web.util.matcher.RequestMatcher;
 @Slf4j
 public class TenantAwareBasicAuthenticationFilter extends 
BasicAuthenticationFilter {
 
-    private static boolean firstRequestProcessed = false;
+    private static boolean FIRST_REQUEST_PROCESSED = false;
+    private static final String TENANT_ID_REQUEST_HEADER = 
"Fineract-Platform-TenantId";
+    private static final boolean EXCEPTION_IF_HEADER_MISSING = true;
+
     private final ToApiJsonSerializer<PlatformRequestLog> toApiJsonSerializer;
     private final ConfigurationDomainService configurationDomainService;
     private final CacheWritePlatformService cacheWritePlatformService;
@@ -74,9 +78,6 @@ public class TenantAwareBasicAuthenticationFilter extends 
BasicAuthenticationFil
     private final BasicAuthTenantDetailsService basicAuthTenantDetailsService;
     private final BusinessDateReadPlatformService 
businessDateReadPlatformService;
 
-    private final String tenantRequestHeader = "Fineract-Platform-TenantId";
-    private final boolean exceptionIfHeaderMissing = true;
-
     @Setter
     private RequestMatcher requestMatcher = AnyRequestMatcher.INSTANCE;
 
@@ -95,6 +96,7 @@ public class TenantAwareBasicAuthenticationFilter extends 
BasicAuthenticationFil
     }
 
     @Override
+    @SuppressFBWarnings("SLF4J_SIGN_ONLY_FORMAT")
     protected void doFilterInternal(HttpServletRequest request, 
HttpServletResponse response, FilterChain filterChain)
             throws ServletException, IOException {
 
@@ -109,15 +111,15 @@ public class TenantAwareBasicAuthenticationFilter extends 
BasicAuthenticationFil
                 filterChain.doFilter(request, response);
             } else {
                 if (requestMatcher.matches(request)) {
-                    String tenantIdentifier = 
request.getHeader(this.tenantRequestHeader);
+                    String tenantIdentifier = 
request.getHeader(TENANT_ID_REQUEST_HEADER);
 
                     if 
(org.apache.commons.lang3.StringUtils.isBlank(tenantIdentifier)) {
                         tenantIdentifier = 
request.getParameter("tenantIdentifier");
                     }
 
-                    if (tenantIdentifier == null && 
this.exceptionIfHeaderMissing) {
+                    if (tenantIdentifier == null && 
EXCEPTION_IF_HEADER_MISSING) {
                         throw new InvalidTenantIdentifierException("No tenant 
identifier found: Add request header of '"
-                                + this.tenantRequestHeader + "' or add the 
parameter 'tenantIdentifier' to query string of request URL.");
+                                + TENANT_ID_REQUEST_HEADER + "' or add the 
parameter 'tenantIdentifier' to query string of request URL.");
                     }
 
                     String pathInfo = request.getRequestURI();
@@ -125,10 +127,9 @@ public class TenantAwareBasicAuthenticationFilter extends 
BasicAuthenticationFil
                     if (pathInfo != null && pathInfo.contains("report")) {
                         isReportRequest = true;
                     }
-                    final FineractPlatformTenant tenant = 
this.basicAuthTenantDetailsService.loadTenantById(tenantIdentifier,
-                            isReportRequest);
+                    final FineractPlatformTenant tenant = 
basicAuthTenantDetailsService.loadTenantById(tenantIdentifier, isReportRequest);
                     ThreadLocalContextUtil.setTenant(tenant);
-                    HashMap<BusinessDateType, LocalDate> businessDates = 
this.businessDateReadPlatformService.getBusinessDates();
+                    HashMap<BusinessDateType, LocalDate> businessDates = 
businessDateReadPlatformService.getBusinessDates();
                     ThreadLocalContextUtil.setBusinessDates(businessDates);
                     String authToken = request.getHeader("Authorization");
 
@@ -136,17 +137,17 @@ public class TenantAwareBasicAuthenticationFilter extends 
BasicAuthenticationFil
                         
ThreadLocalContextUtil.setAuthToken(authToken.replaceFirst("Basic ", ""));
                     }
 
-                    if (!firstRequestProcessed) {
+                    if (!FIRST_REQUEST_PROCESSED) {
                         final String baseUrl = 
request.getRequestURL().toString().replace(request.getPathInfo(), "/");
                         System.setProperty("baseUrl", baseUrl);
 
-                        final boolean ehcacheEnabled = 
this.configurationDomainService.isEhcacheEnabled();
+                        final boolean ehcacheEnabled = 
configurationDomainService.isEhcacheEnabled();
                         if (ehcacheEnabled) {
-                            
this.cacheWritePlatformService.switchToCache(CacheType.SINGLE_NODE);
+                            
cacheWritePlatformService.switchToCache(CacheType.SINGLE_NODE);
                         } else {
-                            
this.cacheWritePlatformService.switchToCache(CacheType.NO_CACHE);
+                            
cacheWritePlatformService.switchToCache(CacheType.NO_CACHE);
                         }
-                        
TenantAwareBasicAuthenticationFilter.firstRequestProcessed = true;
+                        
TenantAwareBasicAuthenticationFilter.FIRST_REQUEST_PROCESSED = true;
                     }
                 }
 
@@ -161,8 +162,8 @@ public class TenantAwareBasicAuthenticationFilter extends 
BasicAuthenticationFil
         } finally {
             ThreadLocalContextUtil.reset();
             task.stop();
-            final PlatformRequestLog log = PlatformRequestLog.from(task, 
request);
-            TenantAwareBasicAuthenticationFilter.log.debug("{}", 
this.toApiJsonSerializer.serialize(log));
+            final PlatformRequestLog msg = PlatformRequestLog.from(task, 
request);
+            log.debug("{}", toApiJsonSerializer.serialize(msg));
         }
     }
 
diff --git 
a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/security/filter/TenantAwareTenantIdentifierFilter.java
 
b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/security/filter/TenantAwareTenantIdentifierFilter.java
index 4ea5301ec..a321f6180 100644
--- 
a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/security/filter/TenantAwareTenantIdentifierFilter.java
+++ 
b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/security/filter/TenantAwareTenantIdentifierFilter.java
@@ -18,6 +18,7 @@
  */
 package org.apache.fineract.infrastructure.security.filter;
 
+import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
 import jakarta.servlet.FilterChain;
 import jakarta.servlet.ServletException;
 import jakarta.servlet.ServletRequest;
@@ -60,7 +61,7 @@ import org.springframework.web.filter.GenericFilterBean;
 @Slf4j
 public class TenantAwareTenantIdentifierFilter extends GenericFilterBean {
 
-    private static AtomicBoolean firstRequestProcessed = new AtomicBoolean();
+    private static final AtomicBoolean FIRST_PROCESSED_REQUEST = new 
AtomicBoolean();
 
     private final BasicAuthTenantDetailsService basicAuthTenantDetailsService;
     private final ToApiJsonSerializer<PlatformRequestLog> toApiJsonSerializer;
@@ -69,11 +70,12 @@ public class TenantAwareTenantIdentifierFilter extends 
GenericFilterBean {
 
     private final BusinessDateReadPlatformService 
businessDateReadPlatformService;
 
-    private final String tenantRequestHeader = "Fineract-Platform-TenantId";
-    private final boolean exceptionIfHeaderMissing = true;
-    private final String apiUri = "/api/v1/";
+    private static final String TENANT_ID_REQUEST_HEADER = 
"Fineract-Platform-TenantId";
+    private static final boolean EXCEPTION_IF_HEADER_MISSING = true;
+    private static final String API_URI = "/api/v1/";
 
     @Override
+    @SuppressFBWarnings("SLF4J_SIGN_ONLY_FORMAT")
     public void doFilter(final ServletRequest req, final ServletResponse res, 
final FilterChain chain)
             throws IOException, ServletException {
 
@@ -97,14 +99,14 @@ public class TenantAwareTenantIdentifierFilter extends 
GenericFilterBean {
 
             if (!"OPTIONS".equalsIgnoreCase(request.getMethod())) {
 
-                String tenantIdentifier = 
request.getHeader(this.tenantRequestHeader);
+                String tenantIdentifier = 
request.getHeader(TENANT_ID_REQUEST_HEADER);
                 if 
(org.apache.commons.lang3.StringUtils.isBlank(tenantIdentifier)) {
                     tenantIdentifier = 
request.getParameter("tenantIdentifier");
                 }
 
-                if (tenantIdentifier == null && this.exceptionIfHeaderMissing) 
{
+                if (tenantIdentifier == null && EXCEPTION_IF_HEADER_MISSING) {
                     throw new InvalidTenantIdentifierException("No tenant 
identifier found: Add request header of '"
-                            + this.tenantRequestHeader + "' or add the 
parameter 'tenantIdentifier' to query string of request URL.");
+                            + TENANT_ID_REQUEST_HEADER + "' or add the 
parameter 'tenantIdentifier' to query string of request URL.");
                 }
 
                 String pathInfo = request.getRequestURI();
@@ -112,9 +114,9 @@ public class TenantAwareTenantIdentifierFilter extends 
GenericFilterBean {
                 if (pathInfo != null && pathInfo.contains("report")) {
                     isReportRequest = true;
                 }
-                final FineractPlatformTenant tenant = 
this.basicAuthTenantDetailsService.loadTenantById(tenantIdentifier, 
isReportRequest);
+                final FineractPlatformTenant tenant = 
basicAuthTenantDetailsService.loadTenantById(tenantIdentifier, isReportRequest);
                 ThreadLocalContextUtil.setTenant(tenant);
-                HashMap<BusinessDateType, LocalDate> businessDates = 
this.businessDateReadPlatformService.getBusinessDates();
+                HashMap<BusinessDateType, LocalDate> businessDates = 
businessDateReadPlatformService.getBusinessDates();
                 ThreadLocalContextUtil.setBusinessDates(businessDates);
                 String authToken = request.getHeader("Authorization");
 
@@ -122,18 +124,18 @@ public class TenantAwareTenantIdentifierFilter extends 
GenericFilterBean {
                     
ThreadLocalContextUtil.setAuthToken(authToken.replaceFirst("bearer ", ""));
                 }
 
-                if (!firstRequestProcessed.get()) {
+                if (!FIRST_PROCESSED_REQUEST.get()) {
                     final String baseUrl = 
request.getRequestURL().toString().replace(request.getRequestURI(),
-                            request.getContextPath() + apiUri);
+                            request.getContextPath() + API_URI);
                     System.setProperty("baseUrl", baseUrl);
 
-                    final boolean ehcacheEnabled = 
this.configurationDomainService.isEhcacheEnabled();
+                    final boolean ehcacheEnabled = 
configurationDomainService.isEhcacheEnabled();
                     if (ehcacheEnabled) {
-                        
this.cacheWritePlatformService.switchToCache(CacheType.SINGLE_NODE);
+                        
cacheWritePlatformService.switchToCache(CacheType.SINGLE_NODE);
                     } else {
-                        
this.cacheWritePlatformService.switchToCache(CacheType.NO_CACHE);
+                        
cacheWritePlatformService.switchToCache(CacheType.NO_CACHE);
                     }
-                    firstRequestProcessed.set(true);
+                    FIRST_PROCESSED_REQUEST.set(true);
                 }
                 chain.doFilter(request, response);
             }
@@ -147,7 +149,7 @@ public class TenantAwareTenantIdentifierFilter extends 
GenericFilterBean {
             ThreadLocalContextUtil.reset();
             task.stop();
             final PlatformRequestLog logRequest = 
PlatformRequestLog.from(task, request);
-            log.debug("{}", this.toApiJsonSerializer.serialize(logRequest));
+            log.debug("{}", toApiJsonSerializer.serialize(logRequest));
         }
 
     }
diff --git 
a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/security/service/CustomAuthenticationFailureHandler.java
 
b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/security/service/CustomAuthenticationFailureHandler.java
index 3a20b9e2e..d11fe4c6e 100644
--- 
a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/security/service/CustomAuthenticationFailureHandler.java
+++ 
b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/security/service/CustomAuthenticationFailureHandler.java
@@ -23,8 +23,7 @@ import jakarta.servlet.http.HttpServletRequest;
 import jakarta.servlet.http.HttpServletResponse;
 import jakarta.servlet.http.HttpSession;
 import java.io.IOException;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
+import lombok.extern.slf4j.Slf4j;
 import org.springframework.security.core.AuthenticationException;
 import org.springframework.security.web.DefaultRedirectStrategy;
 import org.springframework.security.web.RedirectStrategy;
@@ -33,10 +32,9 @@ import 
org.springframework.security.web.authentication.AuthenticationFailureHand
 import org.springframework.security.web.util.UrlUtils;
 import org.springframework.util.Assert;
 
+@Slf4j
 public class CustomAuthenticationFailureHandler implements 
AuthenticationFailureHandler {
 
-    protected static final Logger LOG = 
LoggerFactory.getLogger(CustomAuthenticationFailureHandler.class);
-
     private String defaultFailureUrl;
     private boolean forwardToDestination = false;
     private boolean allowSessionCreation = true;
@@ -55,18 +53,18 @@ public class CustomAuthenticationFailureHandler implements 
AuthenticationFailure
             final AuthenticationException exception) throws IOException, 
ServletException {
 
         if (this.defaultFailureUrl == null) {
-            LOG.debug("No failure URL set, sending 401 Unauthorized error");
+            log.debug("No failure URL set, sending 401 Unauthorized error");
 
             response.sendError(HttpServletResponse.SC_UNAUTHORIZED, 
"Authentication Failed: " + exception.getMessage());
         } else {
             saveException(request, exception);
 
             if (this.forwardToDestination) {
-                LOG.debug("Forwarding to {}", this.defaultFailureUrl);
+                log.debug("Forwarding to {}", this.defaultFailureUrl);
 
                 
request.getRequestDispatcher(this.defaultFailureUrl).forward(request, response);
             } else {
-                LOG.debug("Redirecting to {}", this.defaultFailureUrl);
+                log.debug("Redirecting to {}", this.defaultFailureUrl);
 
                 final String oauthToken = request.getParameter("oauth_token");
                 request.setAttribute("oauth_token", oauthToken);
diff --git 
a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/sms/scheduler/SmsMessageScheduledJobServiceImpl.java
 
b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/sms/scheduler/SmsMessageScheduledJobServiceImpl.java
index 3dfbc46ec..e760ccbd2 100644
--- 
a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/sms/scheduler/SmsMessageScheduledJobServiceImpl.java
+++ 
b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/sms/scheduler/SmsMessageScheduledJobServiceImpl.java
@@ -18,6 +18,7 @@
  */
 package org.apache.fineract.infrastructure.sms.scheduler;
 
+import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
 import java.net.URI;
 import java.util.ArrayList;
 import java.util.Collection;
@@ -65,6 +66,7 @@ public class SmsMessageScheduledJobServiceImpl implements 
SmsMessageScheduledJob
     @Qualifier(TaskExecutorConstant.DEFAULT_TASK_EXECUTOR_BEAN_NAME)
     private final ThreadPoolTaskExecutor taskExecutor;
 
+    @SuppressFBWarnings("SLF4J_SIGN_ONLY_FORMAT")
     private void 
connectAndSendToIntermediateServer(Collection<SmsMessageApiQueueResourceData> 
apiQueueResourceDatas) {
         Map<String, Object> hostConfig = 
this.smsConfigUtils.getMessageGateWayRequestURI("sms",
                 
SmsMessageApiQueueResourceData.toJsonString(apiQueueResourceDatas));
diff --git 
a/fineract-provider/src/main/java/org/apache/fineract/portfolio/client/api/InternalClientInformationApiResource.java
 
b/fineract-provider/src/main/java/org/apache/fineract/portfolio/client/api/InternalClientInformationApiResource.java
index 6c8f77000..6b1342b53 100644
--- 
a/fineract-provider/src/main/java/org/apache/fineract/portfolio/client/api/InternalClientInformationApiResource.java
+++ 
b/fineract-provider/src/main/java/org/apache/fineract/portfolio/client/api/InternalClientInformationApiResource.java
@@ -23,6 +23,7 @@ import static 
org.apache.fineract.infrastructure.core.domain.AuditableFieldsCons
 import static 
org.apache.fineract.infrastructure.core.domain.AuditableFieldsConstants.LAST_MODIFIED_BY;
 import static 
org.apache.fineract.infrastructure.core.domain.AuditableFieldsConstants.LAST_MODIFIED_DATE;
 
+import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
 import jakarta.ws.rs.Consumes;
 import jakarta.ws.rs.GET;
 import jakarta.ws.rs.Path;
@@ -56,6 +57,7 @@ public class InternalClientInformationApiResource implements 
InitializingBean {
     private final ApiRequestParameterHelper apiRequestParameterHelper;
 
     @Override
+    @SuppressFBWarnings("SLF4J_SIGN_ONLY_FORMAT")
     public void afterPropertiesSet() {
         
log.warn("------------------------------------------------------------");
         log.warn("                                                            
");
@@ -71,6 +73,7 @@ public class InternalClientInformationApiResource implements 
InitializingBean {
     @Path("{clientId}/audit")
     @Consumes({ MediaType.APPLICATION_JSON })
     @Produces({ MediaType.APPLICATION_JSON })
+    @SuppressFBWarnings("SLF4J_SIGN_ONLY_FORMAT")
     public String getClientAuditFields(@Context final UriInfo uriInfo, 
@PathParam("clientId") Long clientId) {
         
log.warn("------------------------------------------------------------");
         log.warn("                                                            
");
diff --git 
a/fineract-provider/src/main/java/org/apache/fineract/portfolio/delinquency/validator/LoanDelinquencyActionData.java
 
b/fineract-provider/src/main/java/org/apache/fineract/portfolio/delinquency/validator/LoanDelinquencyActionData.java
index 8f192165e..945a1b56a 100644
--- 
a/fineract-provider/src/main/java/org/apache/fineract/portfolio/delinquency/validator/LoanDelinquencyActionData.java
+++ 
b/fineract-provider/src/main/java/org/apache/fineract/portfolio/delinquency/validator/LoanDelinquencyActionData.java
@@ -27,14 +27,14 @@ import 
org.apache.fineract.portfolio.delinquency.domain.LoanDelinquencyAction;
 @Data
 public class LoanDelinquencyActionData {
 
-    public Long id;
-    public DelinquencyAction action;
-    public LocalDate startDate;
-    public LocalDate endDate;
-    public Long createdById;
-    public OffsetDateTime createdOn;
-    public Long updatedById;
-    public OffsetDateTime lastModifiedOn;
+    private Long id;
+    private DelinquencyAction action;
+    private LocalDate startDate;
+    private LocalDate endDate;
+    private Long createdById;
+    private OffsetDateTime createdOn;
+    private Long updatedById;
+    private OffsetDateTime lastModifiedOn;
 
     public LoanDelinquencyActionData(LoanDelinquencyAction 
loanDelinquencyAction) {
         this.id = loanDelinquencyAction.getId();
diff --git 
a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/api/InternalLoanInformationApiResource.java
 
b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/api/InternalLoanInformationApiResource.java
index 6e75fa02a..7969fd98f 100644
--- 
a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/api/InternalLoanInformationApiResource.java
+++ 
b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/api/InternalLoanInformationApiResource.java
@@ -23,6 +23,7 @@ import static 
org.apache.fineract.infrastructure.core.domain.AuditableFieldsCons
 import static 
org.apache.fineract.infrastructure.core.domain.AuditableFieldsConstants.LAST_MODIFIED_BY;
 import static 
org.apache.fineract.infrastructure.core.domain.AuditableFieldsConstants.LAST_MODIFIED_DATE;
 
+import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
 import jakarta.ws.rs.Consumes;
 import jakarta.ws.rs.GET;
 import jakarta.ws.rs.Path;
@@ -64,6 +65,7 @@ public class InternalLoanInformationApiResource implements 
InitializingBean {
     private final AdvancedPaymentDataMapper advancedPaymentDataMapper;
 
     @Override
+    @SuppressFBWarnings("SLF4J_SIGN_ONLY_FORMAT")
     public void afterPropertiesSet() {
         
log.warn("------------------------------------------------------------");
         log.warn("                                                            
");
@@ -79,6 +81,7 @@ public class InternalLoanInformationApiResource implements 
InitializingBean {
     @Path("{loanId}/audit")
     @Consumes({ MediaType.APPLICATION_JSON })
     @Produces({ MediaType.APPLICATION_JSON })
+    @SuppressFBWarnings("SLF4J_SIGN_ONLY_FORMAT")
     public String getLoanAuditFields(@Context final UriInfo uriInfo, 
@PathParam("loanId") Long loanId) {
         
log.warn("------------------------------------------------------------");
         log.warn("                                                            
");
@@ -98,6 +101,7 @@ public class InternalLoanInformationApiResource implements 
InitializingBean {
     @Path("{loanId}/transaction/{transactionId}/audit")
     @Consumes({ MediaType.APPLICATION_JSON })
     @Produces({ MediaType.APPLICATION_JSON })
+    @SuppressFBWarnings("SLF4J_SIGN_ONLY_FORMAT")
     public String getLoanTransactionAuditFields(@Context final UriInfo 
uriInfo, @PathParam("loanId") Long loanId,
             @PathParam("transactionId") Long transactionId) {
         
log.warn("------------------------------------------------------------");
@@ -118,6 +122,7 @@ public class InternalLoanInformationApiResource implements 
InitializingBean {
     @Path("status/{statusId}")
     @Consumes({ MediaType.APPLICATION_JSON })
     @Produces({ MediaType.APPLICATION_JSON })
+    @SuppressFBWarnings("SLF4J_SIGN_ONLY_FORMAT")
     public String getLoansByStatus(@Context final UriInfo uriInfo, 
@PathParam("statusId") Integer statusId) {
         
log.warn("------------------------------------------------------------");
         log.warn("                                                            
");
@@ -134,6 +139,7 @@ public class InternalLoanInformationApiResource implements 
InitializingBean {
     @Path("{loanId}/advanced-payment-allocation-rules")
     @Consumes({ MediaType.APPLICATION_JSON })
     @Produces({ MediaType.APPLICATION_JSON })
+    @SuppressFBWarnings("SLF4J_SIGN_ONLY_FORMAT")
     public List<AdvancedPaymentData> 
getAdvancedPaymentAllocationRulesOfLoan(@Context final UriInfo uriInfo,
             @PathParam("loanId") Long loanId) {
         
log.warn("------------------------------------------------------------");
diff --git 
a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/service/LoanWritePlatformServiceJpaRepositoryImpl.java
 
b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/service/LoanWritePlatformServiceJpaRepositoryImpl.java
index 73953e16b..5bb617bbd 100644
--- 
a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/service/LoanWritePlatformServiceJpaRepositoryImpl.java
+++ 
b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/service/LoanWritePlatformServiceJpaRepositoryImpl.java
@@ -22,6 +22,7 @@ import com.google.common.collect.Lists;
 import com.google.gson.JsonArray;
 import com.google.gson.JsonElement;
 import com.google.gson.JsonObject;
+import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
 import io.github.resilience4j.retry.annotation.Retry;
 import java.math.BigDecimal;
 import java.time.LocalDate;
@@ -889,6 +890,7 @@ public class LoanWritePlatformServiceJpaRepositoryImpl 
implements LoanWritePlatf
 
     @Transactional
     @Override
+    @SuppressFBWarnings("SLF4J_SIGN_ONLY_FORMAT")
     public CommandProcessingResult makeGLIMLoanRepayment(final Long loanId, 
final JsonCommand command) {
 
         final Long parentLoanId = loanId;
diff --git 
a/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/jobs/postinterestforsavings/PostInterestForSavingTasklet.java
 
b/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/jobs/postinterestforsavings/PostInterestForSavingTasklet.java
index 5d5e82494..221a8336f 100644
--- 
a/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/jobs/postinterestforsavings/PostInterestForSavingTasklet.java
+++ 
b/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/jobs/postinterestforsavings/PostInterestForSavingTasklet.java
@@ -52,13 +52,14 @@ import org.springframework.stereotype.Component;
 @Component
 public class PostInterestForSavingTasklet implements Tasklet {
 
+    private static final int QUEUE_SIZE = 1;
+
     private final SavingsAccountReadPlatformService 
savingAccountReadPlatformService;
     private final ConfigurationDomainService configurationDomainService;
     private final Queue<List<SavingsAccountData>> queue = new ArrayDeque<>();
     private final ApplicationContext applicationContext;
     @Qualifier(TaskExecutorConstant.CONFIGURABLE_TASK_EXECUTOR_BEAN_NAME)
     private final ThreadPoolTaskExecutor taskExecutor;
-    private final int queueSize = 1;
 
     @Override
     public RepeatStatus execute(StepContribution contribution, ChunkContext 
chunkContext) throws Exception {
@@ -122,7 +123,7 @@ public class PostInterestForSavingTasklet implements 
Tasklet {
                 maxId = Math.max(maxSavingsIdInList, 
queue.element().get(queue.element().size() - 1).getId());
             }
 
-            while (queue.size() <= queueSize) {
+            while (queue.size() <= QUEUE_SIZE) {
                 log.debug("Fetching while threads are running!");
                 List<SavingsAccountData> savingsAccountDataList = 
Collections.synchronizedList(this.savingAccountReadPlatformService
                         
.retrieveAllSavingsDataForInterestPosting(backdatedTxnsAllowedTill, pageSize, 
ACTIVE.getValue(), maxId));
@@ -166,7 +167,7 @@ public class PostInterestForSavingTasklet implements 
Tasklet {
             maxId = Math.max(maxSavingsIdInList, 
queue.element().get(queue.element().size() - 1).getId());
         }
 
-        while (queue.size() <= queueSize) {
+        while (queue.size() <= QUEUE_SIZE) {
             log.debug("Fetching while threads are running!..:: this is not 
supposed to run........");
             savingsAccounts = 
Collections.synchronizedList(this.savingAccountReadPlatformService
                     
.retrieveAllSavingsDataForInterestPosting(backdatedTxnsAllowedTill, pageSize, 
ACTIVE.getValue(), maxId));
diff --git 
a/fineract-provider/src/test/java/org/apache/fineract/TestConfiguration.java 
b/fineract-provider/src/test/java/org/apache/fineract/TestConfiguration.java
index 9c8d14e8b..68330dd38 100644
--- a/fineract-provider/src/test/java/org/apache/fineract/TestConfiguration.java
+++ b/fineract-provider/src/test/java/org/apache/fineract/TestConfiguration.java
@@ -18,6 +18,7 @@
  */
 package org.apache.fineract;
 
+import static org.mockito.BDDMockito.given;
 import static org.mockito.Mockito.RETURNS_MOCKS;
 import static org.mockito.Mockito.mock;
 
@@ -30,6 +31,8 @@ import 
org.apache.fineract.infrastructure.core.config.FineractProperties;
 import org.apache.fineract.infrastructure.core.domain.FineractPlatformTenant;
 import 
org.apache.fineract.infrastructure.core.service.database.DatabaseIndependentQueryService;
 import 
org.apache.fineract.infrastructure.core.service.database.DatabasePasswordEncryptor;
+import org.apache.fineract.infrastructure.core.service.database.DatabaseType;
+import 
org.apache.fineract.infrastructure.core.service.database.DatabaseTypeResolver;
 import 
org.apache.fineract.infrastructure.core.service.migration.ExtendedSpringLiquibaseFactory;
 import 
org.apache.fineract.infrastructure.core.service.migration.TenantDataSourceFactory;
 import 
org.apache.fineract.infrastructure.core.service.migration.TenantDatabaseStateVerifier;
@@ -108,11 +111,32 @@ public class TestConfiguration {
         return mock(JobLauncher.class, RETURNS_MOCKS);
     }
 
+    @Primary
     @Bean
     public HikariDataSource tenantDataSource() {
-        return mock(HikariDataSource.class, Mockito.RETURNS_MOCKS);
+        HikariDataSource mockDataSource = mock(HikariDataSource.class, 
Mockito.RETURNS_MOCKS);
+        return mockDataSource;
+    }
+
+    /**
+     * DataSource with Mockito RETURNS_MOCKS black magic.
+     */
+    @Bean
+    public DataSource hikariTenantDataSource() {
+        HikariDataSource mockDataSource = mock(HikariDataSource.class, 
Mockito.RETURNS_MOCKS);
+        return mockDataSource;
     }
 
+    @Primary
+    @Bean
+    public DatabaseTypeResolver databaseTypeResolver() {
+        DatabaseTypeResolver mock = mock(DatabaseTypeResolver.class, 
RETURNS_MOCKS);
+        given(mock.databaseType()).willReturn(DatabaseType.POSTGRESQL);
+        given(mock.isPostgreSQL()).willReturn(true);
+        return mock;
+    }
+
+    @Primary
     @Bean
     public TenantDetailsService tenantDetailsService() {
         return mock(TenantDetailsService.class, Mockito.RETURNS_MOCKS);
@@ -158,15 +182,6 @@ public class TestConfiguration {
         return mockJobRegisterService;
     }
 
-    /**
-     * DataSource with Mockito RETURNS_MOCKS black magic.
-     */
-    @Bean
-    public DataSource hikariTenantDataSource() {
-        DataSource mockDataSource = mock(DataSource.class, 
Mockito.RETURNS_MOCKS);
-        return mockDataSource;
-    }
-
     @Bean
     public JdbcTemplate jdbcTemplate() {
         return mock(JdbcTemplate.class);
diff --git 
a/fineract-provider/src/test/java/org/apache/fineract/cob/COBBusinessStepServiceStepDefinitions.java
 
b/fineract-provider/src/test/java/org/apache/fineract/cob/COBBusinessStepServiceStepDefinitions.java
index 7b3ca4899..aae91816f 100644
--- 
a/fineract-provider/src/test/java/org/apache/fineract/cob/COBBusinessStepServiceStepDefinitions.java
+++ 
b/fineract-provider/src/test/java/org/apache/fineract/cob/COBBusinessStepServiceStepDefinitions.java
@@ -72,6 +72,7 @@ public class COBBusinessStepServiceStepDefinitions implements 
En {
     private BatchBusinessStep batchBusinessStep = 
mock(BatchBusinessStep.class);
     private Set<BusinessStepNameAndOrder> resultSet;
 
+    @SuppressFBWarnings(value = "CT_CONSTRUCTOR_THROW")
     public COBBusinessStepServiceStepDefinitions() throws Exception {
         businessStepService = new 
COBBusinessStepServiceImpl(batchBusinessStepRepository, applicationContext, 
beanFactory,
                 businessEventNotifierService, configurationDomainService, 
reloaderService);
diff --git 
a/fineract-provider/src/test/java/org/apache/fineract/infrastructure/classpath/ClasspathDuplicatesStepDefinitions.java
 
b/fineract-provider/src/test/java/org/apache/fineract/infrastructure/classpath/ClasspathDuplicatesStepDefinitions.java
index 71b9564f5..5936c7594 100644
--- 
a/fineract-provider/src/test/java/org/apache/fineract/infrastructure/classpath/ClasspathDuplicatesStepDefinitions.java
+++ 
b/fineract-provider/src/test/java/org/apache/fineract/infrastructure/classpath/ClasspathDuplicatesStepDefinitions.java
@@ -18,6 +18,7 @@
  */
 package org.apache.fineract.infrastructure.classpath;
 
+import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
 import io.cucumber.java8.En;
 import io.github.classgraph.ClassGraph;
 import io.github.classgraph.ResourceList;
@@ -38,6 +39,7 @@ public class ClasspathDuplicatesStepDefinitions implements En 
{
 
     private ClassGraph classGraph;
 
+    @SuppressFBWarnings(value = "CT_CONSTRUCTOR_THROW")
     public ClasspathDuplicatesStepDefinitions() {
         // tag::given[]
         Given("A class graph", () -> {
diff --git 
a/fineract-provider/src/test/java/org/apache/fineract/infrastructure/core/MultiExceptionStepDefinitions.java
 
b/fineract-provider/src/test/java/org/apache/fineract/infrastructure/core/MultiExceptionStepDefinitions.java
index b4fce117f..ef7fd8735 100644
--- 
a/fineract-provider/src/test/java/org/apache/fineract/infrastructure/core/MultiExceptionStepDefinitions.java
+++ 
b/fineract-provider/src/test/java/org/apache/fineract/infrastructure/core/MultiExceptionStepDefinitions.java
@@ -32,6 +32,7 @@ public class MultiExceptionStepDefinitions implements En {
 
     private List<Throwable> exceptions = new ArrayList<>();
 
+    @SuppressFBWarnings(value = "CT_CONSTRUCTOR_THROW")
     public MultiExceptionStepDefinitions() {
         Given("/^A multi exception with exceptions (.*) and (.*)$/", (String 
exception1, String exception2) -> {
             if (!StringUtils.isBlank(exception1)) {
diff --git a/integration-tests/dependencies.gradle 
b/integration-tests/dependencies.gradle
index 460d5c33f..0eb001c34 100644
--- a/integration-tests/dependencies.gradle
+++ b/integration-tests/dependencies.gradle
@@ -52,5 +52,5 @@ dependencies {
     testImplementation 'org.mapstruct:mapstruct'
     testAnnotationProcessor 'org.mapstruct:mapstruct-processor'
 
-    testImplementation 'com.github.tomakehurst:wiremock:3.0.1'
+    testImplementation 'com.github.tomakehurst:wiremock-standalone:3.0.1'
 }

Reply via email to