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.
сделать реферат nejroset-dlya-ucheby-5.ru .
генерация nejroset-dlya-ucheby-6.ru .
https://telegra.ph/Messa-si-minor-12-12
https://45piwk.zombeek.cz
заказать цветы с доставкой в москве круглосуточно – Советы по уходу за букетом после доставки
https://www.bitsdujour.com/profiles/BjKvrF
https://snippet.host/itfrix
попперс Псков
https://telegra.ph/Perchatki-dlya-sporta-12-12
умная нейросеть для учебы nejroset-dlya-ucheby-3.ru .
https://site298679363.fo.team
Blackburn Rovers vs Preston North End 2026英冠21:00开踢,最新足球比分英格兰二级联赛焦点,赔率Evs看好主队。
https://site138993783.fo.team
basketball wetten verlängerung, Priscilla, dass gewinner heute
купить набор для влюбленных Тюмень
https://www.bitsdujour.com/profiles/A0LmSR
попперс Серпухов
https://rentry.co/5mknft93
https://paiza.io/projects/WD94qofG90m5eEa5SG1Z6g
beste sportwetten strategie
Stop by my webpage … Wette frankreich schweiz
https://szzcf8.zombeek.cz
https://paiza.io/projects/I26zsxw0TfjQhasETODGuw
sportwetten tipps kaufen legal
Feel free to surf to my homepage – Buchmacher Pferdewetten
г е е в
заменители таблеток сиалис
https://bl6wbk.zombeek.cz
сколько стоит согласовать перепланировку skolko-stoit-uzakonit-pereplanirovku-8.ru .
скачать официальный сайт мелбет скачать официальный сайт мелбет .
https://telegra.ph/Doklad-na-temu-volejbol-11-15
бк мелбет бк мелбет .
https://telegra.ph/Etalon-11-25
проект перепланировки квартиры проект перепланировки квартиры .
https://telegra.ph/Microsoft-office-2007-skachat-besplatno-russkaya-versiya-11-07
https://telegra.ph/Mv-22-osprey-02-09
попперс room
https://site64157182.fo.team
https://rentry.co/w8d5c7kh
попперс Тамбов
комплексное внедрение 1с 1s-vnedrenie.ru .
https://vnxpab.zombeek.cz
попперс с долгим эффектом
https://telegra.ph/Pensionnyj-fond-krasnogvardejskogo-rajona-spb-oficialnyj-sajt-02-11
какой дешевый аналог виагры
попперс Мытищи
https://snippet.host/pswzdw
умная нейросеть для учебы nejroset-dlya-ucheby-6.ru .
https://telegra.ph/Kupit-viagra-CHita-02-04
https://rentry.co/f6pc582q
https://www.bitsdujour.com/profiles/oEJddm
попперс Кисловодск