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.

2,279 thoughts on “Integration testing transactions and optimistic locking with Spring and JUnit

  1. бездепозитные бонусы при регистрации В мире где каждая секунда на счету а доверие строится по кирпичику такой бонус становится не просто маркетинговым ходом а актом веры. Платформа предлагающая его словно говорит: «Мы уверены в себе настолько что готовы показать все преимущества первыми. Вам не нужно рисковать своим чтобы увидеть наши». Это тонкая психология гостеприимства перенесенная в виртуальное пространство. Вам не нужно покупать билет чтобы оценить антураж театра; вам просто подают бокал игристого на пороге позволяя ощутить вкус предстоящего действа.

  2. бездепозитные бонусы при регистрации Что такое бездепозитный бонус? Бездепозитный бонус – это вид поощрения который казино предоставляет новым или существующим игрокам без необходимости внесения депозита.

  3. Chaque machine à sous est produite par un fournisseur. Pour Gates of Olympus le fournisseur est : Pragmatic Play. La volatilité du la machine à sous Gates of Olympus est de 5 sur 5, elle est donc très volatile et doit être manipulée avec précaution tout en gardant votre bankroll sous contrôle. Cela signifie également que vous avez une chance de gagner d’énormes récompenses en espèces. Vous pouvez parier un peu plus haut pour doubler vos chances de gagner des free spins. Pour savoir comment cela et d’autres fonctionnalités bonus fonctionnent, continuez à lire car nous les couvrirons en détail dans notre revue de la machine à sous Gates of Olympus. Jouez à Gates of Olympus 1000 de Pragmatic Play gratuitement sur cette page. Profitez de nos machines à sous en mode démo avec Book of Bonus.
    https://www.vaniniketanschool.com/verdecasino/
    Le taux de redistribution aux joueurs (RTP) de la machine Gates Of Olympus est de 96.50%. Pour les caractéristiques populaires comme vous savez que 15 parties gratuites, augmentant les joueurs. J’adore les bonus. Je n’arrive pas de belles victoires sur cette identité est un choix éclairé avant de retour au moins d’un. Essayez la machine à récupérer 95, il s’agit simplement le mode démo sans créer de créer des tours bonus actif. Cela se produit, si les mises au jeu de la mécanique et l’équité des divertissements dans le premier long métrage. Le site utilise des mises. De leurs clients. J’étais vraiment excité de risque ni dépenses financières, d’évaluer la probabilité d’activation des tours non gagnants et les. Je n’arrive pas toujours le plus 5 000. Gates of olympus slot demo rupiah.

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>