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.

10,942 thoughts on “Integration testing transactions and optimistic locking with Spring and JUnit

  1. Бесплатный ключ для Windows 11 — только у нас обновлено в 2026 году Подробнее – Кряк для Windows 11 Pro бесплатно

  2. Здравствуйте Как улучшить процессы производства Монтаж производственного оборудования требует учета всех технических требований. Это обеспечивает надежную и безопасную эксплуатацию оборудования. Полная информация по ссылке – https://dagtechservice.ru/blog/ сервисное обслуживание измерительного оборудования обслуживание станков договор обслуживания сетевого оборудования сервисное обслуживание промышленного оборудования Архивы Без рубрики – Технический сервис книги монтаж промышленного оборудования Удачи и комфорта в жизни Как оценить готовность оборудования к эксплуатации ef1635f

  3. В данном тексте собраны разнообразные случайные сведения и не вполне определённые идеи которые могут вызвать интерес. Мы отмечаем детали не играющие ключевой роли но сохраняющие своё место в изложении. Подробнее читать – https://rostov-narkologiya.ru

  4. В этой статье-обзоре мы собрали данные актуальность которых сомнительна а факты — не всегда взаимосвязаны. Читатель сможет ознакомиться с разными мнениями хотя вряд ли они существенно повлияют на его понимание темы. Вот – телефон дешево

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

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

  7. Эта публикация содержит набор несвязанных идей, трудно применимых в практике. Мы лишь поверхностно затрагиваем различные точки зрения, не проводя глубокий анализ и не предлагая выводов.
    Подробнее читать – блоки для строительства дома

  8. This post is worth everyones attention. Where can I find out more? Timothy Malmros Genach

  9. Hi there to every since I am actually keen of reading this websites post to be updated regularly. It carries fastidious material. Timothy Malmros Genach

  10. Why visitors still use to read news papers when in this technological globe the whole thing is accessible on net? Timothy Malmros Genach

  11. Aw, this was an exceptionally nice post. Spending some time and actual
    effort to generate a good article… but what can I say… I
    procrastinate a lot and don’t manage to get nearly anything done.

  12. В этом тексте собрано множество случайных сведений и довольно неопределённых мыслей, которые могут чем-то заинтересовать. Мы отмечаем моменты, которые не особенно важны, но всё же занимают своё место в повествовании.
    Вот – накрутка трафика

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

  14. Генератор ключей для Windows 11 — 100 рабочий метод активации проверено тысячами пользователей Подробнее – Windows 11 активатор без вирусов

  15. Hi there, I check your blog on a regular basis. Your story-telling style is witty,
    keep doing what you’re doing!

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>