Integration testing transactions and optimistic locking with Spring and JUnit

I did some badness today.

I wanted an integration test to check to see if my @Transactional method actually did rollback on an optimistic lock failure. It’s a pretty business critical method so I wanted to be sure that the whole @Transactional and @Version annotation voodoo actually works.

The approach I took was to inject, what I called a “slowRepository” into the object with the @Transactional method. The slowRepository is just a mockito mock of the object which “answers” (using “thenAnswer”) to the “findBy…” with some custom code.

The idea is that at some point during the @Transactional method the slowRepository is called and the “answer” code is invoked. In the test, the answer code follows along the lines of:

1. Grab the data it requires from the (not slow) repository (the repository the slowRepository is mocking)
2. Switch back the slowRepository for the not slow repository
3. Invoke the @Transactional method again on a separate thread
4. Sleep for a bit
5. Wake up and return the data from step 1

The @Transactional call on the separate thread completes and commits before slowRepository wakes up. When it does, slowRepository returns stale data and the @Transactional method then fails accordingly.

The problem I encountered was using the setters for my @Autowired dependencies on the bean with the @Transactional method. I needed to use the setters so that I could switch in and out the slowRepository, but couldn’t because Spring AOP proxies are implementations of an interface, not subclasses (by default – yes I realise you can get Spring to proxy the target class using CGLIB). I found this blog post which explains how to get at the target object behind a Spring proxy. I converted it to Scala:

…which is pretty ninja.

18,318 thoughts on “Integration testing transactions and optimistic locking with Spring and JUnit

  1. Здорова народ Ситуация критическая Родственники не знают что делать Таблетки не помогают Короче врачи приехали и поставили систему — вывод из запоя цены щёлково доступные Приехали через 40 минут В общем вся инфа по ссылке — вывод из запоя в щелково на дому https://chastnyj.vyvod-iz-zapoya-na-domu-moskva-snp.ru Звоните прямо сейчас Перешлите тем кто в такой же ситуации

  2. Люди помогите советом Отец не выходит из штопора Соседи стучат в стену Нужна срочная помощь на дому Короче только это реально спасло — вывод из запоя на дому мытищи с выездом Сняли ломку и стабилизировали состояние В общем телефон и цены тут — вывод из запоя в мытищах вывод из запоя в мытищах Не ждите пока станет хуже Перешлите тем кто в такой же ситуации

  3. Люди подскажите Муж просто потерял себя Родственники не знают что делать Таблетки не помогают Короче единственное что вытащило из запоя — вывод из запоя в люберцах круглосуточно Сняли ломку и стабилизировали состояние В общем жмите чтобы сохранить — цены на вывод из запоя на дому в люберцах https://anonimno.vyvod-iz-zapoya-na-domu-moskva-jst.ru Вывод из запоя на дому — это реальный выход Перешлите тем кто в такой же ситуации

  4. Мытищи всем привет Близкий человек уже несколько дней в запое Соседи стучат в стену В больницу тащить страшно Короче врачи приехали и поставили систему — нарколог вывод из запоя мытищи с опытом Сняли ломку и стабилизировали состояние В общем телефон и цены тут — вывести из запоя мытищи https://czena.vyvod-iz-zapoya-na-domu-moskva-snp.ru Не ждите пока станет хуже Перешлите тем кто в такой же ситуации

  5. Выбирал приличного букмекера для беттинга. Посмотрел десяток площадок но всё-таки пришёл на этой конторе. На форумах хвалили — решил тестнуть. И знаете что — достойный подход. Коэффициенты радуют выплаты оперативные. В общем если думаете где региться — попробуйте сами. По ссылке детали. 1win пополнение 1win пополнение И про регистрацию — нормально разложено. По этому пути пошёл — без заморочек. Регистрация минутная честно скажу. Плюс зеркало всегда работает. Так что не тяните. Пусть заходят

  6. Слушайте кто сталкивался Брат снова сорвался Соседи стучат в стену Таблетки не помогают Короче единственное что вытащило из запоя — вывод из запоя щелково круглосуточно Приехали через 40 минут В общем не потеряйте контакты — вывод из запоя щелково вывод из запоя щелково Вывод из запоя на дому — это реальный выход Перешлите тем кто в такой же ситуации

  7. Люди подскажите Брат снова сорвался Дети напуганы Таблетки не помогают Короче единственное что вытащило из запоя — вывод из запоя дешево мытищи профессионально Поставили капельницу с детоксикационным раствором В общем не потеряйте контакты — вывести из запоя мытищи https://vyvod-iz-zapoya-na-domu-moskva-snp.ru Звоните прямо сейчас Перешлите тем кто в такой же ситуации

  8. Здорова народ Отец не выходит из штопора Дети напуганы Нужна срочная помощь на дому Короче врачи приехали и поставили систему — вывод из запоя в мытищах анонимно Сняли ломку и стабилизировали состояние В общем не потеряйте контакты — вывод из запоя недорого вывод из запоя недорого Вывод из запоя на дому — это реальный выход Перешлите тем кто в такой же ситуации

  9. Люди подскажите Близкий человек уже несколько дней в запое Соседи стучат в стену Таблетки не помогают Короче единственное что вытащило из запоя — вывод из запоя круглосуточно люберцы профессионально Приехали через 40 минут В общем телефон и цены тут — срочный вывод из запоя на дому недорого https://anonimno.vyvod-iz-zapoya-na-domu-moskva-jst.ru Не ждите пока станет хуже Перешлите тем кто в такой же ситуации

  10. Присматривал достойную платформу для спорта. Сравнил разных операторов но в конце концов выбрал на данной БК. На форумах хвалили — решил глянуть. И вот что понял — всё на уровне. Линия широкая деньги приходят чётко. Если кратко если присматриваете контору — попробуйте сами. Вот тут вся инф. 1win линия 1win линия И про регистрацию — без лишней воды. И сам по этой инструкции — на удивление просто. Не напряжно честно скажу. Плюс зеркало всегда работает. Не думайте долго. Хороших коэффициентов

Leave a Reply

Your email address will not be published. Required fields are marked *

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>