...
Panel |
---|
Handling a Concurrent Update SituationThere are three approaches to handling a concurrent update situation:
Unless there's a clear business requirement for the merge option, I think we need to take the second approach, "first commit wins". In order to pursue this approach, we do need to have a mechanism for detecting concurrent updates. Which leads to... |
...
Panel | |||||
---|---|---|---|---|---|
Chosen SolutionFor Education Systems web apps we have decided to use detection option 1 - passing the version number to the JSP in the GET request, and moving the version number into the retrieved Hibernate entity during the POST request. Hibernate itself will then take care of checking version number on update. If a concurrency problem is encountered, Spring should throw a org.springframework.orm.hibernate3.HibernateOptimisticLockingFailureException. This exception should be intercepted by the web app and an appropriate UI action should take place (for example, forwarding to an error page, or displaying a message on the current page). There is a simple web app demonstrating this scheme. It uses an in-memory H2 database so should be self-contained :
Also there is a non-web project that uses a unit test \ [TestConcurrency.testConcurrentUpdate()\] to illustrate the concurrent update situation:
NOTE: if the web page displays multiple objects that can be updated, the version numbers of all the objects must be included in the JSP, and must all be applied to the relevant entity objects when the form data is posted. |
...