mirror of
https://github.com/Alfresco/alfresco-community-repo.git
synced 2025-08-07 17:49:17 +00:00
Retry exception detection unwraps NestedSQLException and UncategorizedSQLException
git-svn-id: https://svn.alfresco.com/repos/alfresco-enterprise/alfresco/HEAD/root@13916 c4b6b30b-aa2e-2d43-bbcb-ca4b014f7261
This commit is contained in:
@@ -56,6 +56,8 @@ import org.springframework.dao.DataIntegrityViolationException;
|
||||
import org.springframework.dao.DeadlockLoserDataAccessException;
|
||||
import org.springframework.jdbc.UncategorizedSQLException;
|
||||
|
||||
import com.ibatis.common.jdbc.exception.NestedSQLException;
|
||||
|
||||
/**
|
||||
* A helper that runs a unit of work inside a UserTransaction,
|
||||
* transparently retrying the unit of work if the cause of
|
||||
@@ -451,11 +453,31 @@ public class RetryingTransactionHelper
|
||||
public static Throwable extractRetryCause(Throwable cause)
|
||||
{
|
||||
Throwable retryCause = ExceptionStackUtil.getCause(cause, RETRY_EXCEPTIONS);
|
||||
if (retryCause == null || retryCause instanceof SQLGrammarException
|
||||
&& ((SQLGrammarException) retryCause).getErrorCode() != 3960)
|
||||
|
||||
if (retryCause == null)
|
||||
{
|
||||
return null;
|
||||
}
|
||||
else if (retryCause instanceof SQLGrammarException
|
||||
&& ((SQLGrammarException) retryCause).getErrorCode() != 3960)
|
||||
{
|
||||
return null;
|
||||
}
|
||||
else if (retryCause instanceof NestedSQLException || retryCause instanceof UncategorizedSQLException)
|
||||
{
|
||||
// The exception will have been caused by something else, so check that instead
|
||||
if (retryCause.getCause() != null && retryCause.getCause() != retryCause)
|
||||
{
|
||||
// We dig further into this
|
||||
cause = retryCause.getCause();
|
||||
// Recurse
|
||||
return extractRetryCause(cause);
|
||||
}
|
||||
else
|
||||
{
|
||||
return null;
|
||||
}
|
||||
}
|
||||
// A simple match
|
||||
return retryCause;
|
||||
}
|
||||
|
Reference in New Issue
Block a user