} while (retryAttempts<maxRetryAttempts);
throw new TitanException("Could not successfully complete backend operation due to repeated temporary exceptions after "+maxRetryAttempts+" attempts",lastException);
}
public static<R> R execute(Transactional<R> exe, TransactionalProvider provider) throws StorageException {
StoreTransaction txh = null;
try {
txh = provider.openTx();
return exe.call(txh);
} catch (StorageException e) {
if (txh!=null) txh.rollback();
txh=null;
throw e;
} finally {
if (txh!=null) txh.commit();
}
}