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.

22,358 thoughts on “Integration testing transactions and optimistic locking with Spring and JUnit

  1. Когда мой дедушка начал теряться во времени и пространстве. Он боялся больниц не хотел ехать ни в какую. Мне ответили что врач приедет через час. Психиатр на дом — это было идеальное решение. Дал рекомендации нам родственникам. Анонимно без лишней бюрократии. Теперь дедушка спокойнее ночи стали нормальными. детский психиатр на дом https://psikhiatr-na-dom-v-moskve-dzf.ru Там все контакты и условия для МСК. Если ваш близкий нуждается в психиатрической помощи но не может или не хочет ехать в клинику — вызовите врача на дом.

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

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

  4. Но зависимость оказывается сильнее. Сначала это казалось способом снять стресс. Её дети плакали по ночам просили маму. Тогда я начала искать клинику где ей могли бы помочь. анонимная госпитализация в Москве — тем что действительно сработало. Детоксикация психотерапия работа с психологом. Она стала спокойнее начала улыбаться. Только результат и покой в семье. Цена оказалась вполне доступной учитывая масштаб проблемы. Мы снова вместе и я счастлива. платный наркологический стационар платный наркологический стационар Это может пригодиться в трудный момент для области. Позвоните узнайте подробности. Не бойтесь сделать первый шаг — он может изменить всё

  5. Мы не сразу поняли что это болезнь. И мы просто не узнавали его. Но он не слышал нас не хотел слушать. Мы искали клинику в Санкт-Петербурге читали отзывы. круглосуточная помощь в СПб — это был наш выбор и он оказался верным. Он работал с психологом каждый день. Снова начал говорить о будущем строить планы. Мы сказали всем что он был в командировке. Мы заплатили за полный курс. Он работает общается с нами улыбается. лучшие наркологические клиники спб https://zapoy.narkologicheskaya-klinika-v-spb14.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>