首页 > 解决方案 > AEM Sling 资源解析器映射方法

问题描述

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

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

Sling 关于资源解析的映射的文档和关于资源映射的 AEM 文档似乎都建议使用使用属性resource.resolver.map.location的方法 (2),因为它是唯一的方法由文档解释。

我很想澄清这一点,并对该主题有更好的理解。我认为大多数关于这个主题的在线资源在解释这两种方法的差异以及使用一种方法与另一种方法的好处方面缺乏深度。非常欢迎关于这个主题的更详细的见解、解释和实际插图。

谢谢

标签: javaconfigurationosgiaemsling

解决方案


我也无法给出答案。但是,如果您查看MapEntries#doUpdateConfiguration(第 428 行)的代码,那么您可以看到以下条目最终合并到相同的内部查找映射中。所以在技术上没有区别。

  • 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 Service User Mapper / Sling Service User Mapper Amendment)
  • 通过每个服务配置(Sling 身份验证服务中的 sling.auth.requirements)
  • 或通过全局内容结构(您的 /etc/maps 示例)

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


PS:我什至不确定,如果正则表达式在 OSGi 配置中工作。这也说明/etc/maps了。


推荐阅读