Hi Leute.
Ich habe gerade angefangen mich mit OSGi vertraut zu machen und stehe vor folgendem Problem:
2 Bundles:
- test.host
- test.user
test.host exportiert die API test.host, welche aus einem POJO mit einem Getter für ein Objekt besteht. In einem internen Package (test.host.internal) ist ein Activator, welcher beim Start die Variable für den Getter in der API setzt.
test.user exportiert keine API und hat den einzigen Zweck in der Start-Methode des Activators über test.host genannte Variable auszulesen und auf der Konsole auszugeben.
Manifest von test.host:
Manifest von test.user:
Startlevels sind für beide Bundles auf default.
OSGi-Implementation ist Equinox (org.eclipse.osgi v3.6.2), IDE ist Eclipse Helios.
Wird nun diese Platform gestartet, so startet test.user zuerst und erhät über die test.host API eine NullPointerException, weil die Variable noch nicht gesetzt wurde. Erst nachher wird test.host fehlerfrei gestartet. Starte ich nun test.user manuell verläuft alles fehlerfrei.
Die Bundles werden nicht asynchron gestartet (habe Threads über hashCode() verglichen), Lazy-Activation hat hier keine Auswirkungen.
Meines Wissens nach sollte ein Bundle vor dem ersten exportieren einer eigenen Klasse gestartet werden und nicht danach.
Worin liegt hier mein grundlegendes Fehlverständnis über OSGi?
MfG
splinter
P.S.: Auch wenn ich Anfänger bin dürft ihr ruhig mit Spezialbegriffen antworten, habe ein 500-seitiges Manual über OSGi und Equinox neben mir, dass ich grösstenteils auch gelesen habe.
Ich habe gerade angefangen mich mit OSGi vertraut zu machen und stehe vor folgendem Problem:
2 Bundles:
- test.host
- test.user
test.host exportiert die API test.host, welche aus einem POJO mit einem Getter für ein Objekt besteht. In einem internen Package (test.host.internal) ist ein Activator, welcher beim Start die Variable für den Getter in der API setzt.
test.user exportiert keine API und hat den einzigen Zweck in der Start-Methode des Activators über test.host genannte Variable auszulesen und auf der Konsole auszugeben.
Manifest von test.host:
Code:
Bundle-SymbolicName: test.host
Import-Package: org.osgi.framework;version="[1.5.0,2.0.0)"
Export-Package: test.host;version="1.0.0"
Bundle-Activator: test.host.internal.Activator
Manifest von test.user:
Code:
Bundle-SymbolicName: test.user
Bundle-Activator: test.user.internal.Activator
Import-Package: org.osgi.framework;version="[1.5.0,2.0.0)",
test.host;version="[1.0.0,2.0.0)"
Startlevels sind für beide Bundles auf default.
OSGi-Implementation ist Equinox (org.eclipse.osgi v3.6.2), IDE ist Eclipse Helios.
Wird nun diese Platform gestartet, so startet test.user zuerst und erhät über die test.host API eine NullPointerException, weil die Variable noch nicht gesetzt wurde. Erst nachher wird test.host fehlerfrei gestartet. Starte ich nun test.user manuell verläuft alles fehlerfrei.
Die Bundles werden nicht asynchron gestartet (habe Threads über hashCode() verglichen), Lazy-Activation hat hier keine Auswirkungen.
Meines Wissens nach sollte ein Bundle vor dem ersten exportieren einer eigenen Klasse gestartet werden und nicht danach.
Worin liegt hier mein grundlegendes Fehlverständnis über OSGi?
MfG
splinter
P.S.: Auch wenn ich Anfänger bin dürft ihr ruhig mit Spezialbegriffen antworten, habe ein 500-seitiges Manual über OSGi und Equinox neben mir, dass ich grösstenteils auch gelesen habe.