自定义框架功能旨在帮助减少非扩展区域的代码(如API)或内容(如叠加)中不易升级的违规。
自定义框架有两个组件:API Surface和内容分类。
在AEM的先前发行版中,许多API通过Uber Jar公开。 这些API中的一些并非客户使用的,但它们暴露在不同捆绑套件中支持AEM功能。 今后,Java API将标为“公共”或“私有”,向客户指示哪些API在升级环境中是安全的。 其他具体信息包括:
标记为Public
的Java API可以由自定义实现包使用和引用。
公共API将向后兼容兼容性包的安装。
兼容性软件包将包含兼容性Uber JAR,以确保向后兼容性
标为Private
的Java API仅供AEM内部捆绑包使用,不应由自定义捆绑包使用。
在这种情况下,Private
和Public
的概念不应与Java的公共类和私有类概念混淆。
AEM长期以来一直使用叠加和Sling Resource Merager的原则来允许客户扩展和自定义AEM功能。 为AEM控制台和UI提供支持的预定义功能存储在/libs中。 客户永远不得修改/libs下的任何内容,但可在/apps下添加其他内容,以覆盖和扩展在/libs中定义的功能(有关详细信息,请参阅使用叠加进行开发)。 当将AEM升级为/libs中的内容时,这仍然会引起许多问题,这些问题可能会发生变化,导致叠加功能以意外方式中断。 客户还可以通过sling:resourceSuperType
继承扩展AEM组件,或直接通过sling:resourceType引用/libs中的组件。 类似的升级问题可能与引用和覆盖用例有关。
为了使客户更安全、更容易地了解/libs的哪些区域是安全的,并且将/libs中的内容与以下混音进行了分类:
公共(granite:PublicArea) -将节点定义为公共,以便它可以覆盖、继承() sling:resourceSuperType
或直接() sling:resourceType
使用。添加兼容性包后,/libs下标为“公共”的节点将安全升级。 一般而言,客户只应利用标记为“公共”的节点。
摘要(granite:AbstractArea) -将节点定义为摘要。节点可以覆盖或继承(sling:resourceSupertype
),但不能直接使用(sling:resourceType
)。
Final(granite:FinalArea) -将节点定义为final。分类为最终理想状态的节点不应被覆盖或继承。 最终节点可以直接通过sling:resourceType
使用。 默认情况下,最终节点下的子节点被视为内部节点。
内部(granite:InternalArea) *- *将节点定义为内部节点。分类为内部理想状态的节点不应被覆盖、继承或直接使用。 这些节点仅用于AEM的内部功能
无注释 -节点根据树层次继承分类。默认情况下,/ root为公共。 父节点分类为“内部”或“最终”的节点也被视为“内部”。
这些策略仅针对基于Sling搜索路径的机制实施。 /libs的其他区域(如客户端库)可标记为Internal
,但仍可与标准clientlib包含一起使用。 在这些情况下,客户应继续遵守内部分类。
在CRXDE Lite中应用的混合将显示标记为INTERNAL
为灰显的内容节点和树。 对于FINAL
,图标将灰显。 这些节点的子项也将显示为灰色。 这两种情况下均禁用“叠加节点”功能。
公共
最终
内部
内容运行状况检查
自AEM 6.5起,Adobe建议使用模式检测器检测内容访问违规。 模式检测器报告更加详细,检测问题更多,降低误报概率。
有关详细信息,请参阅使用模式检测器评估升级复杂性。
AEM 6.5附带运行状况检查,以在以与内容分类不一致的方式使用覆盖或引用的内容时提醒客户。
Sling/Granite内容访问检查是一项新的运行状况检查,它监视存储库,以查看客户代码是否错误地访问AEM中的受保护节点。
此操作将扫描/apps,通常需要几秒才能完成。
要访问此新的运行状况检查,您需要执行以下操作:
从AEM主屏幕,导航到工具>操作>运行状况报告
单击Sling/Granite内容访问检查,如下所示:
扫描完成后,将显示一列表警告,通知未正确引用的受保护节点的最终用户:
修复违规后,将返回绿色状态:
运行状况检查显示由后台服务收集的信息,当所有Sling搜索路径中使用叠加或资源类型时,后台服务会异步检查该信息。 如果内容混合使用不正确,则报告违规。