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://site346152946.fo.team
порно большие
https://telegra.ph/Reklama-orel-11-10
https://telegra.ph/Goroskop-ingo-02-14
https://telegra.ph/Hronometrazh-12-04
попперс кому нельзя
купить попперс рф
виагра или аналоги для мужчин купить
купить дапоксетин Нижний Новгород
купить сиалис в аптеке столичка
https://www.bitsdujour.com/profiles/nCAVn0
https://po6ule.zombeek.cz
https://telegra.ph/Kak-v-windows-10-otklyuchit-parol-pri-vhode-12-03
wetten auf tore
Feel free to visit my homepage; buchmacher köln (Merinoymurgui.com)
https://telegra.ph/Kuhnya-45-seriya-11-09
https://telegra.ph/Rabota-administrator-11-09
https://telegra.ph/Mest-za-gibel-muzha-melodrama-2016-11-18
как продлить половой акт с виагрой
wett tipps ergebnisse
my web page – sportwetten top gewinner; http://Www.Alyunaniya.com,
пиастрикс кошелек вход в личный кабинет Вход в личный кабинет Piastrix – это простой и безопасный процесс который открывает доступ ко всем функциям платежной системы. Следуя приведенным инструкциям
попперс в санкт петербурге
https://telegra.ph/Poppers-rf-01-05
https://www.bitsdujour.com/profiles/PfPEec
виагра мск интернет аптека
https://rentry.co/ds8bt7n7
https://amcjxo.zombeek.cz
спб попперс доставка
https://telegra.ph/Ustanovka-svetilnikov-v-natyazhnoj-potolok-01-07
https://site865506114.fo.team
https://telegra.ph/Hammershmidt-maren-11-19
купить виагру 200
super p-force купить
https://szwlhb.zombeek.cz
порно бабушки
купить super p-force Пенза
после виагры краснеет лицо почему
https://snippet.host/frfyip
купить попперс Владивосток
https://lo8hy6.zombeek.cz
что делать быстро кончаю
https://teletype.link/slightlyxic783
л и
https://t8joso.zombeek.cz
https://rentry.co/k2wwytn6
надя забава анальная инструкция попперс
попперс Калуга
р а с т е н и й
https://mh1bgw.zombeek.cz
набор для влюбленных Саратов
виагра без давления