class RetryExecutor {

    public T retryResult(Callable<T> callable) throws Exception
    {
        try
        {
            retryAttempts--;
            return callable.call();
        }
        catch (Exception e)
        {
            if (retryOnException(e) && retryAttempts > 0)
            {
                sleep(timeout);
                return retryResult(callable);
            }
            throw e;
        }
    }

    public  RetryExecutor();
    public  RetryExecutor(int retryAttempts, long timeout, List<Class> exceptions);

}