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://paiza.io/projects/rrQYsYfIaA0tPA0HfGfYCw
southwell races results
Also visit my website … picking A winner Horse racing
https://hedgedoc.dezentrale.space/s/OYd5TEhKQ
http://www.isexsex.com/space-uid-3336108.html
software predicción apuestas madrid hoy deportivas
сиалис купить в тольятти
casino online transferencia bancaria
Also visit my web site; casinos y tragamonedas madrid españa
Здорова народ Близкий человек уже несколько дней в запое Родственники не знают что делать Таблетки не помогают Короче только это реально спасло — нарколог на дом круглосуточно без выходных Приехал через 40 минут В общем не потеряйте контакты — вызвать наркологическую помощь https://czena.narkolog-na-dom-voronezh16.ru Не ждите пока станет хуже Перешлите тем кто в такой же ситуации
österreichische sportwetten gmbh
my page Basketball Wettart Wetten (Https://Martaasianstore.Co.Nz/Die-Beste-Zeit-Um-Live-Wetten-Zu-Platzieren-Ein-Timing-Guide/)
pferderennen münchen tipico wetten basketball (https://marsdesign.comtnet.com)
https://buildingraja.com/agent/jeremytic06/
https://xn--lbtq8u.xn--cksr0a.life/home.php?mod=space&uid=7358
apuestas las vegas mlb; https://www.carlosllinaressanjuan.com,
final copa libertadores
barcelona vs espanyol apuestas (Pedro) deportivas en linea
https://www.diggerslist.com/homesdmu3840/about
como tributan las real madrid casa de apuestas [Beverly]
https://fabble.cc/inspectorxze432
This is a perfect example of how to write an easy-to-read and insightful article. The clear formatting and completely objective tone made it an absolute pleasure to read through today. Bookmaker hors ARJEL
https://snippet.host/kfsvtz
https://www.elephantjournal.com/profile/63qeqaixqh/
wettanbieter mit deutscher lizenz
Here is my web page; basketball wett tipps
It’s awesome to go to see this web page and reading the
views of all mates on the topic of this piece of writing, while I am
also eager of getting familiarity.
https://eyelashbeautybar.com/author/cheatwfo35/
https://yjspic.online/home.php?mod=space&uid=131583
https://pad.wolkenbar.de/s/PoYp8O5ceD
https://paper.wf/evilyem475/rekomenduem-liudiam-kotorye-privykli-vse-kontrolirovat-t-k-55-kron-eshche-berut
types of best futsal online betting (Jayson) strategies