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.

17,994 thoughts on “Integration testing transactions and optimistic locking with Spring and JUnit

  1. Реутов всем привет Отец не выходит из штопора Соседи стучат в стену Нужен врач прямо сейчас Короче врач приехал и поставил систему — нарколога на дом реутов с препаратами Через пару часов человек пришёл в себя В общем не потеряйте контакты — нарколог на дом реутов https://klinika.narkolog-na-dom-moskva-tfb.ru Не ждите пока станет хуже Перешлите тем кто в такой же ситуации

  2. So moving — total ordeal. Dealt with it not too long ago and honestly an absolute whirlwind. You grab a few boxes then the sheer volume hits you. I heard mixed things from everyone but I wanted to verify everything. So heres the long and short: when youre after trustworthy movers in the area do some legwork first. Think about it: experienced operators deal with heat like pros — when time is money. Heres my approach — rang up a few outfits — and you can take this to the bank I saved both cash and nerves. Check out this resource that gave me direction. nevada long distance movers https://movers-in-nevada-bng.com That one spot saved me hours. No funny business with rates — transparent to the core. Scheduled via that resource and it was refreshingly smooth. So be thorough. Ask about their license. Good help is worth every penny. Hope this helps you navigate the chaos

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

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>