201003 osgi

61
Zenika © 2010 1 Lyon Java User Group Lyon Java User Group OSGi Arnaud Cogoluègnes 16/03/2010

Upload: lyonjug

Post on 28-May-2015

1.059 views

Category:

Documents


4 download

TRANSCRIPT

Page 1: 201003 OSGi

Zenika © 2010 1

Lyon Java User GroupLyon Java User Group

OSGi

Arnaud Cogoluègnes16/03/2010

Page 2: 201003 OSGi

Zenika © 2010

AgendaAgenda

• Modularité• problématique• limitations de Java

• OSGi• présentation• conteneur• couches OSGi

• Développement OSGi• Questions/réponses

Page 3: 201003 OSGi

Zenika © 2010

SpeakerSpeaker

• Arnaud Cogoluègnes• Consultant chez Zenika• Co-auteur :

Spring par la pratique

2nde édition

Spring Dynamic Modules in Action

Manning Editions

http://manning.com/cogoluegnes

A paraître mi 2010

acogoluegnes

Page 4: 201003 OSGi

Zenika © 2010 4

Objectifs de la présentationObjectifs de la présentation

• Démystifier OSGi• Quoi, quand, où, comment

• Car OSGi• Est de plus en plus présent

•cf. serveurs d'applications, ESB

• Est perçu comme complexe• Est une nébuleuse pour le néophyte

« Pourquoi je dois redémarrer Eclipse aprèsl'installation d'un plugin,OSGi c'est dynamique nan ? »

Un JUG leader anonyme

Page 5: 201003 OSGi

Zenika © 2010

AgendaAgenda

• Modularité• problématique• limitations de Java

• OSGi• présentation• conteneur• couches OSGi

• Développement OSGi• Questions/réponses

Page 6: 201003 OSGi

Zenika © 2010 6

Modularité / problématique (1)Modularité / problématique (1)

• Décomposer un système en module• Bénéfices lors de l'implémentation• Bénéfices lors du déploiement

Page 7: 201003 OSGi

Zenika © 2010 7

Modularité / problématique (2)Modularité / problématique (2)

• Système embarqué• Fortement modulaire• ex. : besoin d'un nouveau composant

•Le rechercher•Compatible avec le système ? (dépendances, version)•L'installer à chaud

• Pas d'intervention humaine

Page 8: 201003 OSGi

Zenika © 2010 8

Modularité / problématique (3)Modularité / problématique (3)

• Application d'entreprise• Mise à jour des composants techniques, voire applicatifs• Découpage modulaire pour les applications d'envergure

Page 9: 201003 OSGi

Zenika © 2010

AgendaAgenda

• Modularité• problématique• limitations de Java

• OSGi• présentation• conteneur• couches OSGi

• Développement OSGi• Questions/réponses

Page 10: 201003 OSGi

Zenika © 2010 10

Modularité / limitations de Java (1)Modularité / limitations de Java (1)

• Java• est un langage objet généraliste• n'a pas été orienté « modularité » dans sa conception

• Problème de visibilité, nuit à l'encapsulation• Modificateurs (private, public...) pour la POO, pas pour

découpage logique d'un système• Idem pour package

Page 11: 201003 OSGi

Zenika © 2010 11

Modularité / limitations de Java (2)Modularité / limitations de Java (2)

• Unité de déploiement simpliste : le JAR• Regroupement de fichier .class

• Un JAR n'est pas un module• Il n'est pas actif

Page 12: 201003 OSGi

Zenika © 2010 12

Modularité / limitations de Java (3)Modularité / limitations de Java (3)

• Class path par défaut a des limitations• Impossibilité de faire cohabiter plusieurs versions d'une même

classe• « Fusion » des JAR à l'exécution

•Alors que ce sont des unités de déploiement

• Coté dynamique• Difficulté pour recharger des classes à chaud

•Rien par défaut

• Déploiement à chaud limité, parfois hasardeux

Page 13: 201003 OSGi

Zenika © 2010 13

Modularité / effortsModularité / efforts

• Regain d'intérêt pour la modularité• Différents efforts

• JSRs (277, 291, 294)• HK2 (abstraction de OSGi)• Impala• OSGi

Page 14: 201003 OSGi

Zenika © 2010

AgendaAgenda

• Modularité• problématique• limitations de Java

• OSGi• présentation• conteneur• couches OSGi

• Développement OSGi• Questions/réponses

Page 15: 201003 OSGi

Zenika © 2010 15

OSGi / présentation (modularité)OSGi / présentation (modularité)

• OSGi est un système modulaire• Diviser un système en un ensemble de modules• Règles de visibilité strictes• Résolution des dépendances d'un module• Gestion des versions

Page 16: 201003 OSGi

Zenika © 2010 16

OSGi / présentation (cycle de vie)OSGi / présentation (cycle de vie)

• OSGi est dynamique• Les modules peuvent être...

• Installés• Démarrés• Stoppés• Désinstallés• Mis à jour...

• … tout cela, à l'exécution

Page 17: 201003 OSGi

Zenika © 2010 17

OSGi / présentation (service)OSGi / présentation (service)

• OSGi est orienté service• Les modules peuvent

• Publier des services• Consommer des services

• Les services peuvent apparaître/disparaître dynamiquement• Selon l'état des modules

• Orchestration par le registre de services

Page 18: 201003 OSGi

Zenika © 2010 18

OSGi / une application modulariséeOSGi / une application modularisée

export package

moduledomaine

moduleDAO API

import package

moduleDAO impl

Service Registry

publie un DAO

consomme le DAO

moduleservice impl

Page 19: 201003 OSGi

Zenika © 2010 19

OSGi / présentationOSGi / présentation

• Le framework OSGi• 2 aspects

• Le conteneur OSGi• Les couches du modèle OSGi

Application

Système d’exploitation

Machine virtuelle Java

Cycle de vie

Services

Module

Sec

urit

é

Plateforme Java

OSGi

Page 20: 201003 OSGi

Zenika © 2010

AgendaAgenda

• Modularité• problématique• limitations de Java

• OSGi• présentation• conteneur• couches OSGi

• Développement OSGi• Questions/réponses

Page 21: 201003 OSGi

Zenika © 2010 21

OSGi / conteneurOSGi / conteneur

• Le conteneur est l'environnement d'exécution• Exécuté par la JVM• On parle aussi de plateforme OSGi

• Le conteneur OSGi gère• L'installation des modules• Leur cycle de vie• Les dépendances entre modules

•ex. : chargement des classes

• Implémentations Open Source• Eclipe Equinox• Apache Felix• Knopflerfish

Application

Système d’exploitation

Machine virtuelle Java

Cycle de vie

Services

Module

Sec

urit

é

Plateforme Java

OSGi

Page 22: 201003 OSGi

Zenika © 2010 22

OSGi / démoOSGi / démo

• Démarrer Eclipse Equinox• Programme Java

• Utilisation de Pax Runner• Téléchargement des dépendances• Changement de conteneurs• Ajout de bibliothèques

Application

Système d’exploitation

Machine virtuelle Java

Cycle de vie

Services

Module

Sec

urit

é

Plateforme Java

OSGi

Page 23: 201003 OSGi

Zenika © 2010

AgendaAgenda

• Modularité• problématique• limitations de Java

• OSGi• présentation• conteneur• couches OSGi

• Développement OSGi• Questions/réponses

Page 24: 201003 OSGi

Zenika © 2010 24

OSGi / couche moduleOSGi / couche module

• Gère tous les aspects d'un module• Packaging

• JAR avec entrées supplémentaires MANIFEST.MF• Identification

• Nom, version...• Ce qu'un module

• Apporte en termes de packages Java• Voit en termes de packages Java

• Gère le chargement des classes pour chaque module• « wiring »

Application

Système d’exploitation

Machine virtuelle Java

Cycle de vie

Services

Module

Sec

urit

é

Plateforme Java

OSGi

Page 25: 201003 OSGi

Zenika © 2010 25

OSGi / couche moduleOSGi / couche module

moduledomaine

moduleDAO API

Page 26: 201003 OSGi

Zenika © 2010 26

Serveur d'applications

Application Web

OSGi / déploiement Web « classique »OSGi / déploiement Web « classique »

WEB-INF/lib

WEB-INF/classes

WEB-INF/lib

Application Web

Hibernate3.2.6

Classes Java

WEB-INF/classes

Hibernate3.2.6

Classes Java

Page 27: 201003 OSGi

Zenika © 2010 27

Serveur d'applications

OSGi / librairies dans le serveurs d'app.OSGi / librairies dans le serveurs d'app.

WEB-INF/lib

Application Web

Classes Java

WEB-INF/classes

WEB-INF/lib

Application Web

Classes Java

WEB-INF/classes

Hibernate3.2.6

Page 28: 201003 OSGi

Zenika © 2010 28

Serveur d'applications

Application Web

OSGi / différentes versions embarquéesOSGi / différentes versions embarquées

WEB-INF/lib

WEB-INF/classes

WEB-INF/lib

Application Web

Hibernate3.3.0

Classes Java

WEB-INF/classes

Hibernate3.2.6

Classes Java

Page 29: 201003 OSGi

Zenika © 2010 29

Serveur d'applications

OSGi / versions incompatiblesOSGi / versions incompatibles

WEB-INF/lib

Application Web

Classes Java

WEB-INF/classes

WEB-INF/lib

Application Web

Classes Java

WEB-INF/classes

Hibernate3.2.6

Dépend de Hibernate 3.3.0Dépend de Hibernate 3.2.6

Page 30: 201003 OSGi

Zenika © 2010 30

Serveur d'applications

OSGi / tentative de résolutionOSGi / tentative de résolution

WEB-INF/lib

Application Web

Classes Java

WEB-INF/classes

WEB-INF/lib

Application Web

Classes Java

WEB-INF/classes

Hibernate3.2.6

Hibernate3.3.0

Page 31: 201003 OSGi

Zenika © 2010 31

Conteneur OSGi

OSGi / Dépendances avec OSGiOSGi / Dépendances avec OSGi

WEB-INF/lib

Bundle Web

Classes Java

WEB-INF/classes

WEB-INF/lib

Bundle Web

Classes Java

WEB-INF/classes

Hibernate3.2.6

Page 32: 201003 OSGi

Zenika © 2010 32

Conteneur OSGi

OSGi / Cohabitation de plusieurs versions (1)OSGi / Cohabitation de plusieurs versions (1)

WEB-INF/lib

Bundle Web

Classes Java

WEB-INF/classes

WEB-INF/lib

Bundle Web

Classes Java

WEB-INF/classes

Hibernate3.2.6

Hibernate3.3.0

Page 33: 201003 OSGi

Zenika © 2010 33

OSGi / Cohabitation de plusieurs versions (2)OSGi / Cohabitation de plusieurs versions (2)

A1.0.0

B1.0.0

C1.2.0

D2.0.0

D3.0.0

Page 34: 201003 OSGi

Zenika © 2010 34

OSGi / démoOSGi / démo

• Installation de deux modules dans Equinox• Utilisation de Eclipse PDE• Analyse des packages exportés/importés

Application

Système d’exploitation

Machine virtuelle Java

Cycle de vie

Services

Module

Sec

urit

é

Plateforme Java

OSGi

Page 35: 201003 OSGi

Zenika © 2010 35

OSGi / couche cycle de vieOSGi / couche cycle de vie

• Un bundle passe dans différents états• Le conteneur agit en conséquence

• Satisfaction des dépendances• « connection » avec les classes d'autres bundles• Expose les classes exportés• Lance des opérations

•Événements, callback

Application

Système d’exploitation

Machine virtuelle Java

Cycle de vie

Services

Module

Sec

urit

é

Plateforme Java

OSGi

Page 36: 201003 OSGi

Zenika © 2010 36

OSGi / couche cycle de vieOSGi / couche cycle de vie

• Différents états d'un bundle

Résolu

Désintallé

InstalléEn cours de démarrage

Actif

En cours d’arrêt

arrê

t

dém

arra

ge

désinstallation

déin

stal

latio

n

résolution rafraichissementmis à jour

installation

Application

Système d’exploitation

Machine virtuelle Java

Cycle de vie

Services

Module

Sec

uri

Plateforme Java

OSGi

Page 37: 201003 OSGi

Zenika © 2010 37

OSGi / démoOSGi / démo

• Ecriture d'un BundleActivator• Démarrage/arrêt du bundle• Rechargement à chaud

Application

Système d’exploitation

Machine virtuelle Java

Cycle de vie

Services

Module

Sec

uri

Plateforme Java

OSGi

Application

Système d’exploitation

Machine virtuelle Java

Cycle de vie

Services

Module

Sec

uri

Plateforme Java

OSGi

Page 38: 201003 OSGi

Zenika © 2010 38

OSGi / couche serviceOSGi / couche service

A

publie

Bconsomme

Service Registry

Introduit des dépendances entre modules - que fait B si A n'a pas encore publié le service ? - que fait B si A disparaît ?

Dynamique !A peut être mis à jour sans redémarrer BSélection/recherche des services très fine

MAIS...

Application

Système d’exploitation

Machine virtuelle Java

Cycle de vie

Services

Module

Sec

uri

Plateforme Java

OSGi

Page 39: 201003 OSGi

Zenika © 2010 39

OSGi / couche serviceOSGi / couche service

A

publie

Bconsomme

Service Registry

x

x

x

x

x

x

x

x

Page 40: 201003 OSGi

Zenika © 2010 40

OSGi / dm KernelOSGi / dm Kernel

Page 41: 201003 OSGi

Zenika © 2010 41

OSGi / dm ServerOSGi / dm Server

Page 42: 201003 OSGi

Zenika © 2010 42

OSGi / dm ServerOSGi / dm Server

Page 43: 201003 OSGi

Zenika © 2010 43

OSGi / GlassfishOSGi / Glassfish

Page 44: 201003 OSGi

Zenika © 2010 44

OSGi / GlassfishOSGi / Glassfish

Page 45: 201003 OSGi

Zenika © 2010 45

OSGi / couche serviceOSGi / couche service

• API pour intéraction avec l'environnement OSGi

• publication/consommation service, suivi des événements

• Peu envisageable

• pour un système d'envergure

• au jour le jour pour un développeur d'applications

• Frameworks avec approche déclarative

• Gestion de la publication/consommation des services

• Gestion de l'aspect dynamique

• Frameworks

• Declarative Services (standard OSGi)

• Blueprint Service (standard OSGi)

• iPOJO

• Spring Dynamic Modules

• Peaberry (Google Guice)

• Facilite une approche POJO

Page 46: 201003 OSGi

Zenika © 2010 46

OSGi / services déclaratifs avec Spring DMOSGi / services déclaratifs avec Spring DM

• Dans le module « accès aux données »

<bean id="clinic" class="org.springframework.petclinic.repository.jdbc.SimpleJdbcClinic" />

<osgi:service id="osgiClinic" ref="clinic" interface="org.springframework.petclinic.repository.Clinic" />

<osgi:reference id="clinic" interface="org.springframework.petclinic.repository.Clinic"/>

Bean Spring « classique »

Export du bean en tant que service OSGi

Consommation du Bean en tant que service OSGi

Devient un Bean Spring dans le module (injection de dépendances, etc.)

• Dans le module « service »

Page 47: 201003 OSGi

Zenika © 2010

AgendaAgenda

• Modularité• problématique• limitations de Java

• OSGi• présentation• conteneur• couches OSGi

• Développement OSGi• Questions/réponses

Page 48: 201003 OSGi

Zenika © 2010 48

Développement avec OSGiDéveloppement avec OSGi

• OSGi propose un modèle de programmation puissant• Mais plus complexe• Exemple avec l'aspect dynamique :

• On ne peut se contenter d'en « profiter »• Il faut le gérer (des services peuvent disparaître à tout

moment)

« Pourquoi je dois redémarrer Eclipse aprèsl'installation d'un plugin,OSGi c'est dynamique nan ? »

Un JUG leader anonyme

Page 49: 201003 OSGi

Zenika © 2010 49

Développement avec OSGiDéveloppement avec OSGi

• Bouleversement des habitudes de développement ?• Pas vraiment, une grande partie peut être conservée...

