java - AEM Sling 资源解析器映射方法
问题描述
我在 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 指定的资源
Sling 关于资源解析的映射的文档和关于资源映射的 AEM 文档似乎都建议使用使用属性resource.resolver.map.location的方法 (2),因为它是唯一的方法由文档解释。
我很想澄清这一点,并对该主题有更好的理解。我认为大多数关于这个主题的在线资源在解释这两种方法的差异以及使用一种方法与另一种方法的好处方面缺乏深度。非常欢迎关于这个主题的更详细的见解、解释和实际插图。
谢谢
解决方案
我也无法给出答案。但是,如果您查看MapEntries#doUpdateConfiguration
(第 428 行)的代码,那么您可以看到以下条目最终合并到相同的内部查找映射中。所以在技术上没有区别。
resource.resolver.virtual
resource.resolver.mapping
resource.resolver.map.location
我的理解
据我所知,至少从 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
了。
推荐阅读
- sql - JPA/SQL 获取一周数据
- python - scikit learn中的SVC vs LinearSVC:损失函数的区别
- spartacus-storefront - Spartacus 'ErrorPageTemplate' 类添加到 app-root
- javascript - 使用控制台代码等待,直到页面上的计时器剩余 10 秒
- json - Neo4j 形成 json 数组
- php - AJAX - 从包含的 AJAX PHP foreach 中删除 MySQL 中的一行
- html - 如何将 ngOptionValue 设置为我的 ng 选项?
- r - 比较两列,如果一列等于 NA,则使用另一列更新它
- reactjs - 如何在 reactjs 中不渲染组件的特定部分
- c# - 无法在 C# 中使用“Microsoft.CrmSdk.XrmTooling.CoreAssembly”连接 Dynamics 365 统一接口