Plan Introduction Généralités Fonctionnement Conclusion Frameworks de composants dynamiques (OSGi)



Documents pareils
JOnAS Day 5.1. Outils de développements

Institut Supérieur de Gestion. Cours pour 3 ème LFIG. Java Enterprise Edition Introduction Bayoudhi Chaouki

Introduction au Déploiement

S T L - C P S - L e s p l u g i n s E c l i p s e. - Une Introduction , Frédéric Peschanski

I-JVM: une machine virtuelle Java pour l isolation de composants dans OSGi

JOnAS 5 Enterprise OSGi javaee compliant

JOnAS 5. Serveur d application d

Serveur d'application à la juste taille

JOnAS Day 5.1. Clustering

EXA1415 : Annotations

Introduction aux «Services Web»

NOVA BPM. «Première solution BPM intégr. Pierre Vignéras Bull R&D

Exposé Systèmes Réseaux

Cours Plugin Eclipse. Université Paris VI / Parcours STL / Master I Pierre-Arnaud Marcelot - Iktek - pamarcelot@iktek.com

Java pour le Web. Cours Java - F. Michel

Mise en œuvre des serveurs d application

Europa. Développement JEE 5. avec Eclipse. K a r i m D j a a f a r. A v e c l a c o n t r i b u t i o n d e O l i v i e r S a l v a t o r i

Cours Master Recherche RI 7 Extraction et Intégration d'information du Web «Services Web»

4. SERVICES WEB REST 46

Glassfish dans le milieu médical. Sun Aquarium Paris 26 Juin 2009 Jacky Renno

Compte Rendu d intégration d application

L Orchestration de Services Web avec Orchestra. Goulven Le Jeune Orchestra Project Manager

Refonte front-office / back-office - Architecture & Conception -

Types d applications pour la persistance. Outils de développement. Base de données préexistante? 3 modèles. Variantes avec passerelles

Vulgarisation Java EE Java EE, c est quoi?

24/11/2011. Cours EJB/J2EE Copyright Michel Buffa. Plan du cours. EJB : les fondamentaux. Enterprise Java Bean. Enterprise Java Bean.

La plate-forme dynamique de service OSGi

SOA Open Source Intégration des services et business process dans une architecture SOA Open Source. Bruno Georges JBoss, a Division of Red Hat

MQPerf un outil de diagnostic en mode SaaS des performances optimales du MOM JORAM

Alfstore workflow framework Spécification technique

TP1 : Initiation à Java et Eclipse

Création d une application JEE

Architecture JEE. Objectifs attendus. Serveurs d applications JEE. Architectures JEE Normes JEE. Systèmes distribués

1 JBoss Entreprise Middleware

Architecture d'entreprise : Guide Pratique de l'architecture Logique

Remote Method Invocation (RMI)

Cedric Dumoulin (C) The Java EE 7 Tutorial

Environnements de Développement

Java Naming and Directory Interface

Introduction à ORACLE WAREHOUSE BUILDER Cédric du Mouza

Pour les entreprises de taille moyenne. Descriptif Produit Oracle Oracle WebLogic Server Standard Edition

OSGi. Conception d applications modulaires en Java. Jérôme Molière. Préface de Peter Kriens. Groupe Eyrolles, 2012, ISBN :

Avant-propos 1. Avant-propos Organisation du guide À qui s'adresse ce guide?...4

Objectif : Passer de l analyse métier et fonctionnelle à la définition des applications qui

Java Licence professionnelle CISII,

Cours en ligne Développement Java pour le web

Java c est quoi? Java. Java. Java : Principe de fonctionnement 31/01/ Vue générale 2 - Mon premier programme 3 - Types de Programme Java

NFP111 Systèmes et Applications Réparties

Les processus métiers : concepts, modèles et systèmes

Configuration Interface for MEssage ROuting

1. Installation d'un serveur d'application JBoss:

API04 Contribution. Apache Hadoop: Présentation et application dans le domaine des Data Warehouses. Introduction. Architecture

Hébergement de sites Web

Composants Logiciels. Le modèle de composant de CORBA. Plan

WEBSERVICES. Michael Fortier. Master Informatique 2ème année. A308, Université de Paris 13

PRESENTATION D ADOBE LIVECYCLE ES4

INGÉNIEUR LOGICIEL JAVAEE / GROOVY 8 ANS D EXPÉRIENCE

Messagerie asynchrone et Services Web

La base de données XML exist. A. Belaïd

TP1 : Initiation à Java et Eclipse

