Bitte verwenden Sie System.exit (0) nicht, um ein OSGi-Framework herunterzufahren. Sie sollten dazu das Bündel mit der ID 0, dem System-Bundle, anhalten. Auf diese Weise geben Sie allen Bündeln die Möglichkeit, ordnungsgemäß herunterzufahren (z. B. Ressourcen freizugeben).
Die OSGi-Spezifikation definiert Folgendes (Kernspezifikation, R4.x, 4.2.6 Stoppen eines Frameworks).
Die Abschaltung kann durch Stoppen des Systempakets [...] oder durch Aufruf der stop-Methode für das Framework-Objekt ausgelöst werden.
In diesem Kapitel wird eine detaillierte Beschreibung gegeben, was passiert, wenn ein Framework heruntergefahren wird.
Das Systembündel resp. das Framework-Objekt ist ebenfalls definiert (Kapitel 4.6 Das Systempaket):
Das System-Bundle ähnelt dem Framework-Objekt beim Start eines Frameworks, Implementierungen müssen jedoch nicht das gleiche Objekt für das Framework-Objekt und das System verwenden bündeln. Beide Objekte müssen jedoch die Paket-ID 0, den gleichen Speicherort und den symbolischen Namen des Pakets haben.
Die OSGi-Spezifikation ist auf der Website der OSGi Alliance (http://www.osgi.org/Specifications/HomePage) kostenlos verfügbar.
Der übliche Weg
bundlecontext.getBundle(0).stop();
das Bündel mit id = 0 ist das System-Bundle so weit ist das, was ich in meiner Antwort beschrieben habe. Dies ist das in den OSGi-Spezifikationen angegebene Verhalten, auch in der nächsten Version 4.2. Die nächste Veröffentlichung (4.2.) enthält den * optionalen * Start Level Service, mit dem die Start-Ebene von Bundles (und das Framework) gesteuert werden kann. – akr