Fragments OSGi

Un fragment OSGi est un fichier d'archive Java™ comportant des en-têtes de manifeste spécifiques qui lui permettent d'être associé à un ou plusieurs bundles hôte spécifiés. Les fragments sont considérés comme parties des bundles hôte. Les définitions pertinentes du fragment sont fusionnées avec les définitions des bundles hôte avant la résolution de l'hôte, à condition que les informations n'entrent pas en conflit. Les dépendances de fragment sont résolues si possible. Si elles ne peuvent pas être résolues, le fragment n'est pas joint au bundle hôte. Un fragment ne peut pas posséder son propre chargeur de classe ou activateur de bundle. Il ne peut pas remplacer les informations qui se trouvent dans les bundles hôte. Les fragments étendent des bundles avec des ressources, des classes et des en-têtes admis, qui permettent de personnaliser les bundles.

Fichiers manifeste de fragment OSGi

Un fichier JAR de fragment OSGi contient un fichier manifeste de fragment. Ce fichier contient des métadonnées qui permettent à l'infrastructure OSGi de joindre le fragment à un ou plusieurs bundles hôte.

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: Fragment
Bundle-SymbolicName: Fragment
Bundle-Version: 1.0.0.qualifier
Bundle-RequiredExecutionEnvironment: JavaSE-1.6
Fragment-Host: WebBundle;bundle-version=1.0.0.qualifier
Import-Package:  org.apache.commons.logging;version="1.0.4"
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 :
Fragment-Host
Lie le fragment à ses hôtes de bundle potentiels.
Bundle-Version
Décrit la version du fragment 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 le fragment.
Bundle-SymbolicName
Identifie le fragment de manière unique dans l'infrastructure. Ce nom ne dispense pas d'attribuer un en-tête Bundle-Name.
Import-Package
Déclare les dépendances externes du fragment qui sont utilisées par l'infrastructure OSGi pour la résolution de fragment. 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 fragment doit importer depuis l'environnement d'exécution. Si vous ne spécifiez pas le package dont votre bundle a besoin dans cette propriété, l'exception NoClassDefFound peut être émise et une erreur de compilation peut survenir lors du chargement du bundle.
Remarque : 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-Package
Déclare que les packages sont visibles hors du fragment. Tout package non déclaré ici est visible dans le fragment seulement.
Utilisez cette propriété pour spécifier le nom des packages que votre fragment 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.
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 : cbundlefragment.html