Generic wrapper with variable number of arguments
private &lt;R, A1, A2, A3&gt; R executeCommand(Command&lt;R, A1, A2, A3&gt; command) {
    R result = null;
    for (int attempt = 0; attempt &lt; MAX_ATTEMPTS; attempt++) {
        try {
            return command.execute(command.getBundle());
        } catch (Exception e) {
            logger.error("Exception during performing operation, retrying for the " + attempt + " time", e);
            sleepForNMinutes(attempt);
            loginToApp();
        }
    }
    return result;
}



You never set result outside the initial declaration.   So you could just get rid of the declaration and return null at the end.  

You retry on any exception, but the only retry condition that you mention is a disconnect.  Why not create a DisconnectException and only catch that?  The current code will retry things like command being null or a divide by zero error, even though those will never succeed.  

You sleep and log into the app after the final attempt.  Why?  What happens if the log in action fails?  What happens if the exception isn't caused by something that breaks the login session?  

You sleep for 0 minutes after the first attempt.  

You log that you are retrying for the 0, 1, or 2 time.  That's incorrect.  Particularly on the last time, when you don't retry.  The grammar also doesn't quite work.  

private &lt;R, A1, A2, A3&gt; R executeCommand(Command&lt;R, A1, A2, A3&gt; command) {
    int attempt = 0;
    while (true) {
        try {
            return command.execute(command.getBundle());
        } catch (DisconnectException e) {
            logger.error("Exception while performing operation, attempt " + ++attempt, e);
        }

        if (attempt &gt;= MAX_ATTEMPTS) {
            return null;
        }

        sleepForNMinutes(attempt);
        loginToApp();
    }
}


This version does give up using a for loop to track the attempts.  This allows us to move the end condition to the middle of the loop rather than the beginning.  This may or may not be what you want.  But if you do, this is one way you could do it.