Marcel Reutegger wrote:

I agree with you that this not intuitive but returning a node with the persistent state is IMO worse.

Let say you have a node A. Then you set property p which gives you A' (the transiently modified A). Then you query the workspace for nodes with property p and the value you just set. The query would then return node A. Now you modify that very same node instance and set property q to another value. Will this result in A''? What happens to A'? What happens if you call refresh() on A'' will it also refresh A'? What will be persisted if you call Session.save(), A' or A'' or modifications from both? Assuming it were possible that you *can* save just A', does a save on A'' throw a InvalidItemStateException? If I had the time I could probably go one for minutes and write down more of those tricky questions.
If I understood you correctly:
  1) query repository for node with property P=steve
  2) got node A with property P=steve
  3) set node A property P=john (making it transient)
  4) query repository for node with property P=john
  5) got node A (transient) with property P=john
  6) set property Q=test

What you missed is that every time query will return the same transient state, so no A' and A'' will ever exist, and node A persisted with all changes.

If query return persistent state only you will see a bit different behavior.
  1) query repo for node with property P=steve
  2) got node A with property P=steve
  3) set node A property P=john (making it transient)
  4) query repository for node with property P=john
  5) got nothing
  6) query repo for node with property P=steve
  7) got node A' (since A is a transient at this moment) with property P=steve

However there is one thing I never really paid attention to so far: while the method QueryResult.getNodes() returns items that reflect the transient changes of the session, QueryResult.getRows() does not have to and probably should not reflect transient changes. I think the current spec does not really mention whether values of transient properties or persisted properties are returned. Since a JCR Row does not return JCR Items but only JCR Values which are not attached to Items the Row should return the values of the persistent properties. This is currently not the case in Jackrabbit. But as mentioned before it is not clearly specified.
Thank you for pointing it out. It is one more reason to make sure that isolation level *must* be defined in the spec and impl. should obey it.

--
Ivan Latysh
[EMAIL PROTECTED]

Reply via email to