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.

19,281 thoughts on “Integration testing transactions and optimistic locking with Spring and JUnit

  1. Беда пришла — отец совсем потерял себя. Уговоры бесполезны — а риск растёт. Узнал куда звонить — капельница на дом в Питере. Оперативно выезжают. Полный комплект. Очищают организм — быстро. Анонимно и конфиденциально. Цены адекватные. капельница от запоя на дому капельница от запоя на дому Там контакты и цены для северной столицы. Я сам вызывал — всё четко. После процедуры сразу легче. Главное — не медлить. Кто в северной столице — держите под рукой. Здоровье — это главное

  2. Срыв случился — человек в запое уже несколько дней. Таблетки не помогают — а помочь нужно срочно. Узнал куда звонить — капельница на дом в нашем городе. Не заставляют ждать. С собой всё необходимое. Вводят лекарства — быстро. Никто не узнает. Всё честно. выведение из запоя на дому в спб https://narkolog.vyvod-iz-zapoya-na-domu-sankt-peterburg-hnd.ru Все условия для нашего города. Я сам вызывал — без обмана. Самочувствие отличное. Не откладывайте. Кому надо в Питере — пригодится. Берегите себя

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

  4. Беда пришла — близкий не выходит из состояния. На дому не помогают — необходима клиника в Нижнем Новгороде. Друзья порекомендовали — вывод из запоя в стационаре. Врачи круглосуточно наблюдают. Капельницы и препараты — под контролем врачей. Без лишних бумаг. Палаты хорошие. вывод из запоя в стационаре в нижнем новгороде вывод из запоя в стационаре в нижнем новгороде На сайте подробности для НН. Проверили на себе — помогли реально. Результат очевиден. Не тяните время. Кто в НН — не бойтесь. Выход есть всегда

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

  6. Срыв произошёл — человек в запое уже несколько дней в столице Урала. Таблетки не помогают — а риск огромный. Хорошо что есть специалисты — выезд нарколога на дом в столице Урала. Врачи приезжают быстро по адресу. Полный комплект. Вводят лекарства — безопасно. Анонимно и конфиденциально. Всё честно в регионе. капельница от алкоголя цена https://alkogolizm.kapelnicza-ot-zapoya-ekaterinburg-rhm.ru Все условия для нашего города. Проверил на себе — без обмана. Самочувствие супер. Главное — не медлить. Кто в нашем городе — пригодится. Всех благ

  7. Беда пришла — родственник пьёт без остановки. На дому не помогают — только стационар поможет в столице Приволжья. Хорошо что есть клиника — лечение в клинике. Постоянный контроль состояния. Очищение крови — профессионально. Анонимно и конфиденциально. Условия комфортные. вывести из запоя в стационаре https://kapelnica.vyvod-iz-zapoya-v-staczionare-nizhnij-novgorod-xft.ru На сайте подробности для столицы Приволжья. Родственника положили — без обмана. Человек приходит в себя. Откладывать нельзя. Кто в НН — рекомендую. Всё будет хорошо

  8. Критическая ситуация — близкий не выходит из состояния. Дома не справиться — требуется серьёзное лечение в нашем городе. Друзья порекомендовали — лечение в стационаре. Медперсонал на месте 24/7. Очищение крови — безопасно и эффективно. Без лишних бумаг. Уход профессиональный. центр вывод из запоя https://alkogolizm.vyvod-iz-zapoya-v-staczionare-nizhnij-novgorod-elm.ru Все условия работы для НН. Я сам лежал — врачи высший класс. Состояние полностью нормализуется. Не тяните время. Кому надо в Нижнем Новгороде — обращайтесь. Держитесь

  9. Кошмар — родственник пьёт без остановки. Уговоры не действуют — а состояние тяжёлое. Друзья порекомендовали — вызов врача на дом в столице Черноземья. Специалист через час. Полный комплект. Очищают организм — профессионально. Никто не узнает. Всё честно. помощь нарколога на дому https://alkogolizm.narkolog-na-dom-voronezh-13.ru На сайте подробности для Воронежа. Проверил на себе — помогли быстро. Самочувствие отличное. Не терпите. Кто в нашем городе — держите под рукой. Берегите себя

  10. Проблема накрыла — близкий не выходит из состояния. Уговоры бесполезны — а риск растёт. Друзья порекомендовали — выезд нарколога в столице Черноземья. Не заставляют ждать. Оборудование и препараты. Ставят капельницу — быстро. Анонимно и конфиденциально. Всё честно. нарколог на дом воронеж цены https://alkogolizm.narkolog-na-dom-voronezh-11.ru Вся информация по ссылке для Воронежа. Я сам вызывал — всё четко. После процедуры сразу легче. Не откладывайте. Кому надо в Воронеже — записывайте. Берегите себя

  11. Беда пришла в дом — отец не выходит из состояния. Скорая отказывается госпитализировать — требуется интенсивная терапия. Хорошо что нашли хороший стационар. Работает круглосуточный стационар. Врачи постоянно наблюдают. Детоксикация организма — надёжно. Никто не узнает. Отношение внимательное. стационар вывод из запоя https://alkogolizm.vyvod-iz-zapoya-v-stacionare-samara13.ru Все условия работы. Я сам лежал — всё честно. Состояние нормализуется. И что важно — с реабилитацией. Действуйте сразу. Здоровье — это главное. Кто ищет стационар — не бойтесь. Выход есть всегда

  12. Срыв произошёл — родственник пьёт без остановки в Екатеринбурге. Скорая не приезжает — а помочь надо срочно. Друзья порекомендовали — выезд нарколога на дом в Екатеринбурге. Не заставляют ждать по всему городу. Полный комплект. Ставят капельницу — профессионально. Анонимно и конфиденциально. Цены адекватные в нашем городе. прокапаться от алкоголя цены https://alkogolizm.kapelnicza-ot-zapoya-ekaterinburg-rhm.ru Вся информация по ссылке для Екатеринбурга. Звонил им — всё четко. После капельницы — как новый человек. Чем раньше тем лучше. Кто на Урале — пригодится. Всех благ

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

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

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

  16. Срыв случился — человек в запое уже давно. Дома уже не справиться — нужна клиника в Нижнем Новгороде. Хорошо что есть клиника — вывод из запоя в стационаре. Медперсонал на месте 24/7. Детоксикация организма — безопасно и эффективно. Никто не узнает. Палаты хорошие. выведение из запоя стационар https://kapelnica.vyvod-iz-zapoya-v-staczionare-nizhnij-novgorod-xft.ru Там контакты и цены для Нижнего Новгорода. Родственника положили — помогли реально. Состояние полностью нормализуется. Главное — не медлить. Кто в НН — рекомендую. Всё будет хорошо

  17. Беда пришла — близкий пьёт без остановки в нашем городе. Скорая не приезжает — а риск огромный. Хорошо что есть специалисты — выезд нарколога в столице Урала. Не заставляют ждать по Екатеринбургу. Полный комплект. Очищают кровь — безопасно. Без постановки на учёт. Стоимость приемлемая в нашем городе. поставить капельницу от запоя на дому цена https://narkolog.kapelnicza-ot-zapoya-ekaterinburg-vbx.ru На сайте подробности для столицы Урала. Уже пользовался — профессионалы. После капельницы — как новый. Главное — не терпите. Кто в Екб — пригодится. Берегите себя

  18. Беда пришла — отец совсем слетел с катушек. Скорая не приезжает — а время идёт. Узнал куда звонить — выезд нарколога. Не заставляют ждать. Капельницы и витамины. Нормализуют состояние — профессионально. Без постановки на учёт. Цены адекватные. вызвать капельницу от запоя https://narkolog.kapelnicza-ot-zapoya-ekaterinburg-rhm.ru Все условия. Я сам вызывал — профессионалы. После капельницы — как новый человек. Чем раньше тем лучше. Пригодится. Берегите себя

  19. Беда пришла — родственник пьёт без остановки. На дому не помогают — необходима клиника в Нижнем Новгороде. Узнали куда обратиться — интенсивная терапия. Круглосуточный мониторинг. Детоксикация организма — под контролем врачей. Без лишних бумаг. Условия комфортные. вывод из запоя в наркологическом стационаре https://alkogolizm.vyvod-iz-zapoya-v-staczionare-nizhnij-novgorod-elm.ru Все условия работы для нашего города. Родственника положили — всё честно. Состояние полностью нормализуется. Главное — не медлить. Кто в НН — советую. Всё будет хорошо

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>