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.

20,367 thoughts on “Integration testing transactions and optimistic locking with Spring and JUnit

  1. Лечение зависимости строится индивидуально. Специалист учитывает возраст стаж употребления спиртного результаты обследования наличие хронических заболеваний психологическое состояние прошлый опыт кодирования и продолжительность запоя. Хотя родственникам часто хочется получить быстрый результат после одной процедуры алкоголизм является хроническим расстройством поэтому устойчивое восстановление обычно требует нескольких последовательных этапов. Детоксикация помогает справиться с физическими последствиями кодировка поддерживает период трезвости психотерапевтическую работу используют для изменения поведения и мотивации а реабилитация помогает человеку вернуться к семье работе и привычным делам. Подробнее – частная наркологическая клиника

  2. Попали в переплет — алкоголь победил. Думали само пройдет — бесполезно. Прочитал отзывы — выездная бригада. Без выходных и праздников. Купируют синдром отмены — без боли. Без постановки на учет. Все прозрачно. Организм очищается. Соседям так выводили — лучшие в городе. вывод из запоя врач на дом https://alkogolizm-x9w.vyvod-iz-zapoya-na-domu-samara-cde.ru Всё понятно без воды. Кто в Самаре — не потеряйте. Время — деньги. Помощь придёт

  3. Алкоголь — это страшная штука. Сначала вроде контролируешь — а потом день два неделя. Мой брат чуть не умер — сам не выберется. Что спасло нам жизнь — срочный вызов нарколога в Нижнем Новгороде. Не заставили ждать. Сняли острый психоз — всё чисто без боли. Без справок в наркодиспансер. Заплатили после. После процедуры — человек пришёл в себя. Знакомые всю семью спасли. круглосуточная наркологическая помощь круглосуточная наркологическая помощь На сайте всё подробно для нашего города. Не потеряйте. Пусть будет под рукой. Всё поправимо

  4. С каждым может случиться — запой длится уже неделю. Поили каплями — нервы на пределе. А ведь можно было сразу — срочная помощь нарколога в НН. Круглосуточно даже в праздники. Поставят капельницу — без лишней огласки. Никаких «красных крестов» в карте. Экономия времени и нервов. Знакомые обращались — врачи понимающие. наркологическая помощь срочно https://zapoy.narkologicheskaya-pomoshh-nizhnij-novgorod.ru Переходите там всё написано в пригороде. Не потеряйте. Лучше иметь номер заранее. Всё будет хорошо

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

  6. Беда — близкий не выходит из состояния. Скорая не приезжает — а риск огромный. Узнал куда звонить — выезд нарколога в северной столице. Оперативно выезжают. Капельницы и растворы. Очищают организм — профессионально. Анонимно и конфиденциально. Всё честно. вывести из запоя цена https://alkogolizm.vyvod-iz-zapoya-na-domu-sankt-peterburg-vkx.ru Там контакты и цены для Питера. Проверил на себе — помогли быстро. Самочувствие отличное. Чем раньше тем лучше. Кому надо в Питере — записывайте. Берегите себя

  7. Но лучше предупредить чем потом жалеть. Мой отец пил всю жизнь. Нашёл в интернете случайно — вывод из запоя на дому. Врач приехал через час. Снял интоксикацию. Просто врач и помощь. Сказали по телефону. С тех пор прошло полгода — не пьёт. выведение из запоя на дому нарколог выведение из запоя на дому нарколог Заходите сохраняйте не теряйте для области. Помощь есть она рядом. Берегите себя и близких

  8. Понял что старая планировка неудобна — что бюрократия затянет на месяцы. Все говорят что это сложно — решил найти профи. Начал искать компанию — которые делают проект согласование и ремонт. проектирование и оформление — я даже не заметил как прошло время. И всё узаконили. Теперь я спокоен. согласование перепланировки москва согласование перепланировки москва По ссылке — подробная информация для Москвы. Они сделают всё быстро грамотно и без лишних нервов. Почему бы не сэкономить свои силы и время если есть специалисты которые знают все нюансы?

  9. Такое горе — близкий сорвался. Состояние тяжелое а таблетки не берут. Соседи порекомендовали — вывод из запоя на дому. Не заставляют ждать. Осматривают ставят капельницу — без риска. Анонимно. Цены без сюрпризов. И главное — результат уже через пару часов. Проверенный вариант — безопасно и надежно. снятие алкогольной интоксикации на дому https://alkogolizm.vyvod-iz-zapoya-na-domu-samara-cde.ru На сайте условия работы для области. Запишите. Не тяните до утра. Берегите друг друга

  10. Проблема накрыла — близкий не выходит из состояния. Уговоры бесполезны — а помочь нужно срочно. Повезло найти контакты — вызов врача на дом в Воронеже. Не заставляют ждать. Капельницы и растворы. Нормализуют состояние — профессионально. Без постановки на учёт. Цены адекватные. выезд нарколога на дом выезд нарколога на дом Вся информация по ссылке для столицы Черноземья. Звонил им — всё четко. Организм приходит в норму. Не откладывайте. Кто в области — записывайте. Здоровье — это главное

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>