Hi,

Let's keep JCR-1552 focused on the setProperty semantics. The addNode
method is a whole different issue so I'm taking it back to the mailing
list.

On Thu, Apr 24, 2008 at 5:19 PM, Thomas Mueller (JIRA) <[EMAIL PROTECTED]> 
wrote:
> When concurrently updating or adding nodes (so far I was talking about 
> properties only),
> the same algorithm can be used. One problem is the following use case:
>
>  Node b = a.hasNode(x) ? a.getNode(x) : a.addNode(x);
>
> With multiple threads / sessions you end up with same name siblings sometimes.
> That's probably not what the user wants.

The best solution IMHO is not to allow SNS in the first place. For
example this won't be a problem within an nt:folder node.

> I don't know if there is a solution for nodes without using locks.

Yes, you can use a JCR lock on the parent node to avoid SNSs in such
cases, but IMHO a node type constraint is better in this case.

> For SQL databases, one solution is using the MERGE statement (sometimes
> called UPSERT from INSERT or UPDATE).

Another solution would be a custom getOrAddNode() method, like the one
I've implemented in [1]. It's not a perfect solution, but works pretty
well in practice.

[1] 
https://svn.apache.org/repos/asf/james/server/trunk/jcr-backend-function/src/main/java/org/apache/james/jcr/JCRStoreBean.java

BR,

Jukka Zitting

Reply via email to