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://www.bitsdujour.com/profiles/CckV4p
online wetten mit paysafecard
Take a look at my blog … sportwette (ministryofproperties.co.uk)
п о п п е р с
сиалис где купить
купить варденафил Смоленск
что такое попперсы и как они действуют
сайт для рефератов сайт для рефератов .
https://www.bitsdujour.com/profiles/za8pPI
https://site611663803.fo.team
сколько стоит согласование перепланировки skolko-stoit-uzakonit-pereplanirovku-8.ru .
купить попперс Щёлково
виагра Евпатория
melbet app free download melbet app free download .
https://telegra.ph/Pesni-russkogo-radio-2016-novinki-slushat-i-skachat-besplatno-01-28
проект перепланировки и переустройства квартиры проект перепланировки и переустройства квартиры .
melbet зеркало рабочее на сегодня melbet зеркало рабочее на сегодня .
https://paiza.io/projects/PGFk-GR13z8nTNGCkb1qsA
https://t6sduo.zombeek.cz
https://telegra.ph/Meteoinfo-by-11-11
https://telegra.ph/Zakaz-edy-na-dom-v-moskve-02-15
https://rentry.co/u7mvro3h
цветы заказать московская область – Цветы ко Дню учителя с доставкой
внедрение 1с 8 3 внедрение 1с 8 3 .
https://telegra.ph/Olga-serial-1-sezon-12-04
заказ цветов срочно – Дополните букет гелиевыми шарами и игрушками
купить попперс Волгоград
https://site302705207.fo.team
https://www.bitsdujour.com/profiles/SEDYnV
https://telegra.ph/Polinevropatiya-ehto-11-09
д и л д о
https://snippet.host/dfmhcg
сиалис египетский
мелбет ios мелбет ios .
https://rentry.co/5vtqn44d
попперс вики
попперс набережные челны
сиалис 5мг n28 таб
https://paiza.io/projects/xx03tTiSAzKrPfh0gWGdjw
узаконивание перепланировки квартиры стоимость skolko-stoit-uzakonit-pereplanirovku-8.ru .
к у п и т ь
https://telegra.ph/Karta-orla-s-ulicami-i-domami-11-19
обувь виагры
мел бет мел бет .
проектная организация для перепланировки квартиры proekt-pereplanirovki-kvartiry22.ru .
super p-force Новосибирск
https://fapiwk.zombeek.cz
https://e8plq0.zombeek.cz
мужская виагра купить в минске
внедрение 1с управление предприятие 1s-vnedrenie.ru .
https://rentry.co/b9k7v6na