Frage

Ich versuche, auf den Kontext des OSGI-Bundles in einer Java-Anwendung zuzugreifen, um einen laufenden Dienst zu erhalten.

ctx.getServiceReference(ReceiverService.class.getName());

Ich habe es damit versucht:

BundleContext ctx = FrameworkUtil.getBundle(ReceiverService.class).getBundleContext();

aber es gibt null zurück

Ich initiiere Knopflerfish im Grafikmodus mit vorinstallierten Bundles und starte das SenderSevice-Bundle und das ReceiveService-Bundle.Ich möchte auf ReceiveService zugreifen, um die empfangenen Objekte in einer Java-Anwendung zu verwenden.Daher muss ich auf den Bundle-Kontext von ReceiveService zugreifen.

War es hilfreich?

Lösung

Woher wird die Schnittstelle „ReceiveService“ geladen?Wird es aus einem Bundle exportiert?Leider kann das System-Bundle keine Pakete aus gewöhnlichen Bundles importieren.

Da Sie OSGi einbetten und in Form von Diensten zwischen der äußeren Anwendung und dem inneren Framework kommunizieren, müssen die Schnittstellenpakete von der äußeren Anwendung geladen und mit exportiert werden org.osgi.framework.system.packages.extra Eigentum.Diese Eigenschaft wird über die Karte übergeben, die Sie bereitstellen FrameworkFactory.newFramework().Dann können die gewöhnlichen Bundles die Serviceschnittstelle importieren und den Service veröffentlichen.

Um auf a zuzugreifen BundleContext Von der äußeren Anwendung müssen Sie die verwenden getBundleContext() Methode auf der Framework Objekt.Dies gibt die zurück BundleContext des Systembündels.

Andere Tipps

Sie scheinen ein in eine Java-Anwendung eingebettetes OSGi-Framework zu verwenden – wie haben Sie dieses Framework gestartet?

Der Standardweg wäre

Framework framework = FrameworkFactory.newFramework(props);

Dann können Sie den System-Bundle-Kontext von abrufen framework Beispiel:

BundleContext ctx = framework.getBundleContext();

In deinem Beispiel, ReceiverService wurde höchstwahrscheinlich vom Anwendungs-Klassenlader und nicht von einem Bundle-Klassenlader geladen FrameworkUtil Das Bundle, das diese Klasse geladen hat, kann nicht ermittelt werden.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top