Как декларативно обрабатывать параллельные транзакции? - PullRequest
0 голосов
/ 31 марта 2012

Я работаю над проектом, который имеет основанные на Spring Web Services и Spring Jdbc персистентность. Я настроил DataSourceTransactionManager для управления транзакциями и применил его к сервисному уровню с помощью Pointcut. Уровень распространения транзакции установлен ОБЯЗАТЕЛЬНО.

Запросы выдаются через JdbcTemplate, предоставляемый Spring.

Проблема в том, что в случае множественного одновременного запроса к сервису я получаю исключение MySQLTransactionRollbackException («Обнаружена тупиковая ситуация при попытке получить блокировку; попробуйте перезапустить транзакцию»).

По-видимому, одна из транзакций получила блокировку, которая приводит к сбою второй.

У меня вопрос: как настроить Spring на задержку выполнения службы до получения блокировки вместо того, чтобы просто отказаться и выдать исключение?

Я даже не могу поймать исключение и пытаюсь повторно выполнить запрос, потому что я применил транзакцию на сервисном уровне в качестве рекомендации, обеспечивающей чистоту моих DAO.

Я надеюсь получить только декларативное решение (так как я фанат AOP и крестоносец против стандартного кода :-)). Но даже программные решения приветствуются.

Спасибо за ваши предложения.

Обновление -

@ ninjalj Да, это был настоящий тупик. Оказывается, я неправильно писал свой тестовый пример. Глупый я: - (

1 Ответ

0 голосов
/ 31 марта 2012

Если я не ошибаюсь, это указывает на настоящую тупиковую ситуацию, поэтому вам следует действительно повторить транзакцию.IIRC, тайм-аут ожидания блокировки имеет «тайм-аут» в сообщении об исключении.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...