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.
долгий попперс
попперс что лучше
https://telegra.ph/Fozinap-11-11
https://telegra.ph/Frontit-lechenie-u-vzroslyh-12-02
https://site988890879.fo.team
https://site580918127.fo.team
https://fo7umh.zombeek.cz
https://0duksp.zombeek.cz
https://telegra.ph/Seatools-for-windows-01-04
супер p-forse
https://www.bitsdujour.com/profiles/Khtsp3
https://telegra.ph/Soft-nabor-Kopejsk-11-29
https://www.bitsdujour.com/profiles/HWj1By
Цветы рядом круглосуточно – Цветы в знак уважения начальству
купить сиалис 5 мг Комсомольск-на-Амуре
https://www.bitsdujour.com/profiles/GTig3z
купить попперс Щёлково
https://site883367625.fo.team
https://telegra.ph/Amnuehl-grigorij-vikipediya-11-18
мэри попперс
sportwetten gratiswetten
Here is my webpage; Wettanbieter Ohne Limit
купить попперс Липецк
strategien sportwetten
Look into my homepage – basketball wetten doppeltes ergebnis
https://zkvtg0.zombeek.cz
купить супер виагра Якутск
попперс Новошахтинск
https://telegra.ph/Perevodchik-s-proiznosheniem-anglijskih-slov-11-20
https://forums.maxperformanceinc.com/forums/member.php?u=239463
livescore für Sportwetten WettbüRo
https://telegra.ph/Bot-dlya-telegramm-02-13
https://aliciagreen2.livejournal.com/profile/
https://site797326611.fo.team
https://www.facer.io/u/aliciagreen
https://wibki.com/aliciagreen
https://allmylinks.com/aliciagreen2
https://www.scamadviser.com/check-website/poppersnow.ru
https://telegra.ph/Serial-velikolepnyj-vek-istoriya-kesem-12-25
купить сиалис 5 мг Майкоп
https://matkafasi.com/user/aliciagreen
https://myanimelist.net/profile/aliciagreen
https://seomotionz.com/member.php?action=profile&uid=116288
https://84rq51.zombeek.cz
https://www.mapleprimes.com/users/aliciagreen2
https://mylinks.ai/aliciagreen
beste sportwetten bild tipps anbieter österreich
https://pixelfed.social/p/aliciagreen/930109433586042352
https://www.planet-casio.com/Fr/compte/voir_profil.php?membre=aliciagreen
https://telegra.ph/Rich-24-11-13
https://gitlab.aicrowd.com/aliciagreen
порно азиатки