OSGi

Equinox 3.4

Posted by Gerd Wuetherich on Mo, 05/12/2008 - 20:33

Declarative Services

Problem
Wenn man unter Verwendung von Eclipse Equinox 3.4 - wie in den Tutorials des Buchs beschrieben - nur die Bundles

  • org.eclipse.osgi
  • org.eclipse.osgi.services
  • org.eclipse.equinox.ds

in der Launch-Konfiguration angibt, dann startet das jeweilige Beispiel ohne Fehlermeldung,
aber die deklarierten Service Components werden nicht aktiviert

Hintergrund
Die Ursache für dieses Verhalten ist das fehlende Bundle org.eclipse.equinox.util. Die Anzeige des Systemstatus mit dem Befehl ss liefert bspw. im Tutorial zu Kapitel 12 das folgende Ergebnis:

osgi> ss
id State Bundle
0 ACTIVE org.eclipse.osgi_3.4.0.v20080427-0830
1 INSTALLED org.eclipse.equinox.ds_1.0.0.v20080427-0830
2 ACTIVE org.eclipse.osgi.services_3.1.200.v20071203
3 ACTIVE org.osgibook.translation.impl_1.0.0
Fragments=4, 6
4 RESOLVED org.osgibook.translation.impl.enUS_1.0.0
Master=3
5 ACTIVE org.osgibook.translation_1.0.0
6 RESOLVED org.osgibook.translation.impl.deDE_1.0.0
Master=3
7 ACTIVE org.osgibook.helloworld_1.0.0

Eine genauere Untersuchung des Bundles org.eclipse.equinox.ds (ID 1) zeigt, warum das Bundle nicht gestartet wurde:

osgi> diag 1
initial@reference:file:plugins/org.eclipse.equinox.ds_1.0.0.v20080427-0830.jar/ [1]
Direct constraints which are unresolved:
Missing imported package org.eclipse.equinox.internal.util.event_1.0.0.
Missing imported package org.eclipse.equinox.internal.util.hash_1.0.0.
Missing imported package org.eclipse.equinox.internal.util.pool_1.0.0.
Missing imported package org.eclipse.equinox.internal.util.ref_1.0.0.
Missing imported package org.eclipse.equinox.internal.util.threadpool_1.0.0.
Missing imported package org.eclipse.equinox.internal.util.timer_1.0.0.

Lösung
In Equinox 3.4 wurde die DS-Implementierung der Equinox-Entwickler gegen die von der Firma Prosyst bereitgestellte DS-Implementierung ausgestauscht . Die neue Impementierung hat offensichtlich andere Abhängigkeiten, als dies bei der alten Implementierung der Fall war.

Bitte fügen deshalb Sie zur Ausführung eines Tutorials das Bundle org.eclipse.equinox.util zu Launch-Konfiguration hinzu, wenn im Tutorial deklarative Services benutzt werden.