Wie kann ich Bundle mit seinem symbolischen Namen abrufen?

8

Dokumentation für BundleContext sagt, es lässt dich

  • Ruft die Liste der im Framework installierten Bundles ab.
  • Ruft das Bündelobjekt für ein Bündel ab.

Allerdings gibt es keine getBundle(String symbolicName) -Methode, nur getBundle(long id) (und die ungeeignete getBundle(String location) . Natürlich ist es möglich, getBundles() aufzurufen und über das zurückgegebene Array zu iterieren, aber gibt es einen besseren Weg?

    
Alexey Romanov 02.11.2011, 09:16
quelle

2 Antworten

7

Ich denke, das Durchlaufen des Arrays von getBundles() ist in Ordnung. Vielleicht sollte es überhaupt nicht existieren, weil der symbolische Name nicht eindeutig ein Bündel identifiziert. Vielleicht getBundles(String symbolicName) ...

Aus der OSGi-Service-Plattform-Kernspezifikation, Version 4, Version 4.3:

  

3.6.2 Bündel-symbolischerName

     

Der Header Bundle-SymbolicName manifest ist ein obligatorischer Header. Das   Bündel symbolischer Name und Bundle-Version identifizieren ein eindeutiges Bündel. Dies   bedeutet nicht immer, dass dieses Paar in einem Rahmen einzigartig ist, in   In bestimmten Fällen kann das gleiche Bündel mehrmals in der   selbes Framework, siehe Bundle Identifier auf Seite 89.

Die verwiesene Seite 89 (die eigentlich Seite 95 ist):

  

4.4.1 Bündel-Identifikatoren

     

[...]

     

Obwohl das Paar einzigartig ist, ist es möglich, das gleiche Paket zu installieren   mehrmals wenn das org.osgi.framework.bsnversion Framework   startende Eigenschaft wird auf mehrere gesetzt.

    
palacsint 02.11.2011, 10:01
quelle
2

Ich habe noch nie ein Beispiel dafür gesehen. Aber es gibt den Dienst PackageAdmin , vielleicht möchten Sie sich das ansehen, aber es scheint veraltet zu sein. Das Ersatzpaket org.osgi.framework.wiring scheint keine solche Methode zu bieten.

Und um klarzustellen: Was ist Ihr Zweck, eine Instanz eines Bündels zu haben?

    
thobens 02.11.2011 09:54
quelle

Tags und Links