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,890 thoughts on “Integration testing transactions and optimistic locking with Spring and JUnit

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

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

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

  4. Положение серьёзное — родственник на грани жизни и смерти. Скорая отказывается госпитализировать — только стационар спасёт. Узнали куда обратиться. Работает круглосуточный стационар. Медперсонал круглосуточно на месте. Полная очистка крови — надёжно. Конфиденциально. Уход профессиональный. нарколог вывод из запоя в стационаре https://alkogolizm.vyvod-iz-zapoya-v-stacionare-samara13.ru Вся информация по ссылке. Я сам лежал — без обмана. Результат виден сразу. И что радует — без срывов. Главное — не медлить. Время не ждёт. Тем кто в такой ситуации — рекомендую. Держитесь

  5. При оценке состояния врач обращает внимание на несколько групп нарушений. Самостоятельно определить степень отравления бывает сложно поэтому диагностика и осмотр нарколога позволяют быстрее выбрать безопасный метод выведения из запоя. Узнать больше – https://v.vyvod-iz-zapoya-v-krasnoyarske17.ru/

  6. Попал в переплет — после вчерашнего состояние ужасное. Воды уже литр выпил — а организм бунтует. Сам искал в интернете — можно быстро прийти в себя. Имеется в виду — капельница на дому. Оперативно выезжают. С собой все препараты. Нормализуют состояние — через час как новый. И что ценно — конфиденциально. Стоимость приемлемая. цена капельницы нарколога https://narkolog.kapelnicza-ot-pokhmelya-ekaterinburg.ru На сайте подробности. Звонил им — без обмана. После капельницы — чувствуешь человека. Больше так не буду. Кому надо — записывайте. Не мучайтесь. Берегите себя

  7. Помощь можно получить анонимно с аккуратным оформлением и внимательным отношением к личным данным. Ознакомиться с деталями – скорая помощь вывода из запоя

  8. sichere wett tipps heute

    Here is my web page :: online sportwetten und live-wetten für
    fussball tennis basketball eishockey – Herman,

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

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

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

  12. Пришла беда — близкий совсем спился. На дому невозможно помочь — нужна клиника. Хорошо что нашли клинику. Можно лечь в клинику. Контроль состояния 24/7. Инфузионное лечение — безопасно и эффективно. Полная анонимность. Палаты комфортные. стационарное выведение из запоя https://kapelnica.vyvod-iz-zapoya-v-stacionare-samara13.ru Там контакты и цены. Обращались туда — всё честно. После лечения сразу легче. И что радует — без срывов. Действуйте сразу. Время не ждёт. Кто ищет стационар — рекомендую. Держитесь

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

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

  15. Помощь может включать консультацию детоксикацию стационар и дальнейшее сопровождение по показаниям. Узнать больше – narkolog-besplatno-moskva

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

  17. Making a move — quite the journey. Had my turn not ages back and no point sugarcoating pretty intense. Seems manageable at first then it snowballs fast. Neighbors all recommended separate crews but I couldnt trust hearsay. So heres the gist: when youre on the hunt for reliable moving services here take your time deciding. The truth is: professional teams know the logistics — especially with large furniture. What worked for me — read through piles of reviews — and I mean it that groundwork saved me. Take a look at this link that helped me narrow it down. southern nevada movers https://movers-in-nevada-lys.com That very page cut through all the noise. Rates are displayed plainly — complete transparency. Ended up booking through that site and it was surprisingly hassle-free. Do your homework. Insist on a contract. The right crew makes everything easier. Hope your move goes better than most

  18. Работа клиники строится на комплексном подходе. Лечение зависимости может включать диагностику детоксикацию медикаментозное лечение снятие ломки вывод из запоя кодирование от алкоголизма психотерапию психологическую поддержку и последующую реабилитацию. Врач оценивает медицинские данные определяет противопоказания и предлагает подходящий способ помощи. Такой путь позволяет не ограничиваться временным улучшением физического состояния а работать с причинами болезни поведением зависимого мотивацией и условиями необходимыми для устойчивой трезвости. Изучить вопрос подробнее – http://1.narkologicheskaya-klinika-moskva11.ru/

  19. Попал в переплет — с утра просто ад. Рассол бесполезен — а легче ни капли. Сам искал в интернете — оказывается есть выход. Речь про — капельница от похмелья. Врач через час. Оборудование и растворы. Ставят капельницу — через час как новый. И что важно — без учёта. Стоимость приемлемая. вызвать капельницу от запоя вызвать капельницу от запоя Там контакты и цены. Проверил на себе — всё четко. После капельницы — чувствуешь человека. Больше так не буду. Кому надо — записывайте. Главное — не терпите. Здоровье — это главное

  20. Чтобы оформить запись позвоните в центр или оставьте контактную форму на сайте. Если удобнее написать укажите номер телефона и адрес — сотрудник перезвонит. В некоторых случаях связь также поддерживается через WhatsApp. Главная задача первого разговора — понять срочность обращения и подготовить специалиста к выезду а не поставить диагноз дистанционно. Дополнительная информация – вывод из запоя на дому недорого в Кемерово

  21. Наркологическая помощь нужна не только для облегчения похмелья. Врач должен понять насколько далеко зашла болезнь есть ли признаки сформированной зависимости и сможет ли пациент продолжать лечение алкоголизма. Чем раньше начат системный процесс тем выше шансы на устойчивое выздоровление. Получить больше информации – http://1.vyvod-iz-zapoya-balashiha5.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>