Hi, I would try 1). I would not try 3) because the user wouldn't know which item conflicted (well he could parse the message, but that would be weird). Also, I would try to avoid a new API.
For the case 'double delete' another solution is possible. * session1 deleted node /test and does some other changes * session2 deleted node /test and does some other changes * session1 save (successful) * session2 save (fails: /test can't be deleted because it doesn't exist any more) 4): The microkernel could ignore delete operations on paths that don't currently exist. This is somewhat similar to what databases do: "delete from test where id=1" will be successful if there is no row with id 1. Or with JCR setProperty(..., null) for a non-existent property (which currently works fine). Regards, Thomas On 1/25/12 6:04 PM, "Michael Dürig" <[email protected]> wrote: > >Hi, > >In an earlier discussion (probably offline), we decided to not implement >Item.refresh() since it doesn't go well with the MVCC model jr3 is based >on. Furthermore, JCR doesn't have an Item.undo() method for undoing >changes. > >This may lead to problems when a Session.save() fails due to the >underlying Microkernel.commit failing because it detected a conflict. >Now there might be some transient changes (like deletions) which can't >be selectively undone by the user. So the user is left with a transient >space containing his changes but he can only discard them as a whole. >Not very satisfactory. > >Possible solutions: > >1) The Microkernel makes as much effort as possible to three way merge >changes. > >2) The user needs to do a session refresh with keep changes = true and >save again. > >3) Introduce a Item.undo method on the JCR API. > > >1) Mitigates the problem such that it only occurs rarely. > >2) Is really nothing more than moving the problem of the failed commit >due to a conflict from the Microkernel to the transient space: now the >transient space needs to do conflict resolution. > >3) Is what I think we should do. This enable the user to resolve his >conflicts selectively. > >Michael
