Просто чтобы прояснить это немного, RetriedTransactionHelper будет повторять операцию, только если выброшенное исключение имеет определенный тип.Главным образом исключения, относящиеся к тому, чтобы быть проигравшим в ситуации параллелизма:
/**
* Exceptions that trigger retries.
*/
@SuppressWarnings({ "rawtypes" })
public static final Class[] RETRY_EXCEPTIONS;
static
{
Class<?>[] coreClasses = new Class[] {
ConcurrencyFailureException.class,
DeadlockLoserDataAccessException.class,
StaleObjectStateException.class,
JdbcUpdateAffectedIncorrectNumberOfRowsException.class, // Similar to StaleObjectState
LockAcquisitionException.class,
ConstraintViolationException.class,
UncategorizedSQLException.class,
SQLException.class,
BatchUpdateException.class,
DataIntegrityViolationException.class,
StaleStateException.class,
TooManyResultsException.class, // Expected one result but found multiple (bad key alert)
ObjectNotFoundException.class,
CacheException.class, // Usually a cache replication issue
SQLGrammarException.class, // Actually specific to MS SQL Server 2005 - we check for this
LockTryException.class
};
Я думаю, этого достаточно, когда одна из этих транзакций находится в стеке исключений, а не обязательно является последней.Я также думаю, что вы можете избежать повторных попыток, установив исключение, которое реализует интерфейс org.alfresco.repo.transaction.DoNotRetryException
.