我一直在Internet上闲逛一段时间,以寻找有关配置Sling Resource Resolver映射的更多信息。根据我在网上发现的内容和经验,目前在AEM中有两种方法可以实现此目的。


通过org.apache.sling.jcr.resource.internal.JcrResourceResolverFactoryImpl
OSGi属性resource.resolver.mapping
通过org.apache.sling.jcr.resource.internal.JcrResourceResolverFactoryImpl OSGI属性指定的资源resource.resolver.map.location


Mappings for Resource Resolution上的Sling文档和Resource Mapping上的AEM文档似乎都建议使用方法(2),该方法利用属性resource.resolver.map.location,因为这是唯一的方法文档解释。

我很想解决这个问题,并对这个话题有更好的理解。我认为有关此主题的大多数在线资源都缺乏深入的解释两种方法的差异以及使用一种方法与另一种方法的好处。非常欢迎您提供有关此主题的更详细的见解,解释和实用插图。

谢谢

最佳答案

我也无法给出答案。但是,如果您查看MapEntries#doUpdateConfiguration中的代码(第428行),则可以看到以下条目最终合并到了相同的内部lookup-map中。因此从技术上讲没有区别。


resource.resolver.virtual
resource.resolver.mapping
resource.resolver.map.location


请参阅以下代码:
https://github.com/apache/sling-org-apache-sling-resourceresolver/blob/master/src/main/java/org/apache/sling/resourceresolver/impl/mapping/MapEntries.java



我的理解

据我了解,至少从第CQ 5天起,推荐的方法是使用resource.resolver.map.location。这是最灵活的方式。其他人可能出于历史原因仍在那儿。



大型多品牌/多团队项目

/etc/map的另一个好理由是,拥有多个团队和品牌的大型项目必须避免使用全局OSGi配置(考虑到类似联合利华的事情)。因此,许多其他OSGi配置还有另一种配置方式:


通过配置工厂(Sling服务用户映射器/ Sling服务用户映射器修订)
通过每个服务的配置(Sling身份验证服务中的sling.auth.requirements)
或通过全局内容结构(您的带有/ etc / maps的示例)


在这种情况下,总是喜欢使用变体,它允许多个团队独立提供他们的配置部分。在您的情况下,团队可以在/etc/map下提供不同的子树



PS:我什至不确定,正则表达式是否可以在OSGi配置中使用。这也代表/etc/maps

09-05 20:04