You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@sling.apache.org by "Carsten Ziegeler (Jira)" <ji...@apache.org> on 2021/11/02 06:28:00 UTC

[jira] [Updated] (SLING-10899) Result of JcrNodeResource#adaptTo(ValueMap.class) should be cached

     [ https://issues.apache.org/jira/browse/SLING-10899?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

Carsten Ziegeler updated SLING-10899:
-------------------------------------
    Fix Version/s: JCR Resource 3.0.24

> Result of JcrNodeResource#adaptTo(ValueMap.class) should be cached
> ------------------------------------------------------------------
>
>                 Key: SLING-10899
>                 URL: https://issues.apache.org/jira/browse/SLING-10899
>             Project: Sling
>          Issue Type: Improvement
>          Components: JCR
>    Affects Versions: JCR Resource 3.0.22
>            Reporter: Henry Kuijpers
>            Priority: Major
>             Fix For: JCR Resource 3.0.24
>
>
> I was performance testing our application. There is a specific part of the code where we have a set of ~500 resources and we sort them based on a few properties of the resources. Multiple properties are used (which results in multiple calls to getValueMap). The sorting is done using a comparator, so the logic that determines the order is accessed numerous times.
> We've seen quite a decrease in performance when doing this with Resources that are of type JcrNodeResource. Turns out that the result of getValueMap (or adaptTo((Value)Map.class)) is not cached.
> As you can see in the adaptTo()-method implementation: https://github.com/apache/sling-org-apache-sling-jcr-resource/blob/master/src/main/java/org/apache/sling/jcr/resource/internal/helper/jcr/JcrNodeResource.java#L136 this call bypasses the AdapterFactory framework and also bypasses any caching that happens over there.
> What's even more unfortunate, is that JcrValueMap is implementing caching via https://github.com/apache/sling-org-apache-sling-jcr-resource/blob/6e13f4d315ddf2804d2e16c55faee18e805b618e/src/main/java/org/apache/sling/jcr/resource/internal/JcrValueMap.java#L49 . That caching is not leveraged properly, because every call to getValueMap returns a new JcrValueMap, instead of reusing a previously created one.
> One change that can be done is maybe converting the logic inside the adaptTo()-method to a dedicated AdapterFactory implementation, so that caching is done by default?



--
This message was sent by Atlassian Jira
(v8.3.4#803005)