Как перезапустить транзакцию после блокировки или истечения времени ожидания в Java?

Как перезапустить транзакцию (чтобы она выполнилась хотя бы один раз), когда получаем:

( com.mysql.jdbc.exceptions.jdbc4.MySQLTransactionRollbackException: обнаружена взаимоблокировка при попытке получить блокировку; попробуйте перезапустить транзакцию) ИЛИ (время ожидания транзакции истекло)?

Я использую MySQL (innoDB ENGINE) и Java. Пожалуйста, помогите, а также свяжите любые полезные ресурсы или коды.


person ravi    schedule 11.07.2011    source источник


Ответы (2)


Когда вы когда-либо ловите такой тип исключения в своем блоке catch

catch(Exception e){
if(e instanceof TransactionRollbackException){
 //Retrigger Your Transaction
   }
// log your exception or throw it its upto ur implementation
}
person BOSS    schedule 11.07.2011
comment
Вы уверены, что это специфично для взаимоблокировок? Я не хочу попасть в бесконечный цикл, если что-то, кроме взаимоблокировки, может вызвать TransactionRollbackException. - person xLite; 01.06.2013

Если вы используете обычный JDBC, вам придется делать это вручную в цикле (и не забывайте каждый раз проверять предварительные условия.
Если вы используете spring, "Как перезапустить транзакции при взаимоблокировке/тайм-ауте блокировки в Spring?" нужна помощь.

person Op De Cirkel    schedule 11.07.2011
comment
Привет, спасибо за ваш ответ. Я использую простой JDBC. Не могли бы вы привести пример кода for() {transaction} для проверки предварительных условий. - person ravi; 11.07.2011