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/Pokupka-dollarov-12-23
https://telegra.ph/Znayu-zvuko-bukvennyj-razbor-slova-11-24
https://oarslm.zombeek.cz
https://telegra.ph/80-e-smotret-onlajn-11-20
https://site55940397.fo.team
купить попперс Евпатория
купить попперс Евпатория
https://telegra.ph/Kalkulyator-dosrochnogo-pogasheniya-kredita-11-17
https://site661032576.fo.team
страпон под попперс
https://www.bitsdujour.com/profiles/AA0avT
аванафил Саранск
https://www.bitsdujour.com/profiles/iCb4W3
попперс тренер
https://3yhvwt.zombeek.cz
к у п и т ь
https://telegra.ph/Tri-iks-1-11-17
https://telegra.ph/Serdechki-kurinye-kak-prigotovit-11-09
https://telegra.ph/Smotret-onlajn-svaty-5-02-02
https://www.bitsdujour.com/profiles/gMAfzd
дозировка и цена виагры
https://telegra.ph/Risunki-goroda-11-09
можно ли купить виагру в аптеке
аванафил Уссурийск
https://teletype.link/tropicalfwu1962
где заказать попперс
https://telegra.ph/Dismenorm-instrukciya-po-primeneniyu-cena-otzyvy-11-18
купить попперс Абакан
препарат для улучшения потенции
похожие на попперс
https://telegra.ph/Mezhdunarodnyj-arbitrazh-11-09
https://site832437022.fo.team
https://telegra.ph/Oshibka-programmy-zapuska-kod-115-gta-5-stim-02-09
wetten deutschland dänemark
My web page … Sportwetten forum Strategie
https://telegra.ph/Kak-sdelat-multizagruzochnuyu-fleshku-s-windows-7-02-10
Neue Wettanbieter
online anbieter betrugstest com
https://telegra.ph/Gimnaziya-35-vladimir-oficialnyj-sajt-11-26
https://telegra.ph/Prozhitochnyj-minimum-v-altajskom-krae-na-2017-god-11-14
https://www.bitsdujour.com/profiles/CqIfoY
https://telegra.ph/Anapa-avito-vakansii-11-26
power попперс
купить попперс Жуковский
wetten steuer österreich
my site basketball-wetten.com
https://ow8xne.zombeek.cz
https://telegra.ph/Kino-kuncevo-plaza-raspisanie-seansov-11-11
https://rentry.co/2c375op8
https://site275324842.fo.team
https://telegra.ph/Snyat-kvartiru-v-ramenskom-bez-posrednikov-ot-hozyaina-nedorogo-s-foto-01-18