Priorisieren der OSGi-Dienstauswahl in einem Container, wenn mehrere Implementierungen vorhanden sind

Ich spiele mit OSGi und habe ein paar Bundles. Bundle A und B enthalten beide einen registrierten Dienst, der eine einzelne Schnittstelle implementiert. Das dritte Bündel C enthält Code zum Nachschlagen eines Dienstes, der die zuvor erwähnte Schnittstelle implementiert. Die Bundles A und B haben unterschiedliche Versionsnummern. Es scheint jedoch, dass C den Dienst ab dem ersten gestarteten Bundle abruft. Ich habe die Startebene geändert, um das Richtige zu tun, aber die Version wird nur verwendet, um zu akzeptieren, welcher Service zurückgegeben wird, anstatt zu bestellen.

   A version 1.0 start level 1
   B version 1.1 start level 2
   C requires both bundles, start level 3

Im obigen Beispiel erhält C immer den Service von A, obwohl B eine höhere Bundle-Version hat. Wenn ich jedoch die Startebene umschalte, sodass B vor A startet, sieht C den B-Dienst.

Ich habe die OSGi-Website durchsucht und es gibt keine eindeutige Erklärung, ob die Versionierung eines Bundles verwendet wird, um einen Dienst vor einem anderen zu priorisieren. Mein Verständnis scheint darauf hinzudeuten, dass die Startebene verwendet werden soll, um den Bundle-Start zu ordnen, damit Abhängigkeiten korrekt erfüllt werden können. Es scheint jedoch überlastet zu sein, sodass es auch die Priorität des Dienstes priorisiert. In Anbetracht der obigen Ausführungen ist es wahrscheinlich sinnvoll, die Bundle-Version nicht in der Auswahl zu verwenden, da die Versionsnummer nur eine Zahl relativ zu nichts ist.

Was ist der beste Weg, um einen Dienst vor dem anderen zu priorisieren, abgesehen vom Startlevel?

Antworten auf die Frage(3)

Ihre Antwort auf die Frage