Itium XP. Guide Utilisateur

Offre Référentiel d échange

Programmation par composants (1/3) Programmation par composants (2/3)

Création d un service web avec NetBeans 5.5 et SJAS 9

Augmenter la disponibilité des applications JEE grâce au clustering : Le projet open source JShaft

Apache Camel. Entreprise Integration Patterns. Raphaël Delaporte BreizhJUG

Programmer en JAVA. par Tama

FileMaker Server 14. Guide de démarrage

Rapport de Synthèse. Création d un Générateur de modèle PADL pour le langage C++ Sébastien Colladon

Auto-évaluation Aperçu de l architecture Java EE

ECLIPSE RCP. Introduction

Formation en Logiciels Libres. Fiche d inscription

Administration d'infrastructures logicielles avec Jade

Java et les bases de données

CAHIER DES CHARGES D IMPLANTATION

Bases Java - Eclipse / Netbeans

Cahier des charges : gestion de projets agiles. Programmation d Algorithmes Distribués (PAD)

Celui qui vous parle. Yann Vigara

J2EE - Introduction. Développement web - Java. Plan du chapitre

Dafoe Présentation de la plate-forme UIMA

Bases de données et environnements distribués Chapitre I : Architecture logicielle technologies de developpement en environnement

Cursus Sage ERP X3 Outils & Développement. Le parcours pédagogique Sage ERP X3 Outils et Développement

Apache Tomcat 6. Guide d'administration du serveur Java EE sous Windows et Linux. Résumé. Étienne LANGLET

Présentation d'un MOM open-source

Cursus Sage ERP X3 Outils & Développement. CURSUS Sage ERP X3 Outils & Développement ADVANCED. Outils avancés. 2 jours X3A-ADM. Développement 1 &2

Architecture Orientée Service, JSON et API REST

Introduction à Java. Matthieu Herrb CNRS-LAAS. Mars

Tutoriel: Création d'un Web service en C++ avec WebContentC++Framework

Patrons de Conception (Design Patterns)

Les nouvelles architectures des SI : Etat de l Art

JADE : Java Agent DEvelopment framework. Laboratoire IBISC & Départ. GEII Université & IUT d Evry nadia.abchiche@ibisc.univ-evry.

La carte à puce. Jean-Philippe Babau

La démarche SOA et l interopérabilité applicative

Rapport de projet de fin d études

Intégration de systèmes

JASMINe. Outils de gestion et supervision d'infrastructure intergicielle.

Introduction à la conception de systèmes d information

Transcription:

Frameworks de composants dynamiques (OSGi) M2TI Conception d Applications Hétérogènes Distribuées Lionel Médini Septembre-novembre 2014

Objectifs de ce module Paradigmes de programmation avancés Conteneurs d objets / frameworks Paradigmes de programmation Programmation orientée aspects Programmation par composants Conception et déploiement de SI distribués à l urbanisation des SI

Objectifs de ce cours Présenter différents principes d aide à la conception Complémentaires à l approche objet Mis en œuvre dans les outils actuels Les annotations en Java Automatisation de traitements sur le code (métaprogrammation) La programmation orientée aspects Séparation des préoccupations La programmation par composants Le framework Java EE Le framework OSGi

Frameworks de composants dynamiques Définition Framework : IoC, gestion des dépendances, services transversaux Composant : code exécutable packagé Dynamique : déploiement (chargement / déchargement) d applications «à chaud» Exemples OSGi.Net + UPnP

La spécification OSGi Origine du nom (1998) Open Services Gateway Initiative Spécification open source définie par l OSGi Alliance Fondation de l OSGi Alliance : 1999 Spécifications en «Releases» Implantée dans de nombreux frameworks applicatifs Langage : Java Nombreuses utilisations dans des applications industrielles

La spécification OSGi Principes Architecture orientée composants Composants = services = «bundles» Couplage faible Approche par interface Late binding (chargement à chaud) Reconfiguration dynamique Ex. : plugins, services techniques S appuie sur un annuaire de composants Capable de localiser les composants Capable d envoyer du code au client

La spécification OSGi Avantages / spécificités Modularité des applications Chargement/déchargement de code dynamique Déploiement dynamique d applications sans interruption de la plate-forme Installation, Lancement, Mise à jour, Arrêt, Retrait «No reboot» Résolution des dépendances versionnées de code Légereté Ne charge que le code nécessaire Vise des systèmes à mémoire restreinte

