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.

13,382 thoughts on “Integration testing transactions and optimistic locking with Spring and JUnit

  1. Здравствуйте Материнский капитал на покупку жилья аналоги в Казахстане 2026 года существуют. Государственные программы поддержки семей с детьми помогают улучшить условия. Используйте сертификаты для первоначального взноса или погашения ипотеки частично. Изучите все доступные меры социальной поддержки для вашей семьи внимательно. Полная информация по ссылке – https://na-tumbe.kz/ как поднять объявление в поиске весы напольные с анализом состава тела ароматизаторы в машину какие лучше весы напольные с анализом состава тела геолокация определение местоположения стрижка когтей собаке самостоятельно Всего наилучшего и хорошей информации

  2. Для тех, кто ищет информацию по теме “Футбол и жизнь: от спорта до ставок”, нашел много полезного.

    Ссылка ниже:

    https://out-football.com

  3. Важно не ждать когда состояние пациента станет критическим. Алкоголизма наркомании и других форм зависимости часто стесняются но промедление может привести к осложнениям депрессии агрессии нарушению работы органов тяжелой интоксикации и риску для жизни человека. Подробнее тут – вызов нарколога на дом республика татарстан

  4. Вызов нарколога на дому удобен когда близкий человек не готов ехать в клинику стесняется обращаться за медицинской помощью или боится огласки. Доктор приезжает по месту проживания проводит диагностику подбирает индивидуально необходимые лекарства и начинает выведение токсинов. Изучить вопрос глубже – вывод из запоя в стационаре казань

  5. Публикация о чит-кодах секс игрушки анал

  6. Вывод запоя нужен не только при тяжелых осложнениях. Даже если пациент говорит что «сам справится» запой может быстро привести к отравлении этанола обезвоживанию нарушению давления делирия галлюцинаций судорожных реакций инфаркта или инсульта. Чем дольше человек продолжает пить тем выше риск серьезные последствий для организма. Получить больше информации – вывод из запоя на дому цена в сочи

  7. An intriguing discussion is worth comment. There’s no doubt that that you
    ought to write more on this topic, it may not be a taboo subject but typically folks don’t talk
    about such topics. To the next! Kind regards!!

  8. Врач нарколог проводит первичный осмотр пациента уточняет сколько дней длится запой какие напитки употреблялись есть ли боль рвотные позывы бессонница панические атаки судороги галлюцинации повышенная тревожность или признаки белой горячки. После этого врач определяет можно ли проводить вывод запоя на дому или лучше организовать лечение в стационаре. Ознакомиться с деталями – наркологический вывод из запоя казань

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

  10. Реабилитация наркоманов по методу 12 шагов может сочетаться с психотерапией групповой терапией консультацией нарколога работой психолога наблюдением врача медикаментозной терапией стационаром детоксикацией и помощью родственникам. Если человек находится в острой интоксикации переживает ломку запой похмельный синдром тревогу бессонницу психоз или выраженное физическое истощение сначала может потребоваться наркологическая помощь срочный вызов стационар снятие ломки капельница вывод из запоя или детоксикация. После стабилизации начинается реабилитация как отдельная программа направленная на долгосрочные изменения. Получить дополнительную информацию – reabilitaciya-programma-12-shagov

  11. Наркологическая помощь проводится на дому амбулаторно в клинике и в стационаре. Врач-нарколог проводит осмотр пациента анализ жалоб уточняет стаж алкогольной зависимости наличие хронического заболевания ограничения признаки психических расстройств особенности поведения и риск осложнений. После диагностики подбирается индивидуальная схема: капельница препараты витамины гепатопротекторы седативные средства инфузионная терапия детоксикация и дальнейшее лечение алкоголизма. Подробнее можно узнать тут – вывод из запоя дешево в сочи

  12. Важное преимущество услуги — анонимность. Информация о пациента обращении адрес диагноз лечение консультация стоимость препараты и другие данные не передаются третьим лицам. Нажимая кнопку «отправить заявку» вы соглашаетесь с пользовательским соглашением политикой обработки персональных данных и политикой конфиденциальности сайта. Углубиться в тему – вызвать нарколога на дом казань

  13. This is a topic which is close to my heart…
    Thank you! Where are your contact details though?

    Here is my web-site; milenium bukmacher pleszew (Virgil)

  14. Вызов нарколога на дом актуален в ситуации когда пациент не может самостоятельно прийти на прием в клинике агрессивно реагирует на уговоры находится в тяжелой похмельной интоксикации или боится постановки на учет. Врач помогает на месте: проводит первичная диагностика осмотр назначает медикаментозные процедуры дает рекомендации по дальнейшему лечению и объясняет родственникам как действовать после приезда бригады. Получить дополнительную информацию – http://narkolog-na-dom-kazan22.ru/

  15. Наркологическая клиника в Казани работает круглосуточно: врач приезжает на дому проводит осмотр пациента оценивает тяжесть состояния подбирает препараты и объясняет как будет проходить вывод. При необходимости лечение продолжается в клинике или в стационаре а после стабилизации предлагаются кодирование психотерапевтических консультации и реабилитация. Исследовать вопрос подробнее – вывод из запоя вызов на дом

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>