Von mehreren Lesern wurde uns verschiedene Probleme bei der Ausführung der Tutorials unter Mac OSX berichtet. Diese Probleme sowie mögliche Lösungen sind auf dieser Seite beschrieben.
Problem
Ekkehard Gentz hat uns berichtet, dass das Ausführen von Equinox 3.2.2 mit aktivierter Konsole unter Mac OSX nicht wie beschrieben funktioniert, wenn Equinox über eine OSGi-Launch-Konfiguration aus der Eclipse IDE heraus gestartet wird. In diesem Fall terminiert Equinox kurz nach dem Starten der Konsole. Das Verhalten tritt (mindestens) unter Equinox 3.3.2, OSX 10.5.2 und Java 1.5 auf. Unter Java 1.4.2 scheint das beschriebene Problem nicht aufzutreten.
Lösung
Das beschriebene Problem scheint mit Equinox 3.4.M7 nicht mehr aufzutreten. Wenn Sie die Tutorials - wie im Buch beschrieben - aus der Eclipse IDE heraus starten möchten, dann können Sie anstelle von Equinox 3.2.2 die Version 3.4.M7 verwenden. Bitte beachten Sie in diesem Fall die Hinweise zur Ausführung der Tutorials unter Equinox 3.4.
Eclipse Equinox 3.3.2 terminiert ebenfalls nicht, wenn das OSGi Framework ausserhalb der Eclipse IDE gestartet wird. Sie können also alternativ die beschriebenen Tutorials ausserhalb der Eclipse IDE (und damit ohne Verwendung einer OSGi-Framework-Launch-Konfiguration) ausführen (vgl. dazu Kapitel 11 - Packaging und Deployment).
Problem
Das Ausführen einer Swing-Anwendung ist unter Mac OSX ebenfalls nicht möglich, wenn die Anwendung über eine OSGi-Launch-Konfiguration gestartet wird. In diesem Fall wird das Swing-GUI zwar angezeigt, es können jedoch keine Aktionen auf dem GUI ausgeführt werden. Dieser Fall tritt bspw. auf, wenn Sie - wie in Kapitel 10.5 oder 14.1 beschrieben - den Knopflerfish-Desktop in einer Equinox-Instanz installieren, die über eine OSGi-Launch-Konfiguration aus der Eclipse IDE heraus gestartet wurde.
Hintergrund
Alex Blewitt beschreibt das Problem inkl. einiger Hintergründe in diesem Blog-Eintrag (http://www.eclipsezone.com/eclipse/forums/t93285.html). Weiter Hintergrundinfos zu diesem Thema sind unter http://wiki.eclipse.org/Equinox_Launcher_Issues zu finden.
Lösung
Das beschriebene Probem lässt sich leider nicht lösen. Um Swing-GUIs unter Mac OSX in Equinox auszuführen, muss die Equinox-Instanz von der Kommandozeile gestartet werden. Alternativ kann Equinox aus der Eclipse IDE heraus über eine Java-Launch-Konfiguration durch den Aufruf von org.eclipse.core.runtime.adaptor.EclipseStarter starten (vgl. dazu Unterkapitel 11.5 - Ausführen von Eclipse Equinox).
Problem
Wenn man unter Verwendung von Eclipse Equinox 3.4 - wie in den Tutorials des Buchs beschrieben - nur die Bundles
org.eclipse.osgiorg.eclipse.osgi.servicesorg.eclipse.equinox.dsin 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.