La spécification OSGi Fonctionnalités ( 2008 S. Frénot, D. Donsez, N. Le Sommer) R5 (juin 2012) «Applications» supporting services - Subsystem service - Repository service - Resolver service Auxiliary services - Service loader mediator - Common namespaces Enhancements / updates - JMX management model - Configuration admin - Declarative services - Coordinator services Source R5 : http://www.slideshare.net/bosschaert/the-os-gir5enterpriserelease 2012

Implémentations Frameworks OSGi Eclipse Equinox Apache Felix mbedded server Autres frameworks Java Serveurs d applications Java EE ESB JBoss, GlassFish, Jonas Fuse, ServiceMix

Applications ciblées À l origine : mise à jour de modems / passerelles Puis : essor dans le domaine des applications Dynamiques : chargement des drivers via l API UPnP Mobiles / ressources limitées : J2ME/CDC Embarquées : mbedded Server Depuis : Toute application décomposable : Java Platform 1.5, 6, 7 Tout système multi-applications : Java EE, ESB

Le framework OSGi Objectifs du framework Instancier des objets dynamiquement en dehors de l initialisation des classes Pouvoir obtenir une nouvelle implémentation À chaque invocation de méthode À chaque mise à jour distante de la classe Instanciation en Java «classique» exemple1.quelquechose objet = new exemple2.autrechose(); Approche par interface

Le framework OSGi du chargement dynamique URLClassLoader mycl = new URLClassLoader( http://www.somewhere.biz ); Class myclass = mycl.load( foo.aserviceimpl ); test.service exemple = (test.service)myclass.newinstance(); Couplage léger entre demandeur et fournisseur de la classe Seule l interface du service est couplée au client L implémentation est chargée à l exécution Remarques Plus de constructeur injection de dépendances Nécessite de savoir où trouver les implémentations

Le framework OSGi Programmation orientée services (notification) notification Registre de service Enregistrement Client? Fournisseur Fournisseur Acme.com Fournisseur Acme.com

Le framework OSGi Caractéristiques d un composant Nom OSGi : «bundle» Téléchargé à partir d une URL Packagé dans un jar avec Un point de lancement : interface Activator public void start(bundlecontext bc) throws BundleException; public void stop(bundlecontext bc) throws BundleException; Des bibliothèques de code Des ressources (code natif, documents )

Hello World package hello; import org.osgi.framework.bundleactivator; import org.osgi.framework.bundlecontext; public class HelloWorld implements BundleActivator { public void start(bundlecontext bc){ System.out.println("Bonjour"); } public void stop(bundlecontext bc){ System.out.println("Au revoir"); } } Bundle-Name: Hello World Bundle-Description: The simple bundle Bundle-Activator: hello.helloworld Le Bundle est démarré Le Bundle est «arrété» 200 Tue Jun 15 16:20:00 CEST 2004 META-INF/MANIFEST.MF 723 Tue Jun 15 16:20:00 CEST 2004 hello/helloworld.class

Démarrage d'un bundle 1) Décompactage de l'archive dans un cache 2) Ouverture du manifest 3) Identification de la clé : Bundle-Activator 4) Création d'un chargeur de classe dédié 5) Instanciation explicite de la classe d'activation 6) Invocation de la méthode start dessus BundleClassLoader mycl = new BundleClassLoader( file:/tmp/hello.jar ); String clazzname=mycl.getmanifest().getbundleactivatorname(); Class myclass = mycl.load(clazzname ); BundleActivator act = (BundleActivator)myClass.newInstance(); act.start(mycl.getbundlecontext());...

Cycle de vie : États d un bundle uninstall() unknown install() refresh/update() uninstall() INSTALLED resolve() RESOLVED start() STARTING STOPPING stop() UNINSTALLED ACTIVE

Cycle de vie : Transitions Import/Export ne sont pas résolus unknown install() Le Bundle est démarré INSTALLED RESOLVED Le Bundle est désinstallé start() STARTING STOPPING stop() UNINSTALLED ACTIVE Le Bundle est arrêté

Exemple : service de log Une Interface de service package logsystem; public interface Log{ public void log(string level, String message); } Plusieurs implantations possibles... package frenot; public LeLog implements logsystem.log{ public void log(string level, String message){ System.out.println(message); } }

