Executes a ICommand command specificed by its name.
        
        :param correlation_id: (optional) transaction id to trace execution through call chain.

        :param command: the name of that command that is to be executed.

        :param args: the parameters (arguments) to pass to the command for execution.
        
        :return: the execution result.
        
        :raises: ValidationException: when execution fails for any reason.

def execute(self, correlation_id, command, args):
        """
        Executes a ICommand command specificed by its name.
        
        :param correlation_id: (optional) transaction id to trace execution through call chain.

        :param command: the name of that command that is to be executed.

        :param args: the parameters (arguments) to pass to the command for execution.
        
        :return: the execution result.
        
        :raises: ValidationException: when execution fails for any reason.
        """
        # Get command and throw error if it doesn't exist
        cref = self.find_command(command)
        if cref == None:
            raise BadRequestException(
                correlation_id,
                "CMD_NOT_FOUND",
                "Requested command does not exist"
            ).with_details("command", command)

        # Generate correlationId if it doesn't exist
        # Use short ids for now
        if correlation_id == None:
           correlation_id = IdGenerator.next_short()
        
        # Validate command arguments before execution and throw the 1st found error
        results = cref.validate(args)
        ValidationException.throw_exception_if_needed(correlation_id, results, False)
                
        # Execute the command.
        return cref.execute(correlation_id, args)