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

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

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

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

  4. Попали в переплет — человек в запоре. Таблетки бесполезны — а риск растёт. Хорошо — узнал про круглосуточную помощь. И что характерно — выезжает нарколог. Без регистрации. Капельницы и препараты с собой. Капельница очищает — быстро. И стоимость приемлемая — экономия времени и нервов. вывод из запоя на дому цена https://narkolog.vyvod-iz-zapoya-na-domu-voronezh-bvc.ru Вся информация здесь — в любое время. Проверил на себе — без обмана. Нужно действовать сразу. Спасибо что есть такие специалисты. Кому надо — рекомендую. Близких надо спасать. Держитесь

  5. Наркологическая клиника в Санкт-Петербурге оказывает профессиональную медицинскую помощь людям столкнувшимся с алкогольной наркотической и другими формами химической зависимости. Лечение требуется не только при длительном запое или выраженной наркомании: обратиться к врачу желательно уже тогда когда человек теряет контроль над количеством алкоголя или психоактивных веществ испытывает абстинентный синдром психологические трудности перепады настроения проблемы в семье и социальной жизни. Чем раньше начинается лечение тем больше возможностей стабилизировать физическое и психоэмоциональное состояние определить причины пагубной привычки и сформировать устойчивую мотивацию к выздоровлению. Изучить вопрос подробнее – https://n.narkologicheskaya-klinika-sankt-peterburg14.ru/

  6. Чтобы заказать выезд достаточно сделать звонок по телефону и сообщить дежурному специалисту основные данные: район Красноярска примерную длительность запоя возраст больного известные болезни и текущее самочувствие. Это позволяет получить помощь максимально быстро и анонимно что особенно важно в критической ситуации. При необходимости можно оставить заявку через форму обратной связи: специалист свяжется уточнит адрес и поможет выбрать оптимальный формат оказания медицинской помощи. Подробнее – вывод из запоя круглосуточно Красноярск

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

  8. Данный факт гласит о срочной необходимости врачебного вмешательства для выведения из запоя в стационаре клиники и последующего квалифицированного лечения алкогольной зависимости. Если зависимый перестал реагировать на окружающих появились судороги или угроза смерти нельзя ждать приезда плановой бригады: требуется экстренная помощь. Подробнее – нарколог вывод из запоя в Кемерово

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

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

  11. Если человек обращается после длительного употребления лечение может начинаться с очищения организма. Детоксикация проводится с учетом состояния пациента и возможных противопоказаний. Лекарственные препараты объем инфузионной поддержки и продолжительность процедур определяет врач. Капельница не является универсальным способом лечения алкоголизма или наркомании: она применяется по медицинским показаниям и решает прежде всего задачи стабилизации организма. После снятия острых проявлений специалисты переходят к основному лечению зависимости. Ознакомиться с деталями – https://4.narkologicheskaya-klinika-moskva11.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>