我正在使用OSGI配置文件来定义不同环境的配置,如OSGI Configuration中所指定。我在同一存储库中保存了多种运行模式的配置。文档说明
“如果适用于同一PID的多种配置,则将应用具有最高匹配运行模式数量的配置。”
如果适用于同一PID的多种配置,并且为了获得最大数量的匹配运行模式而捆绑了两种或多种配置,该机制是什么?申请哪一个?
订单或OSGi配置由Apache Sling处理。Sling有一个系统来确定可安装资源的优先级,其中包括OSGi配置。
开箱即用,计算优先级最强大的组件是根文件夹/apps-vs /libs。请参阅http:// localhost:4502 / system / console / configMgr / org.apache.sling.installer.provider.jcr.impl.JcrInstaller上的 localhost中的JcrInstaller及其配置。点与“点” 之间的差异很大,为100()。/libs/apps{"/libs:100", "/apps:200"}
确定根优先级后,将合并Sling运行模式。请参阅org.apache.sling.installer.provider.jcr.impl.FolderNameFilter#getPriority。不管顺序如何,每种运行模式的值都为1个“点”。例如,在这一点上,如果你已经运行模式alpha和bravo,config.alpha.bravo等于config.bravo.alpha。
然后,优先级将研究某些事情,例如资源状态,是否已安装资源以及资源是否是SNAPSHOT版本,该版本可能比项目中的配置更适用于捆绑软件。最终,OSGi配置的比较将归结为URL的字典字符串比较。回到我们的示例,此时的config.alpha.bravo优先级高于config.bravo.alpha。
如果OSGi配置在字典上相等,则最后的比较是Digest的MD5哈希。请参阅org.apache.sling.installer.provider.jcr.impl.ConfigNodeconverter#computeDigest。
请参见org.apache.sling.installer.core.impl.RegisteredResourceImpl#compare的完整比较功能。