Dan Haywood created ISIS-1155:
---------------------------------

             Summary: validate() vetoing - requiring rollback via the memento 
when editing - causes a ConcurrencyException to occur.
                 Key: ISIS-1155
                 URL: https://issues.apache.org/jira/browse/ISIS-1155
             Project: Isis
          Issue Type: Bug
          Components: Core
    Affects Versions: core-1.8.0
            Reporter: Dan Haywood
            Assignee: Dan Haywood
            Priority: Minor
             Fix For: 1.9.0


For example, in the isisaddons' todoapp this shows up as an issue if mark an 
item (with a non-null dueBy) as done, then attempt to modify the dueBy date via 
edit.  What we see is no message shown, followed then by an invalid concurrency 
exception.

With the simpleapp it's possible to get a similar behaviour.

~~~
On analysis, there are several issues:
- the concurrency exception is caused by the todo item becoming dirty when the 
change is applied (prior to being rolled back via Isis' memento); the todo 
item's adapter's Oid's version is updated as a side-effect of this (the 
postStore lifecycle callback), and thereafter we see the concurrency exception
- this can in some cases be suppressed (eg for the simpleapp) by performing a 
rollback of the xactn if the validate() has failed... this should be done anyway
- however in more complex cases (such as todoapp) the updating of the 
setVersion happens during the "apply()" of changes, which will still trigger 
the subsequent concurrency exception
- the root cause here is that the memento being taken does not also reinstate 
the version of the target object.
- the wicket viewer's EntityPropertiesForm was not passing through an 
AjaxRequestTarget for repainting [nb: this may be a red-herring, but fixing 
this does no harm]

So, to sum up the fixes:
- abort the xactn if validate() vetoes the save
- improve the memento so that version is reinstated
- pass through AjaxRequestTarget

~~~~~~~~

Note that there is a related, not yet tackled issue... namely that validate() 
isn't enforced for action invocations, only when modifying an object by 
editing.  Have raised ISIS-1156 for this.



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

Reply via email to