Tilmann Zäschke created JDO-747: ----------------------------------- Summary: Behavior of delete() with multiple concurrent Transactions Key: JDO-747 URL: https://issues.apache.org/jira/browse/JDO-747 Project: JDO Issue Type: Improvement Components: specification Affects Versions: JDO 3.1 Reporter: Tilmann Zäschke Priority: Minor
In the Spec I could not find any statement regarding on how a transaction should behave if an object is deleted in a different concurrent transaction. Related Sections are Section 5.8 (how different methods should behave for different object states) and Section 12.6.1 (the behavior of refresh() and related methods). For example I wonder about the following situations. Suppose I have two optimistic sessions, pm1 and pm2, both access the same object. pm1 deletes the object and commits. Then what happens in pm2 if: 1. pm2 deletes the object and tries to commit, should that work? It's wouldn't be a real conflict if both delete it. 2. pm2 modifies the object (make dirty) and calls refresh(). Should I get an ObjectNotFound exception? 3. pm2 deletes the object and calls |refresh()|. According to the spec, |refresh()| should not change the object's state. But should it still fail with |ObjectNotFound|? If refresh should fail, how can I ever recover from such a situation, because I can't undelete the object? Is there a common understanding how this should work? IF there an external definition JDO relies on, then I think a reference to an external document might useful. If not, should the Spec define concurrent behavior? -- This message was sent by Atlassian JIRA (v6.3.4#6332)