Я работаю над проектом, который имеет основанные на Spring Web Services и Spring Jdbc персистентность.
Я настроил DataSourceTransactionManager для управления транзакциями и применил его к сервисному уровню с помощью Pointcut.
Уровень распространения транзакции установлен ОБЯЗАТЕЛЬНО.
Запросы выдаются через JdbcTemplate, предоставляемый Spring.
Проблема в том, что в случае множественного одновременного запроса к сервису я получаю исключение MySQLTransactionRollbackException («Обнаружена тупиковая ситуация при попытке получить блокировку; попробуйте перезапустить транзакцию»).
По-видимому, одна из транзакций получила блокировку, которая приводит к сбою второй.
У меня вопрос: как настроить Spring на задержку выполнения службы до получения блокировки вместо того, чтобы просто отказаться и выдать исключение?
Я даже не могу поймать исключение и пытаюсь повторно выполнить запрос, потому что я применил транзакцию на сервисном уровне в качестве рекомендации, обеспечивающей чистоту моих DAO.
Я надеюсь получить только декларативное решение (так как я фанат AOP и крестоносец против стандартного кода :-)). Но даже программные решения приветствуются.
Спасибо за ваши предложения.
Обновление -
@ ninjalj Да, это был настоящий тупик. Оказывается, я неправильно писал свой тестовый пример. Глупый я: - (