bundles OSGi

Un bundle OSGi est un fichier d'archive Java™ qui contient du code Java, des ressources et un manifeste qui décrit le bundle et ses dépendances. Le bundle est l'unité de déploiement d'une application.

Types de bundle
Fichier manifeste de bundle OSGi
Cycle de vie des bundles

Types de bundle

Bundles d'application
Les bundles d'application sont des bundles que vous créez spécifiquement pour votre application. Ils sont propres à une instance ou isolés, c'est-à-dire qu'ils ne sont pas conçus pour être partagés. Ils sont référencés dans le manifeste d'application dans l'en-tête Application-Content.
Bundles partagés
Les bundles partagés ne sont pas propres à l'application. Une seule instance d'un package provenant d'un bundle partagé peut être utilisée par plusieurs applications. Les bundles partagés ne peuvent pas importer de packages ou de services à partir de bundles d'application. Dans une application, ils doivent être fournis par référence plutôt que contenus directement.
Les bundles partagés se divisent en bundles d'utilisation et en bundle de gestion des versions :
Bundles d'utilisation
Un bundle d'utilisation est un bundle partagé qui fournit au moins un package à un bundle d'application. Les bundles d'utilisation sont référencés dans le manifeste d'application dans l'en-tête Use-Bundle.
Bundles de gestion des versions
Un bundle de gestion des versions est un bundle partagé qui fournit au moins un package ou service à un bundle d'application, un bundle d'utilisation ou un autre bundle de gestion des versions. Les bundles de gestion des versions ne sont pas référencés dans le manifeste d'application et votre application ne sait si les exigences de chaque bundle de gestion des versions sont respectées.
Les bundles OSGi peuvent être enregistrés à un des emplacements suivants :
  • Fichier EBA pour l'application.
  • Référentiel de bundles OSGi interne de serveur.
  • Référentiels externes des bundles OSGi.

Les bundles d'application peuvent être stockés dans le fichier EBA ou dans un référentiel. Les bundles partagés sont stockés dans un référentiel (sinon, ils ne peuvent pas être partagés).

Le processus d'obtention des bundles depuis les référentiels est appelé gestion des versions. Dans le domaine de gestion des versions, la terminologie suivante est utilisée pour les bundles :
Bundles référencés
Un bundle référencé est un bundle qui est référencé dans le manifeste d'application et stocké dans un référentiel.
Bundles de dépendance
Un bundle de dépendance est un bundle qui n'est pas référencé dans le manifeste d'application mais qui est utilisé par des bundles qui sont référencés dans le manifeste d'application ou par d'autres bundles de dépendance.

Les bundles d'application qui ne se trouvent pas directement dans le fichier EBA sont des bundles référencés propres à une instance. Les bundles d'utilisation sont des bundles référencés partagés. Les bundles de gestion des versions sont des bundles de dépendance partagés.

Fichier manifeste de bundle OSGi

Un fichier JAR de bundle OSGi contient un fichier manifeste JAR. Il contient des métadonnées qui permettent à l'infrastructure OSGi de traiter les aspects modulaires du bundle.

