Atharva Kamat created FINERACT-2661:
---------------------------------------

             Summary: Prevent application runtime failures by validating and 
handling duplicate CommandHandlers in DefaultCommandHandlerManager
                 Key: FINERACT-2661
                 URL: https://issues.apache.org/jira/browse/FINERACT-2661
             Project: Apache Fineract
          Issue Type: Bug
          Components: System
            Reporter: Atharva Kamat
         Attachments: Screenshot 2026-06-26 002307.png

Description
Currently, in DefaultCommandHandlerManager.java, the lookup() method utilizes 
.findFirst() when resolving a handler for an incoming command.

The Problem:
If multiple handlers inadvertently match the same command, the system will 
silently pick the first one it encounters. This leads to unpredictable runtime 
bugs, silent failures, and makes debugging extremely difficult as the behavior 
depends entirely on the non-guaranteed order of the injected handlers list.

There is already an existing
// TODO: make sure there are no duplicate handlers
comment in the codebase acknowledging this risk.

 

Proposed Solutions

Option A (at Runtime): Update the lookup method to collect all matching 
handlers into a list. If matchingHandlers.size() > 1, log an error and throw 
new DuplicateCommandHandlerException(command).

Option B (at Startup): Implement a @PostConstruct validation method that checks 
the injected List<CommandHandler> handlers for duplicate command mappings right 
when the Spring context initializes and throw the 
DuplicateCommandHandlerException. We have 1:1 mappings for handler:command 
class.

 

Option B feels intuitive to me because the application will fail to boot if a 
dev introduces a duplicate handler.

Please guide me which approach is better. I would like to work on that.



--
This message was sent by Atlassian Jira
(v8.20.10#820010)

Reply via email to