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.

12 thoughts on “Integration testing transactions and optimistic locking with Spring and JUnit

  1. They also compared diabetes risk in current aromatase inhibitor users versus nonusers priligy seratonin The participants will be randomly assigned to electroacupuncture group or sham electroacupuncture group in a 1 1 ratio

  2. priligy tablets price Though one American has brought a few bottles of Mamma Beer into the U

  3. priligy en france The increased pressure is transmitted backward into the left atrium in diastole resulting in left atrial enlargement and if severe enough in left heart failure

  4. priligy for sale Furosemide tablets that have been exposed to light may be discolored and should not be used

  5. Furthermore despite the overall findings from the meta analysis women with disease that spread to four or more lymph nodes did not appear to derive benefit from aromatase inhibitor treatment buy priligy online

  6. Ben Joseph E donde comprar priligy mexico prompts an instant answer from Ortiz One hundred percent yes

  7. The role of cytokines in hemolytic transfusion reactions priligy 30mg No effects on birth outcomes were reported in either study 16C

  8. priligy seratonin The mechanisms of action for these drugs are as follow 1 epinephrine binds to ОІ receptors that are not bound by the ОІ blocker thus activating adenyl cyclase through the G s protein resulting in the release of calcium via the adenosine triphosphate adenosine monophosphate AMP protein kinase A pathway 13; 2 glucagon acts directly on the G s protein foregoing the ОІ receptors entirely 13; 3 phosphodiesterase inhibitors prevent the degradation of cyclic AMP 13; 4 insulin allows the uptake of carbohydrates energy it is anti inflammatory and is associated with potassium influx that results in prolonged repolarization allowing calcium channels to remain open for a longer time 13; and 5 vasopressin works through the V1A receptor where its activity is mediated by G proteins which stimulate a phosphatidylinositol calcium secondary messenger system 26

  9. buy priligy 60 mg Importantly RBM39 3xFLAG protein is fully susceptible to indisulam triggered degradation FIG

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>