Le code suivant est un exemple de contenu de fichier manifeste de bundle, META-INF/MANIFEST.MF :
Manifest-Version: 1.0
Bundle-ManifestVersion: 2
Bundle-Name: MyService bundle
Bundle-SymbolicName: com.sample.myservice
Bundle-Version: 1.0.0
Bundle-Activator: com.sample.myservice.Activator
Import-Package:  org.apache.commons.logging;version="1.0.4"
Export-EJB: ExampleBean
Export-Package:  com.sample.myservice.api;version="1.0.0"
Les métadonnées qui figurent dans ce fichier manifeste incluent les propriétés principales suivantes :
Bundle-Version
Décrit la version du bundle et permet l'activation simultanée de plusieurs versions de bundle dans une même instance de l'infrastructure.
Bundle-Name
Fournit un nom lisible pour un bundle.
Bundle-SymbolicName
Identifie de manière unique un bundle dans l'infrastructure. Ce nom ne dispense pas d'attribuer un en-tête Bundle-Name.
Bundle-Activator
Reçoit une notification de l'infrastructure sur les modifications apportées au cycle de vie du bundle. Cette propriété spécifie la classe qui implémente l'interface org.osgi.framework.BundleActivator.
Import-Package
Déclare les dépendances externes du bundle qui sont utilisées par l'infrastructure OSGi pour la résolution de bundle. Des versions ou des plages de versions spécifiques peuvent être déclarées pour chaque package. Dans ce fichier manifeste exemple, le package org.apache.commons.logging doit être à la version 1.0.4 ou à une version ultérieure.
Utilisez cette propriété pour spécifier les noms des packages que votre bundle doit importer depuis l'environnement d'exécution. Si vous ne spécifiez pas le package requis par votre bundle dans cette propriété, une erreur de compilation peut survenir lors du chargement du bundle.
Note: Vous devez aussi spécifier ce package dans la propriété Export-Package du bundle contenant le package.
Restriction: Si le fichier manifeste de bundle utilise la propriété Import-Package pour déclarer une dépendance de bundle pour un bundle ne se trouvant pas dans votre espace de travail ou plateforme cible, l'éditeur marque la dépendance comme étant une erreur. Pour éviter cette limitation, vérifiez que tous les bundles que vous déclarez en tant que dépendance se trouvent dans votre espace de travail ou utilisez le correctif rapide pour ajouter le bundle à la plateforme cible. Pour utiliser le correctif rapide, passez à la vue Marqueurs et cliquez ensuite avec le bouton droit de la souris sur le marqueur d'erreur et sélectionnez Correctif rapide.
Important: Lorsque vous spécifiez des dépendances de bundle dans votre fichier MANIFEST.MF, utilisez la propriété Import-Package au lieu de Require-bundle. Si vous utilisez Require-bundle pour spécifier des dépendances de bundle, votre application n'est pas déployée.
Import-Package est un moyen plus souple de déclarer des dépendances :
  • Vous pouvez déclarer les dépendances sur la fonctionnalité dont vous avez besoin et non sur le bundle d'où provient cette dernière car cela n'ajoute pas de dépendances inutiles sur les packages non requis par votre bundle mais incluses dans le bundle dépendant.
  • Vous pouvez spécifier des versions ou plages de versions pour le package déclaré et il n'est donc pas nécessaire de réagir aux modifications dans les différentes versions du bundle.
Export-EJB:
Si un projet EJB est converti en bundle OSGi, une section Export-EJB est ajoutée dans le manifeste. Utilisez cette section pour répertorier les EJB à exposer. Vous pouvez ajouter les EJB dans cette section en l'éditant manuellement ou en cliquant avec le bouton droit de la souris sur un projet EJB converti et en sélectionnant OSGi > Gérer les exportations d'EJB.
Export-Package
Déclare les packages qui sont visibles hors du bundle. Tout package non déclaré ici ne sera visible qu'au sein du bundle.
Utilisez cette propriété pour spécifier le nom des packages que votre bundle doit exporter vers l'environnement d'exécution. Si vous ne spécifiez pas les packages requis par d'autres bundles dans cette propriété, il se peut que les bundles dépendants ne soient pas résolus.

Cycle de vie des bundles

L'infrastructure gère le cycle de vie des bundles. Au cours de son installation et de son exécution, un bundle passe par différents états.

Un bundle peut notamment se trouver dans l'un des états suivants :
INSTALLE
Le bundle est installé mais toutes ses dépendances ne sont pas satisfaites. Le bundle requiert des packages qui n'ont pas été exportés par l'un des bundles déjà installés.
RESOLU
Le bundle est installé et ses dépendances ont été satisfaites mais il n'est pas en cours d'exécution. Si un bundle est démarré et que toutes ses dépendances sont satisfaites, le bundle ne passe pas par cet état.
EN COURS DE DEMARRAGE
Etat temporaire du bundle lors qu'il démarre.
ACTIF
Le bundle est démarré.
EN COURS D'ARRET
Etat temporaire du bundle lors qu'il s'arrête.
DESINSTALLE
Le bundle n'existe plus dans l'infrastructure.
Icône indiquant le type de rubrique Rubrique
Dispositions pour les centres de documentation | Commentaires en retour

Icône d'horodatage Dernière mise à jour: May 29, 2014 10:11

Nom de fichier : cbundles.html