Ich Tracking OSGi-Bundles wie folgt aus:OSGi BundleTracker: Reihenfolge der Kettenbündel
BundleTracker<Foo> bundleTracker = new BundleTracker<>(context, Bundle.ACTIVE,
new BundleTrackerCustomizer<Foo>(){
@Override
public Foo addingBundle(Bundle bundle, BundleEvent event) {
...
}
@Override
public void modifiedBundle(Bundle bundle, BundleEvent event, Foo foo) {
...
}
@Override
public void removedBundle(Bundle bundle, BundleEvent event, Foo foo) {
...
}
});
Nun, wenn ein Bündel B eine Abhängigkeit A und B gestartet wird, dann als ich das erste Bündel A verstehen wird aktiviert. Ist das richtig?
Das Problem ist, dass ich manchmal über einige Bundles benachrichtigt werde, bevor ich über ihre abhängigen Bundles benachrichtigt werde. Also, wie kann ich in Abhängigkeitsreihenfolge benachrichtigt werden (wenn B von A abhängt, dann werde ich zuerst über A und dann über B informiert)?
Aber wenn B-Klassen von A verwendet, dies bedeutet nicht, dass A vor B aktiviert werden? – Puce
@Puce Nein, das heißt überhaupt nicht. Bj's Antwort macht das sehr deutlich. –
Wäre es möglich, dass das Bündel A immer vor dem Bündel B aufgelöst wird? Wenn dies der Fall ist und Sie unbedingt die Benachrichtigungen in Abhängigkeitsreihenfolge abrufen müssen, können Sie nach den Ereignissen von Bundle.RESOLVED Ausschau halten, die Bestellung aufzeichnen und dies berücksichtigen, wenn Sie die Bundle.ACTIVATED-Ereignisse erhalten. –