Author Login
Post Reply
Also posted to Struts 2 forum on Nabble - apologies if this causes a
duplicate posting.
Planning to use Struts 2 and JPA (OpenJPA) in a new application development
and am spending some time to review options of how it should be done.
There will be a large CRUD component within the application so I am working
on the patterns to use in those scenarios.
Following the CRUD examples in the Struts 2 In Action (and other sources), I
have been experimenting with the ParamsPrepareParams stack. Using the
pattern shown in the Struts 2 in Action book, the following is my
understanding of the relevant points in the execution path.
- when an "edit" (save) action is called the prepare() method retrieves the
model object from the database (because there is an ID in the HTTP Request
parameters).
- the Params interceptor is invoked then loads the values from the HTTP
Request parameters. None of the documentation describes why this is done, I
assume the reason is to ensure that the Model object is fully populated
(not all of the attributes may be on the UI and thus in the HTTP Request
parameters).
- the action is then invoked - and persists the updated Model object
(delegated to a service)
From what I can see, this causes a conflicts with the use of a version
attribute for Optimistic Locking on the database.
When the updates from the HTTP Request parameters are merged in with a newly
retrieved model object the version number/timestamp is the value retrieved
from the database. Even if that row had been updated by another user/thread
since being retrieved the first time, the version checking would not catch
the conflicting updates becuase it has been refreshed to the latest value in
the DB.
It seems a fairly fundamental and obvious problem so I am worried that I am
mis-understanding the pattern described in the book (and repeated in other
samples).
I know that the examples in the book are simplified, but I would expect
something like this to be commented on in the text.
Am I missing something ??? Can anybody confirm or contradict my reasoning?
--
Sent from the Struts - User mailing list archive at Nabble.com.
---------------------------------------------------------------------
To unsubscribe, e-mail: user-unsubscribe@(protected)
For additional commands, e-mail: user-help@(protected)