Integration testing transactions and optimistic locking with Spring and JUnit

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.

2,500 thoughts on “Integration testing transactions and optimistic locking with Spring and JUnit

  1. рейтинг казино без верификации В мире онлайн-гемблинга где каждая транзакция оставляет цифровой след а процедуры проверки личности могут растягиваться на дни существует особый сегмент заведений пользующийся устойчивым спросом. Это казино без верификации — цифровые площадки предлагающие щедрую долю анонимности в обмен на лояльность игрока. Их привлекательность кроется не только в скорости доступа к игровому процессу но и в философии минимального вмешательства в личное пространство клиента.

  2. топ онлайн казино без верификации Несмотря на кажущуюся идиллию сфера анонимных казино несет в себе значительные риски проистекающие из самой её природы. Отсутствие лицензии от авторитетного регулятора такого как MGA UKGC Curacao eGaming означает что у игрока практически нет рычагов воздействия в случае возникновения конфликта с администрацией. Если в лицензированном казино можно апеллировать к регулятору который может наложить штраф или отозвать лицензию то в анонимном пространстве единственной гарантией честности остается репутация самой площадки отслеживаемая на специализированных форумах и в отзовиках. Другой критический риск — повышенная вероятность столкнуться с нечестными игровыми автоматами где заявленный RTP возврат к игроку не соответствует реальному. Отсутствие внешнего аудита со стороны независимых тестирующих организаций как eCOGRA оставляет этот вопрос на совести оператора.

  3. список казино без верификации Онлайн казино без верификации предлагают удобство и скорость начала игры а также анонимность что привлекает многих игроков. Однако такие площадки несут в себе определённые риски связанные с безопасностью юридическими аспектами и ограничениями по выплатам. Перед тем как начать играть важно взвесить все «за» и «против» а также выбирать только проверенные и лицензированные казино

  4. топ 10 онлайн казино без верификации В казино без верификации игроки могут начать игру сразу после регистрации иногда даже без создания полноценного аккаунта — например через вход по номеру телефона или с помощью электронного кошелька.

  5. рейтинг казино без верификации В последние годы онлайн-казино приобрели огромную популярность среди любителей азартных игр. Одним из трендов в индустрии стали онлайн казино без верификации — площадки где игроки могут начать играть без необходимости проходить длительную процедуру подтверждения личности. В этой статье разберём что такое казино без верификации как они работают а также их преимущества и риски.

Leave a Reply

Your email address will not be published. Required fields are marked *

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>