Getting Hooked on Equinox - JAXenter

Getting Hooked on Equinox

Abb. 2: Der Aufbau des Base Framework Adaptors [2]

Um Equinox einzelne Hooks bekannt zu machen, müssen sie über so genannte HookConfigurators bzw. deren addHooks()-Methode bei der HookRegistry registriert werden. Dabei ist es ein geläufiges Pattern, dass konkrete Hooks sowohl ein spezielles Hook Interface als auch HookConfigurator implementieren und sich somit selbst registrieren.
Das führt zur nächsten Frage: Wie werden HookConfigurators von Equinox erkannt? Der eleganteste Weg führt über die Datei hookconfigurators.properties, die von Equinox im Root von Framework Extensions erwartet wird, und dort die Property hook.configurators. So kann eine Fragment Extension selbst angeben, welche HookConfigurators sie liefert. Über die System Properties osgi.hook.configurators.include bzw. osgi.hook.configurators.exclude können weitere bekannt gegeben bzw. vorhandene ausgeschlossen werden.

Ein Beispiel

Im nächsten Schritt soll die Theorie an einem einfachen Beispiel erläutert werden.
Die Framework Extension de.metafinanz.demo.equinox.extension enthält mit dem DemoHook einen AdaptorHook, der beim Starten und Stoppen der OSGi Runtime Trace Messages auf der Konsole ausgibt. Weiterhin implementiert DemoHook auch HookConfigurator, wobei er sich selbst registriert und dabei ebenfalls eine Trace Message ausgibt. In Listing 1 sehen wir, wie mit der ersten Methode das HookConfigurator Interface implementiert wird, indem das eigene Objekt bei der übergebenen HookRegistry angemeldet wird. Die restlichen Methoden erfüllen das Interface AdaptorHook.

Abb. 3: Beispiel für eine Framework Extension mit einem einfachen AdaptorHook.
public class DemoHook implements HookConfigurator, AdaptorHook {

    public void addHooks(final HookRegistry hookRegistry) {
        hookRegistry.addAdaptorHook(this);
        System.out.println("- DemoHook.addHooks()");
    }

    public void frameworkStart(final BundleContext context) {
        System.out.println("- DemoHook.frameworkStart()");
    }

    public void frameworkStop(final BundleContext context) {
        System.out.println("- DemoHook.frameworkStop()");
    }

    // Other AdaptorHook methods are implemented empty
    // and not shown here!
}

Um dieses Beispiel im Eclipse SDK auszuführen, ist es erforderlich, das System Bundle org.eclipse.osgi als Source in den Workspace zu importieren (im mitgelieferten Beispiel-Workspace bereits enthalten), damit die Framework Extension zur Laufzeit im selben Verzeichnis liegt wie das System Bundle (siehe oben). Zum Ausführen wird eine OSGi Framework Run Configuration (im mitgelieferten Beispiel-Workspace bereits enthalten) verwendet, welche die Workspace Bundles org.eclipse.osgi und de.metafinanz.demo.equinox.extension enthält und die System Property osgi.framework.extensions mit dem Wert de.metafinanz.demo.equinox.extension belegt. Die passende hookconfigurators.properties-Datei ist ebenfalls schon fertig in der Framework Extension enthalten:

hook.configurators=de.metafinanz.demo.equinox.extension.DemoHook

Kommentare

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht.