Accueil Nos publications Blog JugSummerCamp : CDI-OSGi, OSGi en toute simplicité par Mathieu Ancelin

JugSummerCamp : CDI-OSGi, OSGi en toute simplicité par Mathieu Ancelin

Pendant cette présentation sur Weld-OSGi, Mathieu Ancelin (@TrevorReznik) nous a fait un petit récapitulatif sur les différents tenants et apports de CDI, d’OSGi. il nous a également montré l’extension de CDI qu’il a développé (avec d’autres de ses collègues de SERLI) permettant le support d’OSGi dans l’implémentation de référence de CDI : Weld de JBoss.

Pour faire bref, CDI apporte la possibilité d’injecter de manière typesafe différentes ressources dans une application (et ce, grâce à des annotations). En outre, CDI, via un mécanisme d’extensions, permet à chacun d’étendre ses possibilités d’injection offertes nativement (on pourrait, par exemple, offrir une extension afin de pouvoir injecter directement une destination jms).

OSGi, de son coté, offre la possibilité de charger/décharger dynamiquement des services dans la JVM et cela de manière modulaire. En effet, OSGi s’appuie sur la notion de bundle qui correspond à un jar dans lequel est associé un nom mais également un ensemble d’autres services dont il dépend et qui sont nécessaires à son fonctionnement (ces informations se trouvent dans le fichier MANIFEST.MF dans le répertoire META-INF). C’est au runtime que sont vérifiées ces différentes dépendances grâce à la présence d’un annuaire de services (au sens OSGi).
Bien sûr, à chacun de ces services est associé un cycle de vie qui est à la charge du conteneur OSGi (Karaf, Equinox, …).
En une phrase, on peut dire qu’OSGi permet une architecture SOA au sein de la JVM.

Cependant, OSGi est une technologie assez ancienne (plus de 10 ans) qui possède une API verbeuse et contraignante (par exemple, l’API n’est pas typesafe).

C’est pour répondre à ce constat qu’une extension de CDI nommé Weld-OSGi a été développée afin d’apporter le support d’OSGi en offrant la modularité, le coté typesafe et le coté dynamique dans la JVM tout en simplifiant la couche OSGi.

Cette extension est proposée sur Weld qui est l’implémentation de référence de CDI (Context and Dependency Injection) et qui peut être utilisé directement dans JavaSE.

A titre informatif, Weld-OSGi sera bientôt intégré nativement à JBoss Weld.

Ainsi, il devient possible d’injecter directement un service OSGi via CDI de cette manière :



@Inject @OSGiService MyService service;

Bien sûr, il reste possible, avec Weld-OSGi, d’utiliser des bundles OSGi classique.

Suite à ce petit rappel, Mathieu nous a offert une démonstration d’une petite application de réservation de chambres d’hotel où les hotels étaient chargés et démarrés de manière dynamique dans l’application.

En conclusion, une excellente session présentant avec brio les possibilités offertes par Weld-OSGi dans une application. Une extension à suivre à mon avis…