Vous avez déjà votre logiciel en place, mais vous avez encore besoin d'une méthode plus efficace pour permettre à vos utilisateurs techniques d'étendre la plate-forme.
Même si OSGi est bien connu de la plupart des développeurs Java, son intégration dans votre produit peut sembler une tâche ardue. Le manque de clarté sur le fonctionnement précis d'OSGi complique davantage la route à suivre.
Contrairement à tout ce qu'ils aimeraient expérimenter, OSGi ressemble plus à une tentative de naviguer au large de la mer pour de nombreux développeurs Java.
Cet article vous présentera le didacticiel de printemps OSGi Felix à l'aide d'un programme simple et vous expliquera ses avantages et d'autres détails importants.
Alors, qu'est-ce que l'OSGi ?
La création et la distribution de modules et de composants sont rendues possibles par le framework Java connu sous le nom d'OSGi (Open Service Gateway Initiative).
Il met l'accent sur l'encapsulation des fonctions et le couplage lâche, qui offre plusieurs avantages aux développeurs, notamment une fonctionnalité modulaire facilement transférable entre les codes sources et des tests qui ne nécessitent pas de dépendances sans fin.
Comment fonctionne OSGi ?
Un système de composants dynamiques pour Java est défini par un ensemble de spécifications appelé OSGi. Ces spécifications permettent une approche de développement dans laquelle une application est construite à partir d'un certain nombre de parties, puis conditionnée en bundles.
Les services locaux et basés sur le réseau sont utilisés par ces composants pour communiquer. L'objectif est de rendre le code de base du programme aussi compact que possible. Un couplage élevé entre ce code et plusieurs composants est possible.
Les éléments de construction réutilisables de l'application sont appelés composants. Pensez à des fonctionnalités comme un panier d'achat pour votre site e-commerce ou une application de paie pour votre système de gestion du personnel.
Les composants peuvent utiliser OSGi pour masquer leurs implémentations aux autres composants et ne leur fournir que les données nécessaires via des services.
Cela empêche les composants de modifier involontairement des données auxquelles ils ne devraient pas avoir accès et gère les dépendances.
Toutes les connexions entre les composants d'une application OSGi sont établies via des services dans un monde idéal. Un package Java contient l'API spécifiée pour les services.
La collaboration entre prestataires et clients nécessite l'utilisation de classes et/ou d'interfaces, qui constituent l'API.
Tous les composants OSGi sont regroupés dans des bundles, chacun comprenant les ressources dont ils ont besoin pour fonctionner. Les bundles sont assez clairs sur ce dont ils ont besoin de l'environnement et sur ce dont ils sont capables.
Avantages
- Les applications OSGi ont accès aux référentiels de bundles externes.
- Le cadre permet une conception orientée service au niveau du module.
- Il permet de gérer les versions et les dépendances des bundles applicatifs en plus de standardiser et de faciliter l'intégration de librairies tierces.
- Les applications sont plus adaptables aux demandes changeantes, plus portables et plus rapides à réorganiser.
- A application web peut être déployé en tant que groupe de bundles OSGi versionnés avec une durée de vie dynamique grâce à l'intégration du framework avec le modèle de programmation Java EE.
- Au lieu d'être installé en tant que bibliothèque tierce dans le cadre de l'application, le framework fournit l'assemblage déclaratif et les tests unitaires rationalisés du Spring Framework sous une forme standardisée fournie dans le cadre de l'exécution du serveur d'applications.
- Pour les applications d'entreprise composées de plusieurs bundles versionnés avec des cycles de vie dynamiques, le framework offre une isolation.
- Il contient un référentiel de bundles intégré qui peut stocker des bundles communs et versionnés partagés utilisés par plusieurs applications, empêchant chaque application de déployer une copie distincte de chaque bibliothèque partagée.
Premiers pas avec le ressort OSGi Felix
Obtenir les ressources
En téléchargeant la version la plus récente d'Apache Karaf sur ce site, nous pouvons commencer notre aventure OSGi.
Basé sur Apache Felix, l'implémentation Apache de la spécification OSGi, Apache Karaf fournit une plate-forme pour les applications basées sur OSGi.
Karaf fournit diverses fonctionnalités utiles en plus de Felix qui nous aideront à nous familiariser avec OSGi, comme une interface de ligne de commande qui nous permettra de communiquer avec la plate-forme.
Point d'entrée pour les forfaits
Une application doit être packagée en tant que bundle OSGi avant de pouvoir être exécutée dans un environnement OSGi. De plus, le point d'entrée de l'application doit être spécifié ; ce n'est pas la fonction standard public static void main(String[] args).
Commençons donc par créer un "Bonjour tout le monde” application basée sur OSGi.
Nous commençons par établir une dépendance API OSGi de base :
Le runtime OSGi aura accès à la dépendance, par conséquent le bundle n'a pas besoin de la contenir. Par conséquent, il est marqué comme fourni.
Créons maintenant la classe HelloWorld simple :
Les classes qui agissent comme points d'entrée pour les bundles doivent implémenter l'interface BundleActivator fournie par OSGi.
Lorsque le bundle contenant cette classe est lancé, la plateforme OSGi appelle la fonction start(). De l'autre côté, peu de temps avant l'arrêt du bundle, la fonction stop() est appelée.
N'oublions pas que chaque bundle ne peut avoir qu'un seul BundleActivator. Les deux méthodes peuvent communiquer avec l'environnement d'exécution OSGi à l'aide de l'objet BundleContext fourni.
Création d'un lot
Faites de pom.xml un véritable bundle OSGi en apportant les modifications nécessaires.
Nous devons d'abord exprimer clairement que notre objectif est de produire un bundle.
Ensuite, nous utilisons le plugin maven-bundle-plugin pour empaqueter la classe HelloWorld en bundle OSGi, avec l'aimable autorisation de la communauté Apache Felix :
Les valeurs des en-têtes OSGi que nous souhaitons inclure dans le fichier MANIFEST du bundle sont spécifiées dans la section des instructions.
Bundle-Activator est en effet le nom correctement qualifié de la solution BundleActivator qui sera employée pour démarrer et arrêter le bundle. Il est compatible avec la classe qui vient d'être créée.
Bien qu'il ne s'agisse pas d'un en-tête OSGi, l'en-tête Private-Package demande au plugin d'ajouter le package au bundle mais de ne pas le rendre accessible aux autres plugins. La commande mvn install doit être utilisée pour créer le bundle.
Installation et exécution du bundle
Commençons Karaf en exécutant cette commande :
où "KARAF HOME" fait référence au dossier dans lequel Karaf a été configuré. Nous pouvons utiliser la commande suivante pour installer le bundle lorsque l'invite de la console Karaf apparaît :
L'utilisation du référentiel Maven local est la façon dont Karaf est invité à charger le bundle.
Renvoyant l'identifiant numérique du paquet, Karaf l'écrit. Cet ID peut varier en fonction du nombre de bundles précédemment installés. Le bundle a maintenant été installé avec succès et la commande pour le lancer est la suivante :
Au moment où vous lancez le package, "Hello World by Jay" s'affiche. Nous pouvons maintenant arrêter et supprimer le bundle en utilisant :
La console affiche « Goodbye World by Jay ».
Conclusion
Les développeurs peuvent facilement ajouter de nouvelles fonctionnalités à une application Web existante tout en la gardant sécurisée et isolée des autres composants du programme principal en utilisant OSGi.
Nous avons découvert OSGi dans cet article, y compris son fonctionnement, ses avantages et un programme simple. Il n'est pas difficile d'intégrer OSGi dans votre propre application.
Bonne codage!
Soyez sympa! Laissez un commentaire