Isolation et partage de l'application OSGi
Lors de l'exécution, les applications OSGi sont isolées les unes des autres mais leurs dépendances sont partagées.
- Les applications OSGi ne peuvent pas partager de packages.
- Chaque application OSGi exécute sa propre infrastructure OSGi isolée avec son propre registre de service.
- Les services OSGi peuvent être importés et exportés entre infrastructures en définissant les en-têtes appropriés dans le manifeste d'application.
Pour chaque serveur d'application exécutant une ou plusieurs applications OSGi, il existe également un espace de bundle partagé.
Le contenu principal d'une application OSGi s'exécute dans l'infrastructure de l'application. Les bundles de dépendance et les bundles partagés de l'application s'exécutent dans l'espace de bundle partagé.
Lorsqu'une application est démarrée, les bundles répertoriés dans le manifeste de déploiement de l'application sont chargés dans l'environnement d'exécution. Les bundles répertoriés dans l'en-tête Deployed-Content du manifeste de déploiement sont chargés dans l'infrastructure isolée. Les bundles répertoriés dans les en-têtes Deployed-Use-Bundle et Provision-Bundle du manifeste de déploiement sont chargés dans l'espace de bundle partagé.
Les bundles de dépendance de l'espace de bundle partagé peuvent provenir du référentiel de bundle interne, du référentiel de bundle externe ou du contenu de l'application.
Cependant, les bundles partagés d'une application doivent plutôt être fournis par référence qu'en fonction des bundles directement contenus dans une application. En effet, si des bundles partagés sont contenus directement dans une application, ils ne sont pas disponibles aux autres applications au moment de la résolution mais se trouvent dans l'espace de bundle partagé lors de l'exécution, ce qui peut provoquer des incidents.
Manifest-Version: 1.0
Application-ManifestVersion: 1.0
Application-Name: Example Blog
Application-SymbolicName: example.blog.app
Application-Version: 1.0
Application-Content:
example.blog.api;version="[1.0.0,2.0.0)",
example.blog;version="[1.0.0,2.0.0)"Lorsque des dépendances sont résolues, l'application déployée doit extraire un bundle de dépendance supplémentaire blog.required.bundle au niveau de version 1.2.0. Ce bundle est disponible dans le package blog.required.package. Ce package est connecté à partir du bundle de dépendance dans l'espace des bundles partagé vers des bundles dans les structures d'applications isolées, comme indiqué dans le diagramme suivant.
