2012-03-31 3 views
0

Я работаю над проектом, на котором базируются веб-службы на основе Spring и Spring Jdbc. Я настроил DataSourceTransactionManager для управления транзакциями и применил его к уровню обслуживания с помощью Pointcut. ТРЕБУЕТСЯ уровень распространения транзакций.Как обрабатывать параллелизм транзакций декларативно?

Запросы выдаются с использованием пружины JdbcTemplate.

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

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

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

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

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

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

Update -

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

ответ

0

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

Смежные вопросы