2016-06-20 18 views
3

Ich verwende OSGI-Konfigurationsdateien, um die Konfiguration für verschiedene Umgebungen zu definieren, wie in OSGI Configuration angegeben. Ich habe Konfigurationen für mehrere Laufmodi, die im selben Repository gespeichert sind. In der Dokumentation wirdWelche Konfiguration angewendet wird, wenn die Anzahl übereinstimmender Laufmodi gleich ist

„Wenn mehrere Konfigurationen für die gleiche PID anwendbar sind, die Konfiguration mit der höchsten Anzahl an passenden Lauf Modi angewendet wird.“

Was ist der Mechanismus, wenn mehrere Konfigurationen für die gleiche PID anwendbar sind, und zwei oder mehr Konfigurationen sind gebunden für die höchste Anzahl von Run-Modus passend? Welcher wird angewendet?

+1

Gute Frage. Ich frage mich auch, ob es einen Unterschied macht, ob '/ apps/[your-site]/config' ein' sling: Folder' oder ein 'sling: OrderedFolder' ist. – anotherdave

Antwort

3

Die Reihenfolge oder OSGi-Konfiguration wird von Apache Sling gehandhabt. Sling hat ein System, das die Priorität für Installable Resources bestimmt, die OSGi-Konfigurationen enthält.

Standardmäßig ist die leistungsstärkste Komponente zur Berechnung der Priorität der Stammordner - /apps vs /libs. Sehen Sie die JcrInstaller und ihre Konfiguration in Ihrem localhost um http://localhost:4502/system/console/configMgr/org.apache.sling.installer.provider.jcr.impl.JcrInstaller. Der Unterschied zwischen den /libs und /apps "Punkten" ist groß bei 100 ({"/libs:100", "/apps:200"}).

Nachdem die Root-Priorität bestimmt wurde, werden die Sling-Run-Modi addiert. Siehe org.apache.sling.installer.provider.jcr.impl.FolderNameFilter#getPriority. Jeder Laufmodus wird unabhängig von der Reihenfolge mit 1 "Punkt" bewertet. An diesem Punkt, wenn Sie beispielsweise die Modi alpha und bravo ausgeführt haben, ist config.alpha.bravo gleich config.bravo.alpha.

Priorität betrachtet dann bestimmte Dinge wie den Ressourcenstatus und ob die Ressource installiert ist oder nicht und ob die Ressource eine SNAPSHOT Version ist, die wahrscheinlich mehr auf Pakete als Konfigurationen in Ihrem Projekt anwenden wird. Letztendlich wird der Vergleich der OSGi-Konfigurationen mit einem lexikografischen String-Vergleich der URLs durchgeführt. Zurück zu unserem Beispiel, an dieser Stelle hat config.alpha.bravo eine höhere Priorität als config.bravo.alpha.

Sollten die OSGi-Konfigurationen lexikographisch gleich sein, ist der endgültige Vergleich ein MD5-Hash des Digest. Siehe org.apache.sling.installer.provider.jcr.impl.ConfigNodeconverter#computeDigest.

Siehe die vollständige Vergleichsfunktion unter org.apache.sling.installer.core.impl.RegisteredResourceImpl#compare.

+0

Danke für die umfassende Antwort mit Links! – Shawn