Registrieren von Statusänderungen von Bundles

Aus Eclipse
Wechseln zu: Navigation, Suche

Registrieren von Statusänderungen von Bundles:

Ändert sich der Status eines Bundles, erzeugt das Framework ein Event, das von anderen Bundles aufgefangen werden kann.
Um dies zu ermöglichen, muss ein anderes Bundle eine Klasse vom Typ BundleTracker bereitstellen. Der Konstruktor dieser Klasse erhält als Parameter den Bundlecontext und hat hierüber Zugriff auf das Framework. Diese Klasse meldet sich als Listener für einen bestimmten Bundlestaus (zweites Argument des Konstruktors von BundleTracker) beim Framework an. Der dritte Parameter von BundleTracker ist vom Typ des Interfaces BundleTrackerCustomizer. Die an diesem Parameter übergebene Instanz muss dieses Interface implementieren.
Das unten beschriebene Beispiel erzeugt für den BundleTrackerCustomizer eine anonyme Klasse, die genau die Methoden des Interfaces BundleTrackerCustomizer überschreibt. Auch hier bietet sich die Start- Methode des Activator an, um den BundleTracker zu instanziieren.
Folgendes Codebeispiel gibt bei der Statusänderung des SpiellaengeFraseProviderPlugin Bundles eine entsprechende Meldung in der Console aus:

	/*
	 * (non-Javadoc)
	 * @see org.eclipse.ui.plugin.AbstractUIPlugin#start(org.osgi.framework.BundleContext)
	 */
	public void start(final BundleContext context) throws Exception {
		super.start(context);
		plugin = this;
 
		frasenBundleACTIVETracker = new BundleTracker(context, Bundle.ACTIVE, new BundleTrackerCustomizer() {
 
			@Override
			public void removedBundle(Bundle bundle, BundleEvent event, Object object) {
			}
 
			@Override
			public void modifiedBundle(Bundle bundle, BundleEvent event, Object object) {
			}
 
			@Override
			public Object addingBundle(Bundle bundle, BundleEvent event) {
				System.out.println("Das " +  bundle.getSymbolicName() + " Bundle ist nun ACTIVE");
				return null;
			}
		});
		frasenBundleACTIVETracker.open();
 
...
}

Tipp: Der Status eines Plugins lässt sich bequem über die Plug-in Registry View ändern (über einen Filter kann die angezeigte Liste der installierten Plugins eingeschränkt werden. * dient dabei als Wildcard).