Ich benutze Karaf (2.4. * & 4.0. *) Für die letzten zwei Jahre in verschiedenen Missionen und jedes Mal, wenn ich konfrontiert Caching-Problem mit API-Bundles, wenn es um die Deinstallation/Installation geht.Karaf: Empfohlene Möglichkeit, API-Paket zu deinstallieren/zu installieren, und wie Ghost Bundle-Auflösung zu vermeiden
Lassen Sie uns das folgende Szenario vor:
- ich installieren (1) Service-api/1.0.0, Export com.service.api
- installieren I (2) Service-core/1.0.0 , die com.service.api importiert
- Ich deinstalliere Service-API/1.0.0.
- Ich installiere (3) Service-API/1.1.0, die neue Schnittstellen hinzufügt.
Das unterschiedliche Verhalten tritt auf, wenn ich Bündel verwenden: Installieren -s Bundles zu installieren, deinstallieren Sie sie deinstallieren:
Die -Core nicht immer gestoppt. Tatsächlich benutzt er eine zwischengespeicherte Version von Service-API. Ich kann sogar die Bündel-ID (1) sehen, wenn ich einen Import -i (2) mache. Ein "resolve (2)" löst das Problem nicht, nur die Tatsache, "stop (2)" dann startet es wieder.
Wenn ich Service-API/1.1.0 installiere, tritt der Bug in 3 immer noch auf und mein Service-Core benutzt wieder den alten -api. Das große Problem ist, wenn ich eine neue Service-Seife installiere, wird es das Bündel (3) verwenden, während das (2) das (1) verwendet, und so schafft es einen Konflikt zwischen dem Klassenlader.
Ich kann keine Ressource auf dieser Angelegenheit im Internet finden, und ich habe versucht, Equinox & Felix und ich sehe keine Lösung für dieses Problem. Ist Paket: installieren Sie die gute Möglichkeit, Paket zu installieren? Ist die Verwendung von Deploy eine bessere Lösung?
Bonus: In der OSGI-Spezifikation sollte ein Bundle erst deinstalliert werden, wenn alle Verweise freigegeben sind, aber in Karaf deinstalliert sich das Bundle direkt selbst. Könnte es die Ursache des oben beschriebenen Problems sein?
Vielen Dank für die Antwort. Habe das Dokument zur Deinstallation gefunden, das es erklärt: https://osgi.org/javadoc/r4v43/core/org/osgi/framework/Bundle.html#uninstall(). –