• Environnement de développement• Outil de build automatisé• Approche POJO• Tests d'intégration• Intégration continue

Page 50: 201003 OSGi

Zenika © 2010 50

Développement au jour le jourDéveloppement au jour le jour

• Modèle POJO possible• Utilisation d'un framework déclaratif• Pas de dépendances vers l'API OSGi

• Environnement de développement adapté• Eclipse PDE, SpringSource Tool Suite, IntelliJ IDEA• Mais pas obligatoire

• Une application OSGi peut être lancée de façon traditionnelle

Page 51: 201003 OSGi

Zenika © 2010 51

Test des applicationsTest des applications

• Tests unitaires sur des POJO• Pas de changement• Teste les fonctionnalités d'un module

• Tests d'intégration dans un conteneur léger• Lancer au sein du conteneur

• Frameworks basés sur JUnit :• Spring Dynamic Modules• Pax Exam

Page 52: 201003 OSGi

Zenika © 2010 52

Test d'intégration avec Pax ExamTest d'intégration avec Pax Exam

Page 53: 201003 OSGi

Zenika © 2010 53

Test d'intégration avec Pax ExamTest d'intégration avec Pax Exam

Page 54: 201003 OSGi

Zenika © 2010 54

PackagingPackaging

• Packaging• JAR standard• Mais comment enrichir le MANIFEST.MF ?

• Outils de packaging OSGi• Bnd• Bundlor

• Utilisable• En ligne de commande• Dans Eclipse• Plugin Ant• Plugin Maven

Page 55: 201003 OSGi

Zenika © 2010 55

Intégration continueIntégration continue

• Avec OSGi...• ...les tests automatisés utilisent des framework traditionnels• ...les outils de build populaires sont supportés

• Lancement des tests• Packaging

• L'intégration continue possible• Sans changer ses habitudes

Page 56: 201003 OSGi

Zenika © 2010 56

OSGi ? Attention !OSGi ? Attention !

• Savoir décomposer son système• Les équipes doivent être formées à la technologie• Utiliser des librairies compatibles OSGi

• Certaines librairies distribués en tant que bundle OSGi• Dépôts (Maven, Ivy) OSGi

• Les sujets délicats avec OSGi• Programmation Orientée Aspect• Mapping Objet/Relationnel

Page 57: 201003 OSGi

Zenika © 2010 57

Utiliser OSGi ?Utiliser OSGi ?

• OSGi est utilisé dans le middleware• Serveurs d'applications : Glassfish, JOnAS, Websphere...• ESB : ServiceMix, Mule, Project Fuji (Open ESB)

• Pourquoi le middleware aime OSGi• Beaucoup de librairies à gérer• Extentisibilité• Dynamique

Page 58: 201003 OSGi

Zenika © 2010 58

Utiliser OSGi ?Utiliser OSGi ?

• Encore peu utilisé dans les applications d'entreprises• Bénéfique pour les « gros » systèmes• La modularité est toujours bonne

• Renforcée par OSGi• Ne doit pas devenir un fardeau technologique

Page 59: 201003 OSGi

Zenika © 2010 59

OSGi dans l'entrepriseOSGi dans l'entreprise

• Des efforts pour intégrer OSGi avec les technologies d'entreprises

• Un aspect entreprise dans la spécification OSGi• Blueprint (RFC 124) : standardisation de Spring en OSGi• Distributed OSGi (RFC 119) : services OSGi en services Web• Transaction (RFC 98)

• Standardisation du support Web (RFC 66)• Spring Dynamic Modules propose un pont entre Spring et OSGi• Adresser des scénarios d'applications d'entreprises avec OSGi

• OSGi Enterprise Expert Group• Apache Aries• Eclipse Gemini (Oracle, SpringSource)

Page 60: 201003 OSGi

Zenika © 2010

AgendaAgenda

• Modularité• problématique• limitations de Java

• OSGi• présentation• conteneur• couches OSGi

• Développement OSGi• Questions/réponses

Page 61: 201003 OSGi

Zenika © 2010

Closing timeClosing time

MERCIDE

VOTRE ATTENTION !:-)