[ https://issues.apache.org/jira/browse/SLING-5017?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=14744100#comment-14744100 ]
Alexander Klimetschek edited comment on SLING-5017 at 9/14/15 7:40 PM: ----------------------------------------------------------------------- I see your points, but the workaround of refetching is extremely ugly in case of a move of the request resource: {code} // request start // ... do move ... // resource.getPath is cached after moving, use the underlying correct Node path to re-fetch it Node node = request.getResource().adaptTo(Node.class); Resource resource = request.getResourceResolver().getResource(node.getPath()); {code} was (Author: alexander.klimetschek): I see your points, but the workaround of refetching is extremely ugly in case of a move of the request resource: {code} // request start // ... do move ... // due to resouce.getPath cached after moving, use the underlying correct Node path to fetch it again Node node = request.getResource().adaptTo(Node.class); Resource resource = request.getResourceResolver().getResource(node.getPath()); {code} > 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)