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.

12,785 thoughts on “Integration testing transactions and optimistic locking with Spring and JUnit

  1. I all the time used to study post in news
    papers but now as I am a user of internet therefore from now I am using net for articles, thanks to
    web.

  2. I know this if off topic but I’m looking into starting my
    own weblog and was wondering what all is needed to get
    set up? I’m assuming having a blog like yours would cost a pretty penny?
    I’m not very internet savvy so I’m not 100% certain. Any recommendations
    or advice would be greatly appreciated. Thanks

  3. Hello! I know this is somewhat off-topic however I had to ask.
    Does managing a well-established blog such as yours take a lot of work?

    I’m completely new to writing a blog however
    I do write in my diary on a daily basis. I’d like to start a blog so I will be able to share my
    own experience and views online. Please let me know if you have
    any kind of suggestions or tips for new aspiring bloggers.
    Appreciate it!

  4. Portanto, se você de fato deseja perder calorias com total segurança,
    não temos dúvidas que Azulzinho dos Incas podes ser uma ótima alternativa
    para que você os resultados que busca. Portanto, se você deseja aprimorar tua vida sexual com total segurança, não temos
    dúvidas que Tribulus Power podes ser uma ótimo possibilidade para que
    você conquiste um pênis mais , encantador e atraente.
    Assim, se você pesquisa por uma solução natural, competente e segura, Power Lion pode ser uma
    das melhores escolhas pra te proteger a conquistar a vida sexual que você sempre quis. https://www.ssinvestimentos.com/g1-gel-martelo-de-thor-funciona-anvisa-composicao-preco-valor-comprar-resenha-farmacia-bula-reclame-aqui-saiba-tudo-2024/

  5. در کل

    برای افرادی که قصد دارن

    شرط آنلاین

    کار می‌کنن

    این مجموعه

    به خوبی می‌تونه

    کاربردی دربیاد

    قابل توجهه که

    سرویس‌هایی مثل

    enfejaronline

    و

    سرویس sibbеt

    حضور پررنگی دارن

    در پایان

    مناسب بود

    و

    در آینده نزدیک

    سر میزنم دوباره

    Also visit my blog اخبار ورزشی

  6. Почему пользователи выбирают
    площадку KRAKEN?
    Маркетплейс KRAKEN заслужил доверие многочисленной аудитории благодаря сочетанию ключевых
    факторов. Во-первых, это широкий и
    разнообразный ассортимент, представленный сотнями продавцов.
    Во-вторых, интуитивно понятный
    интерфейс KRAKEN, который упрощает навигацию, поиск товаров и управление заказами даже для
    новых пользователей. В-третьих, продуманная система
    безопасных транзакций, включающая механизмы разрешения
    споров (диспутов) и возможность использования условного депонирования, что минимизирует риски для обеих сторон сделки.
    На KRAKEN функциональность сочетается с внимательным отношением к безопасности
    клиентов, что делает процесс покупок более предсказуемым, защищенным и,
    как следствие, популярным среди пользователей,
    ценящих анонимность и надежность.

  7. Thank you for some other great post. The place
    else could anybody get that type of information in such a perfect method of writing?

    I’ve a presentation next week, and I’m on the search for
    such information.

  8. Ребята, статья для тех, кто хочет не просто «выжить», а закрепиться на рынке. Автор объясняет, почему в условиях жёсткой конкуренции SEO становится не опцией, а необходимостью. Особенно ценно, что есть раздел про интеграцию SEO с другими каналами: контент-маркетинг, SMM, продажи. Комплексный подход — единственный путь к устойчивому успеху. Почитайте: https://olivadance.ru/2026/05/seo-kak-fundament-biznesa-pochemu-igra-v-dolguju-edinstvennaja-strategija-dlja-vyzhivanija/

  9. Write more, thats all I have to say. Literally, it seems as though you relied on the video
    to make your point. You clearly know what youre talking about, why waste your intelligence on just
    posting videos to your weblog when you could be giving us something
    enlightening to read?

  10. You are so awesome! I do not think I have read through something like this before.
    So great to find someone with original thoughts on this topic.
    Seriously.. thanks for starting this up. This website
    is something that’s needed on the web, someone with some originality!

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>