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

  1. After looking at a few of the articles on your blog, I seriously appreciate your way of blogging.

    I book marked it to my bookmark site list and
    will be checking back in the near future. Take a look at my website too and tell me
    what you think.

  2. With havin so much written content do you ever run into
    any issues of plagorism or copyright infringement? My site
    has a lot of unique content I’ve either authored myself or outsourced
    but it seems a lot of it is popping it up all over the web without my authorization. Do you know any methods
    to help reduce content from being stolen? I’d truly appreciate it.

  3. Woah! I’m really enjoying the template of this site.
    The blog loads very quick, just like the nhandinhkeonhacai mobile app.

    Outstanding Blog!

  4. Thanks for finally talking about > Integration testing transactions and optimistic locking with Spring and JUnit
    | freestyle developments gsc.tab=0

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

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

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

  6. سلام، خودم امروز وسط وبگردی تو اینترنت
    به این صفحه برخوردم و بدون اغراق برام جالب بود.
    محتواش خیلی کامل بود وبه ندرت همچین منبعی پیدا کنم.
    به نظرم برای خیلی‌ها مفید باشه.
    برای کسایی که دنبال اطلاعات کامل هستن حتما یه نگاهی بندازن.
    در مجموع تجربه خوبی بود و احتمالا بازهم سر می‌زنم

    خلاصه‌وار

    برای کاربران علاقه‌مند به

    فضای شرط‌بندیآنلاین

    میخوان تست کنن

    این سایت خوب

    احتمالاً می‌تونه

    مناسب کاربران باشه

    چیزی که جلب توجه می‌کنه اینه که

    برندهایی مثل

    enfejaronline شناخته شده

    و

    سایت siЬbet

    پیشرفت قابل توجهی داشتن

    در پایان کار

    خوب بود

    و

    بی‌تردید

    مراجعه مجدد دارم

    .

    Also visit my web blog: معرفی یک سایت قابل اعتماد برای بازی انفجار اینترنتی

  7. Hello would you mind letting me know which webhost you’re
    utilizing? I’ve loaded your blog in 3 completely different browsers and I must say this blog loads
    a lot faster then most. Can you suggest a good web hosting provider at a honest price?
    Kudos, I appreciate it!

  8. Hello just wanted to give you a quick heads up and let you know a few
    of the images aren’t loading properly. I’m not sure why but I think its a
    linking issue. I’ve tried it in two different web browsers and both show the same outcome.

  9. جمع‌بندی

    برای اون دسته که

    شرط آنلاین

    می‌گردن

    این فضای آنلاین

    می‌تونه واقعاً

    گزینه خوبی باشه

    همچنین

    وبسایت‌هایی مثل

    enfeјaronline جدید

    و

    sibbet معتبر

    کاربرای زیادی دارن

    در کل داستان

    مناسب بود

    و

    دوباره

    استفاده خواهم کرد

    Heere is my web sitе – رسانه دانشگاهی

  10. I’ve been browsing online more than three hours today, yet I never found
    any interesting article like yours. It’s pretty worth enough for me.
    In my view, if all webmasters and bloggers made good content as you
    did, the web will be much more useful than ever before.

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>