[
https://issues.apache.org/jira/browse/SLING-5017?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=14742968#comment-14742968
]
Carsten Ziegeler commented on SLING-5017:
-----------------------------------------
There are a lot of these situations - moving is one of them, changes to
properties is another etc. In addition there might not be a 1:1 mapping between
the node path and the resource path, resources might be decorated or otherwise
wrapped.
The code doing the modifications (like the move) knows what it's doing, it has
to clearly document this and what clients need to expect. This is the only way
I see to solve the problem. Otherwise we get a solution which is slightly
better but still does not cover all cases; so I think it's far better to not
start going this direction at all.
Caching of some things is in many cases a necessity for performance -
unfortunately that's a fact.
The request keeping the resource which was targetted is a good thing and the
app should know that once someone moves this resource, it's not the same
anymore.
Again, there might be situations where it looks pretty easy to fix, but from
that fix arise at least two situations where this will cause trouble.
> Moving a JCR node not reflected in JcrNodeResource
> --------------------------------------------------
>
> Key: SLING-5017
> URL: https://issues.apache.org/jira/browse/SLING-5017
> Project: Sling
> Issue Type: Bug
> Components: JCR
> Reporter: Alexander Klimetschek
>
> When moving a JCR node via the JCR API behind a resource, Resource.getPath()
> and Resource.getName() will still return the old path and name:
> {code:java}
> // e.g. "/some/oldname"
> Resource resource = request.getResource();
> // move via JCR API (no move available in resource API)
> Node node = resource.adaptTo(Node.class);
> node.getSession().move(node.getPath(), node.getParent().getPath() +
> "newname");
> node.getSession().save();
> resource.getName(); // returns "oldname"
> resource.getPath(); // returns "/some/oldname"
> {code}
> This is because the path is [cached in
> JcrItemResource|https://github.com/apache/sling/blob/trunk/bundles/jcr/resource/src/main/java/org/apache/sling/jcr/resource/internal/helper/jcr/JcrItemResource.java#L83]
> and it uses the getPath() and [getName() implementation of
> AbstractResource|https://github.com/apache/sling/blob/trunk/bundles/api/src/main/java/org/apache/sling/api/resource/AbstractResource.java#L53]
> which are based on the cached path.
> To ensure the correct transient JCR semantics, the resource should pass
> getPath() and getName() through to the underlying Node (respectively Item).
--
This message was sent by Atlassian JIRA
(v6.3.4#6332)