[ https://issues.apache.org/jira/browse/SLING-11133?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Dirk Rudolph resolved SLING-11133. ---------------------------------- Resolution: Fixed > Cache model for its implementation type > --------------------------------------- > > Key: SLING-11133 > URL: https://issues.apache.org/jira/browse/SLING-11133 > Project: Sling > Issue Type: Improvement > Components: Sling Models > Reporter: Dirk Rudolph > Assignee: Dirk Rudolph > Priority: Major > Fix For: Models Implementation 1.5.2 > > Time Spent: 1.5h > Remaining Estimate: 0h > > Currently the ModelAdapterFactory caches a cacheable model for the requested > type only > [https://github.com/apache/sling-org-apache-sling-models-impl/blob/master/src/main/java/org/apache/sling/models/impl/ModelAdapterFactory.java#L430-L432] > {code:java} > if (result.wasSuccessful() && modelAnnotation.cache() && adaptableCache != > null) { > adaptableCache.put(requestedType, new > SoftReference<Object>(result.getValue())); > } > {code} > However, if a model is an adapter of multiple types an instance of it can > also be returned for more than just the requested type. > {code:java} > interface AdapterType1 {} > interface AdapterType2 {} > @Model(adaptables = Resource.class, adapterType={AdapterType1.class, > AdapterType2.class}, cache = true) > class Model implements AdapterType1, AdapterType2 {} > assertSame(resource.adaptTo(Model.class), > resouce.adaptTo(AdapterType1.class)); > assertSame(resource.adaptTo(AdapterType1.class), > resouce.adaptTo(AdapterType2.class)); > {code} > While it is not save to cache the model for all of its adapter types (see > SLING-11074), it is certainly save to cache the Model for its implementation > type. > In fact, when caching the Model for the implementation type, caching it for > the requested type is redundant. This is based on the assumption that the > {{org.apache.sling.models.impl.AdapterImplementations#lookup()}} always > returns the same implementation for given adapterType and adaptable. -- This message was sent by Atlassian Jira (v8.20.1#820001)