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,502 thoughts on “Integration testing transactions and optimistic locking with Spring and JUnit

  1. Hey! I know this is kinda off topic however , I’d figured I’d ask.
    Would you be interested in trading links or maybe guest authoring a blog article or vice-versa?
    My blog covers a lot of the same topics as yours and I believe we could
    greatly benefit from each other. If you might be interested feel free to shoot
    me an e-mail. I look forward to hearing from you! Fantastic blog by
    the way!

  2. Hello I realize this is sort of off-topic however I needed to ask. Does managing a well-established website like yours require a massive amount work? I am completely new to operating a blog however I do write in my journal everyday. Id like to start a blog so I can share my personal experience and thoughts online. Please let me know if you have any kind of recommendations or tips for brand new aspiring bloggers. Thankyou Sweet Bonanza

  3. I will right away clutch your rss feed as I can’t to find your email subscription hyperlink or newsletter service.
    Do you’ve any? Kindly permit me recognise in order that I may
    subscribe. Thanks.

  4. Pretty This has been an incredibly wonderful post. Thanks for providing this information. Wolf Gold

  5. Hi there This post could not be written any better Reading this post reminds me of my old room mate He always kept chatting about this. I will forward this write-up to him. Pretty sure he will have a good read. Thank you for sharing Hot to Burn Multiplier

  6. Hi there mates its enormous post about tutoringand completely explained keep it up all the time. Sweet Rush Bonanza

  7. Почему пользователи выбирают площадку KRAKEN?

    Маркетплейс KRAKEN заслужил доверие многочисленной аудитории благодаря сочетанию ключевых факторов.

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

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

  8. Hey Do you know if they make any plugins to assist with Search Engine Optimization? Im trying to get my blog to rank for some targeted keywords but Im not seeing very good success. If you know of any please share. Kudos Starburst

  9. Good day Do you know if they make any plugins to safeguard against hackers? Im kinda paranoid about losing everything Ive worked hard on. Any suggestions? Starburst

  10. Howdy just wanted to give you a quick heads up.
    The words in your content seem to be running off the screen in Firefox.
    I’m not sure if this is a formatting issue or
    something to do with browser compatibility but I
    figured I’d post to let you know. The design look great though!
    Hope you get the problem solved soon. Thanks

  11. Ahaa, its fastidious discussion on the topic of this
    piece of writing here at this webpage, I have read all that, so
    now me also commenting at this place.

  12. Почему пользователи выбирают площадку KRAKEN?

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

  13. Thanks for finally talking about > Integration testing transactions
    and optimistic locking with Spring and JUnit | freestyle developments < Liked it!

  14. https://truyenqq.ltd/

    Its like you read my mind! You seem to know a lot about this,
    like you wrote the book in it or something.
    I think that you can do with some pics to drive the message home a little bit, but instead of that,
    this is fantastic blog. A fantastic read. I will certainly be back.

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>