当匹配的运行模式数相同时应用哪个配置

时间:2016-06-20 21:36:42

标签: osgi cq5 aem sling

我正在使用OSGI配置文件来定义不同环境的配置,如OSGI Configuration中所述。我有多个运行模式的配置保存在同一个存储库中。文档说明

  

“如果同一PID的多个配置适用,则   具有最高匹配运行模式的配置是   应用“。

如果同一PID的多个配置适用且两个或多个配置绑定以获得最多匹配运行模式,那么机制是什么?哪一个被应用?

1 个答案:

答案 0 :(得分:9)

订单或OSGi配置由Apache Sling处理。 Sling有一个系统可以确定Installable Resources的优先级,其中包括OSGi配置。

开箱即用,计算优先级的最强大组件是根文件夹 - /apps vs /libs。请在JcrInstaller的localhost中查看http://localhost:4502/system/console/configMgr/org.apache.sling.installer.provider.jcr.impl.JcrInstaller及其配置。 /libs/apps“点”之间的差异很大,为100({"/libs:100", "/apps:200"})。

确定根优先级后,将添加Sling运行模式。见org.apache.sling.installer.provider.jcr.impl.FolderNameFilter#getPriority。无论顺序如何,每个运行模式的值都是1“点”。例如,此时如果您运行模式alphabravo,则config.alpha.bravo等于config.bravo.alpha

然后,优先级会查看某些内容,例如资源状态以及资源是否已安装以及资源是否为SNAPSHOT版本,该版本可能会比项目中的配置更多地应用于捆绑包。最终,OSGi配置的比较将归结为URL的字典字符串比较。回到我们的示例,此时config.alpha.bravo的优先级高于config.bravo.alpha

如果OSGi配置在字典上相等,则最终比较是摘要的MD5哈希值。请参阅org.apache.sling.installer.provider.jcr.impl.ConfigNodeconverter#computeDigest

请参阅org.apache.sling.installer.core.impl.RegisteredResourceImpl#compare的完整比较功能。