Exemple : un bundle de service de log package logsystem; public interface Log{ public void log(string level, String message); } Bundle-Name: logger Bundle-Description: un logger Bundle-Activator: frenot.lelog Import-Package: org.osgi.framework Export-Package: logsystem import org.osgi.framework.bundleactivator; import org.osgi.framework.bundlecontext; import logsystem.log; package frenot; public LeLog implements Log, BundleActivator{ public void log(string level, String message){ System.out.println(message); } public void start(bundlecontext bc){ bc.registerservice("logsystem.log", this, null); } public void stop(bundlecontext bc){} } 200 Tue Jun 15 16:20:00 CEST 2099 META-INF/MANIFEST.MF 723 Tue Jun 15 16:20:00 CEST 2099 logsystem/log.class 825 Tue Jun 15 16:20:00 CEST 2099 frenot/lelog.class

Exemple : un autre bundle de service de log Bundle-Name: superlogger Bundle-Description: un autre logger Bundle-Activator: superlog.superlog Import-Package: logsystem, org.osgi.framework Le package du log est fourni par un autre bundle Des propriétés distinguent les deux implantations import org.osgi.framework.bundleactivator; import org.osgi.framework.bundlecontext; import logsystem.log; package superlog; public class SuperLog implements Log, BundleActivator{ public void log(string level, String message){ System.out.println(level+ " : "+message"); } public void start(bundlecontext bc){ bc.registerservice(logsystem.log.class.getname(), this, props); } public void stop(bundlecontext Une implantation radicalement bc){} } différente 200 Tue Jun 15 16:20:00 CEST 2099 META-INF/MANIFEST.MF 825 Tue Jun 15 16:20:00 CEST 2099 superlog/superlog.class

Lien entre service et bundles Un service peut être fourni par 1 bundle 2 bundles Séparation de l'interface et de l'implantation N bundles 1 pour chaque implantation Il y a indépendance complète entre interface de service, implantations de services et bundles

Un service est fourni par Appel direct : ServiceReference sr= bc.getservicereference( logsystem.log ); Log lelog=(log)bc.getservice(sr); lelog.log("debug", "it works!"); Programmation réactive bc.addservicelistener(this, (ObjectClass=javax.log.LogInterface )); public void servicechanged(serviceevent serviceevent) { ServiceReference servicereference= serviceevent.getservicereference(); switch (serviceevent.gettype()) { case ServiceEvent.REGISTERED : this.log=(log) serviceevent.getservice(); break; case ServiceEvent.UNREGISTERING :... }

Packaging Deux types d APIs Services OSGi Services du framework (administration, events ) Services applicatifs Services Java EE Class A : composants dans un conteneur Java EE (EJB...) Class B : servies annexes (JNDI, JMS...) Class C : utilitaires (JAXB, JPA...)

Packaging Plusieurs types d applications Applications OSGi Services OSGi Applications hybrides Services OSGi et Java EE Packaging «classique» Ajout de métadonnées OSGi Esprit Platform As A Service Web Application Bundles (WAB) Enterprise OSGi Service Platform Enterprise Specification, Version 4.2 [3].

Références OSGi Cours de Stéphane Frénot (CITI, INSA Lyon), donné à l école Intergiciel et Construction d Applications Réparties Projet Apache Felix : http://felix.apache.org/ Site officiel OSGi : http://www.osgi.org/ Repository Référence sur les bundles disponibles : http://www.osgi.org/repository/homepage

Ne pas hésiter à faire appel à Différents paradigmes de conception Objet : bonnes pratiques Aspects : complémentaire Distribué... Des outils facilitant la programmation Frameworks Bibliothèques de composants Outils de déploiement...

Penser composants dès les spécifications Précision de la phase de conception et d analyse (cahier des charges) Modularité, design par interfaces, séparation des préoccupations Rechercher l existant avant de développer (bibliothèques disponibles) Si l interface d une bibliothèque ne correspond pas à vos besoins : Pouvez-vous / devez-vous modifier vos specs? Éventuellement, utiliser un pattern adapter Sinon, le produit est-il fait pour vous?

Réutilisabilité : utiliser des solutions standard Surtout si vos applications s insèrent dans un SI existant d autres peuvent devoir s interfacer avec Prévoir la possibilité de changer radicalement d interface RIA / RDA Adaptation aux navigateurs / terminaux mobiles Services Web

Règles d or de conception de SI Modularité Interopérabilité Évolutivité Nécessite un plan, schéma, référentiel...et une méthode de travail

Grands principes de conception des SI Focaliser sur les objectifs métier Aborder le SI de manière globale Prendre en compte l évolutivité Des infrastructures techniques Des objectifs métier À la frontière entre conception et gouvernance