SlideShare une entreprise Scribd logo
1  sur  61
Télécharger pour lire hors ligne
14 octobre 2008




                                                                                                            www.parisjug.org




                                                                                                                                                                           www.parisjug.org




Copyright © 2008 ParisJug. Licence CC – Creative Commons 2.0 France – Paternité – Pas d'Utilisation Commerciale – Partage des Conditions Initiales à l'Identique
14 octobre 2008




                                                         OSGI



Cyrille Le Clerc
Nicolas Griso

                                            www.parisjug.org
Copyright © 2008 ParisJug. Licence CC – Creative Commons 2.0 France – Paternité – Pas d'Utilisation Commerciale – Partage des Conditions Initiales à l'Identique
La modularité

  Caractéristiques d’un module ?

   Expose un contrat versionné

   Masque ses détails d’implémentation

   Décrit ses dépendances




                         www.xebia.fr / blog.xebia.fr   3
Pourquoi la modularité ?

   Limites du monolithique
     Windows Vista (50 M SLOC) est le dernier OS monolithique de Microsoft


   Réutilisation et émergence de stacks
     Middleware Java
        Serveur JavaEE, ESB/BPM, portail, télécoms,
        Consolidation de marché
        Maturité des briques et API de base


   « One size does NOT fit all ! »
     Profiles Java EE 6




                                   www.xebia.fr / blog.xebia.fr              4
La modularité en Java
L’existant
           Les jars
           Les classloaders hiérarchiques
           Maven 2
Le futur
           Java Module System
           OSGi




                                       www.xebia.fr / blog.xebia.fr
La modularité en Java
L’existant : les jars

   Module de base : le Jar

         Concept de build sans réalité au runtime

         Pas de gestion de version
           Une seule version d’un jar peut être chargée


         Pas d’intermédiaire de visibilité entre protected et public

         Pas de description des dépendances



                     Java s’est jusqu’à présent peu soucié du concept de module




                                            www.xebia.fr / blog.xebia.fr          6
La modularité en Java
L’existant : les classloaders hiérarchiques

    Les classloaders sont hiérarchiques et héritent de la
     visibilité du parent

    Visibilité globale dans un classloader

    Impossibilité de charger plusieurs version d’une classe
     dans un classloader

    Les packages ne sont pas contraints au runtime
      Deux classes d’un package peuvent provenir de jars différents




                                 www.xebia.fr / blog.xebia.fr         7
La modularité en Java
L’existant : les classloaders hiérarchiques

                                                                              rt.jar
          JVM Classloader                                               jce-provider.jar

                                                                       servlet-api-2.5.jar

     Servlet Engine ClassLoader                                       catalina-6.0.16.jar
                                                                    tomcat-dbcp-6.0.16.jar


                                                                      my-service-1.0.jar
                                                                       my-model-1.0.jar
       Web App ClassLoader
                                                                    hibernate-core-3.3.0.jar

                                                                          jdom-1.0.jar

                                  Web Application Classique
                                     www.xebia.fr / blog.xebia.fr                              8
La modularité en Java
L’existant : les classloaders hiérarchiques

                                                                               rt.jar
          JVM Classloader                                                jce-provider.jar

                                                                        servlet-api-2.5.jar

     Servlet Engine ClassLoader                                        catalina-6.0.16.jar
                                                                     tomcat-dbcp-6.0.16.jar



                                                 c
                                            a ve                       my-service-1.0.jar
                                       c ile AS
                                   iffi oss
                                  D B
                                      J                                 my-model-1.0.jar
       Web App ClassLoader
                                                                     hibernate-core-3.3.0.jar

                                                                           jdom-1.0.jar

                                      www.xebia.fr / blog.xebia.fr                              9
La modularité en Java
L’existant : les classloaders hiérarchiques

                                                                              rt.jar
          JVM Classloader                                               jce-provider.jar

                                                                       servlet-api-2.5.jar

     Servlet Engine ClassLoader                                       catalina-6.0.16.jar
                                                                    tomcat-dbcp-6.0.16.jar




                                                c
                                            a ve                      my-service-1.0.jar
                                       c ile here
                                   iffi bsp
                                  D e                                  my-model-1.0.jar
       Web App ClassLoader          W
                                                                    hibernate-core-3.3.0.jar

                                                                          jdom-1.0.jar

                                     www.xebia.fr / blog.xebia.fr                              10
La modularité en Java
L’existant : les classloaders hiérarchiques

                                                                             rt.jar
          JVM Classloader                                              jce-provider.jar

                                                                      servlet-api-2.5.jar

     Servlet Engine ClassLoader               g                      catalina-6.0.16.jar
                                        a gin
                                     ack at
                                   ep omc
                                  R T
                                                                   tomcat-dbcp-6.0.16.jar




                                                                     my-service-1.0.jar
                                                                      my-model-1.0.jar
       Web App ClassLoader
                                                                   hibernate-core-3.3.0.jar

                                                                         jdom-1.0.jar

                                    www.xebia.fr / blog.xebia.fr                              11
La modularité en Java
L’existant : les classloaders hiérarchiques

    JVM Classloader


     Servlet Engine                                                    Spring-2.5.jar
      ClassLoader

                                  my-service-1.0.jar
                                                                        Impossible
       Web App
                                  my-model-1.0.jar
      ClassLoader
                                      cxf-2.1.jar
                                                                      Spring-2.0.jar


                      Il est aujourd’hui impossible de charger deux versions
                      d’un même jar dans une web app !




                                       www.xebia.fr / blog.xebia.fr                     12
La modularité en Java
L’existant : maven 2

     Maven 2
      Versionnage des jar
      Description des dépendances
       <project xmlns="http://maven.apache.org/POM/4.0.0"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
       http://maven.apache.org/maven-v4_0_0.xsd">
          <modelVersion>4.0.0</modelVersion>
          <name>My Service</name>
          <groupId>com.mycompany</groupId>                        version
          <artifactId>my-service</artifactId>
          <packaging>jar</packaging>
          <version>1.0</version>
          <dependencies>                                             dépendances
             <dependency>
                <groupId>com.mycompany</groupId>
                <artifactId>my-backend</artifactId>
                <version>1.0</version>
             </dependency>
           </dependencies>
       </project>




                                   www.xebia.fr / blog.xebia.fr                    13
La modularité en Java
L’existant : maven 2

           Les limitations
                 Dépendances explicites seulement au build (pas runtime)

                 Pas de visibilité bundle


           Les défis
                 Qualité des méta-données

                 Dépendances transitives

                 Conflits de versions

                 Dépendances par nom de bundle vs. par package



                                www.xebia.fr / blog.xebia.fr                14
La modularité en Java
Le futur : JSR 291 : Dynamic Component Support for Java SE

    OSGi rejoint le JCP

    OSGi
         Unité de travail : le bundle
         Gère la visibilité des bundles et leur dépendances, leur versionning
         Dynamique (cycle de vie des bundles géré au runtime)
         Orienté service
           »   Les bundles publient des services dynamiquement
           »   Recherche de services
           »   Bind
           »   Cycle de vie des services lié aux bundles qui les supportent




                                       www.xebia.fr / blog.xebia.fr              15
La modularité en Java
Le futur : JSR 277 – Java Module System

    Associé à JSR 294 - super packages

    Utilisation des annotations Java 5 pour décrire les
     dépendances et les version

   @Version("1.0")
   @ImportModules({
        @ImportModule(name="com.mycompany.mybackend", version="1.0+")
     })
   super package com.mycompany.myservice {
        export com.mycompany.myservice.*;
   }



                       Vive opposition des partisans d’OSGI



                               www.xebia.fr / blog.xebia.fr             16
OSGi Alliance
L’histoire
Le fonctionnement
OSGi Alliance et le JCP




                          www.xebia.fr / blog.xebia.fr
OSGi Alliance
L’histoire

    Consortium créé en 1999
    Objectifs initiaux : Java dans le monde embarqué (domotique,
     automobile, telco, etc)


    Membres : EDF, Siemens, BMW, Ericsson, Nokia, Motorola,
     Sprint, IBM, SpringSource, Sun, etc

    Date clefs
          »   1999 : l’embarqué et networked devices, la domotique, l’automobile
          »   2003 : les télécommunications
          »   2004 : virage open source (Eclipse)
          »   2006 : server side Java
    Besoin d’être léger et dynamique dès l’origine
          Besoin d’isolation des composants fournis par différents éditeurs


                                      www.xebia.fr / blog.xebia.fr                 18
OSGi Alliance
Le fonctionnement

    Les experts group
         Core platform EG
         Vehicle EG
         Mobile EG
         Entreprise EG
         Residential EG
    Entreprise Expert Group
         Gestion de la scalabilité (multi-conteneur, multi-processeurs)
         Ouverture à d’autres languages
         Distribué (SCA)
         Intégration à JavaEE
         Modèle de composants (Spring DM)




                                    www.xebia.fr / blog.xebia.fr           19
OSGi Alliance
OSGi et le JCP

    1999 : JSR 8 – OSGi specification => retirée en 1999

    2006 : JSR 291- Dynamic Component Support for JavaTM
     SE
         Spec Lead : IBM
         Craintes que le JCP n’ai qu’un rôle de validation du travail de l’OSGi
          Alliance
         Craintes du chevauchement avec JSR 277 – Java Module System


    2008 : Sun embauche Richard Hall (Apache Felix) =>
     intégration d’OSGi dans Glassfish




                                    www.xebia.fr / blog.xebia.fr                   20
OSGi Alliance
OSGi et le JCP

   Une communauté plus fermée que le JCP ?
                                  OSGi Alliance                     JCP
   Direction                      Partagée                          Exclusive Sun

   Membres                        Principalement des entreprises    Variés : entreprises,
                                                                    universitaires, individuels


   Spécifications release         Public                            Public

   Spécifications drafts          Membres payants                   Public

   TCK                            Membres payants                   Membres payants + OSS


   Reference Impl                 Membres payants                   Public

   Débats                         Confidentiels                     De plus en plus publics



               OSGi Alliance Full Membership : 20 k$/an
                                     www.xebia.fr / blog.xebia.fr                                 21
La plateforme OSGI
        Les bundles
        Le réseau de classloader




                               www.xebia.fr / blog.xebia.fr
La plateforme
Les bundles                                                     Les
                                                                    c
                                                                 du ontra
                                                                    Ma inte
                                                                      nife s
    Unité de déploiement sur la plateforme                               st
    Un simple jar
           Plus quelques entrées dans META-INF/MANIFEST.MF
    Peut être utilisé hors contexte OSGi
                                                                Description du bundle
   Déclaration des
    dépendances
   niveau package




  Déclaration des
    packages
     exportés




                                 www.xebia.fr / blog.xebia.fr                           23
La plateforme
Les bundles



    Le versionning
         major.minor.micro.qualifier
           » 3.4.0.v20080603-2000
         [version, version]
         (version, version)
         [version, version)




                                   www.xebia.fr / blog.xebia.fr   24
La Plateforme
Le réseau de ClassLoaders




   gui-grand-public-1.9
                               domaine-metier-1.3
    web-services-1.7                                           dao&cache-1.1
                               domaine-metier-1.2
    web-services-1.6




                                              Audit&logs-1.0


                  Exemple de graphe de modules


                             www.xebia.fr / blog.xebia.fr                      25
La Plateforme
Le réseau de Class Loaders


                                     Classloader                           domaine-metier-1.2
       web-services-1.6                 filtrant

        MANIFEST                                                             Audit&logs-1.0
        Import-package …

                                                                              MANIFEST
                                                                              Export-package : …


 Import−Package: demo.audit;version=1.0.0
                                                                 Export−Package: demo.audit;version=1.0.0




                                                           Seulement les classes de
                                                                demo.audit



                                            www.xebia.fr / blog.xebia.fr                                    26
La plateforme
Le conteneur


    Environnement d’exécution des bundles

    Standalone ou embarqué

    Gère le cycle de vie des bundles




                           www.xebia.fr / blog.xebia.fr   27
La plateforme
Le cycle de vie des bundles




                              www.xebia.fr / blog.xebia.fr   28
La plateforme
Le Service Registry


    Cœur du framework

    Gère les services. Permet de
         Publier des services
         Rechercher des services
         Binder des services


    Découplage entre services




                                    www.xebia.fr / blog.xebia.fr   29
Assemblage des services OSGI
BundleActivator et ServiceTracker



                                                            Gestion du cycle de vie du
                                                                     Bundle




                                                                           Enregistrement du
                                                                                service




                         Dé-enregistrement
                         implicite du service




                             www.xebia.fr / blog.xebia.fr                                      30
Assemblage des services OSGI
BundleActivator et ServiceTracker

         Le manifest sert à déclarer le Bundle-Activator


                                                          Déclaration de
                                                          l’Activator




                           www.xebia.fr / blog.xebia.fr                    31
Assemblage des services OSGI
BundleActivator et ServiceTracker

                                   Gestion du cycle de vie du
                                            Bundle



                                                                     Création du
                                                                    ServiceTracker




                                                                 Injection du
                                                                ServiceTracker



                                              Fermeture du
                                             ServiceTracker
                           www.xebia.fr / blog.xebia.fr                              32
Assemblage des services OSGI
BundleActivator et ServiceTracker
                                                           Injection du
                                                          ServiceTracker




                                                                 Résolution du service
                                                                  à chaque utilisation




                                                                              Gestion de
                                                                           l’indisponibilité




              Le ServiceTracker est intrusif sur le code !
                           www.xebia.fr / blog.xebia.fr                                        33
Assemblage des services OSGI
BundleActivator et ServiceTracker

   Enregistrement d’une servlet sur le HttpService
                                                          Surcharge des méthodes
                                                          addingService(…) et
                                                           removedService(…)




             ServiceTracker devient vite lourd à gérer !
                           www.xebia.fr / blog.xebia.fr                            34
Assemblage des services OSGI
BundleActivator et ServiceTracker

    Mécanisme de gestion des dépendances le plus stable et
     mature d’OSGi

    Très en retard par rapport aux mécanismes d’injection de
     dépendances Java actuels (EJB 3, Spring, Google Juice, etc)

    Contraint par les limites des Execution Environments
     OSGI ?




                              www.xebia.fr / blog.xebia.fr         35
Assemblage des services OSGI
Declarative Service

     Créé en 2005 (OSGI R4)
     Mis à jour via la RFC 134




                            www.xebia.fr / blog.xebia.fr   36
Assemblage des services OSGI
Declarative Service

     Semble peu utilisé

     Techniquement limité
        Ne gère pas les dépendances intra-bundles

     Remis en cause par RFC 124 (Spring DM)




                               www.xebia.fr / blog.xebia.fr   37
Assemblage des services OSGI
Spring DM

     En cours de standardisation pour OSGi R4.2
        RFC 124




                           www.xebia.fr / blog.xebia.fr   38
La plateforme
Les services

    Exemples
         Log Service
         Http Service
         Configuration Admin Service
         Preferences Service
         Event Admin Service


    Plus orientés embarqué / J2ME que informatique de gestion
     / Java 5+
         Fonctionnalités limitées
         Ex: HttpService ne gère ni les Filter ni les ServletContextListener




                                    www.xebia.fr / blog.xebia.fr                39
La plateforme
Les implémentations Open Source


      Eclipse Equinox
      Apache Felix
      Knopflerfish (maintenu par Makewave)
      ProSyst Open Source mBedded Server Equinox Edition
      Newton Project

    La liste complète
          http://www.osgi.org/Markets/HomePage




                                  www.xebia.fr / blog.xebia.fr   40
La plateforme
Les chantiers en cours

    Spécifiés dans le draft sur OSGi R4.2

    Ajout de services « Java EE »
         RFC 98: gestion des transaction via JTA et/ou XA
         RFC 119: OSGi distribué
           » Appel de services distants
    Nouveau modèle de composant
         En concurrence avec Declarative Service (OSGI R4 !)
         RFC 124 – « A Component Model for OSGi »
           » Standardisation de Spring DM




                                     www.xebia.fr / blog.xebia.fr   41
Demo OSGi
Description

      Un service dépend d’un backend
      Un service expose une servlet
      Les composants utilisent Log4j
      Upgrade à chaud du service




                           www.xebia.fr / blog.xebia.fr   42
Demo OSGi
Bundles & packages



                                 backend-service-1.0


                                   backend-service-1.1

  business-service-1.0

                                                                 log4j-1.2.13
                           javax.servlet.*-2.4



                         org.osgi.service.http.*-1.2.0




                                  www.xebia.fr / blog.xebia.fr                  43
Demo OSGi
Import d’un service



                                 backend-service-1.0


                                   backend-service-1.1

  business-service-1.0

                                                                 log4j-1.2.13
                           javax.servlet.*-2.4



                         org.osgi.service.http.*-1.2.0




                                  www.xebia.fr / blog.xebia.fr                  44
Demo OSGi
Exposition d’une servlet



                                 backend-service-1.0


                                   backend-service-1.1

  business-service-1.0

                                                                 log4j-1.2.13
                           javax.servlet.*-2.4



                         org.osgi.service.http.*-1.2.0




                                  www.xebia.fr / blog.xebia.fr                  45
Demo OSGi
Upgrade à chaud d’un bundle



                                 backend-service-1.0


                                backend-service-1.1
  business-service-1.0

                                                                 log4j-1.2.13
                           javax.servlet.*-2.4



                         org.osgi.service.http.*-1.2.0




                                  www.xebia.fr / blog.xebia.fr                  46
Demo OSGi
Log4j !



                           backend-service-1.0


                             backend-service-1.1

  business-service-1.0
                                                                  log4j-1.2.13

                           javax.servlet.*-2.4

                                                                 log4j bundle fragment
                                                                                 Log4j.properties
                         org.osgi.service.http.*-1.2.0




                                  www.xebia.fr / blog.xebia.fr                                      47
OSGi dans le monde Java EE
       Client side
       Server Side




                             www.xebia.fr / blog.xebia.fr
OSGi dans le monde Java EE
Client side

    Eclipse RCP
        1ère utilisation d’OSGi dans le monde Open Source
        Ajout de fonctionnalités propriétaires
          »   Eclipse-BuddyPolicy et Eclipse-RegisterBuddy
          »   Les Features
          »   La gestion des updates
          »   Les extensions
        Limitations
          Cycle de vie des plugins : On redémarre toujours Eclipse après avoir activé un
            plugin




                                    www.xebia.fr / blog.xebia.fr                           49
OSGi dans le monde Java EE
Server side – Middlewares
      Isolation middleware / application
      Isolation des composants du middleware (multi versions)
      Lifecycle (start, stop, install, uninstall)




                                               exports OSGi stricts
                                              pour éviter les conflits                        Logging
                                              avec les dépendances                            Service
         Mon Application                         des applications
                                                                                          High Availability
                                                                                              Service
            javax.servlet.*                                                   javax.**
                                    …                                                    Messaging Service
         javax.servlet.http.*                                                    …
                                                                                             JMS 1.1
            Servlet 2.4         Servlet 2.5            EJB 2.1                EJB 3.0       Tx Service
            Container           Container             Container              Container      JTA 1.0.1B

                                                      OSGI Container

                                                               JVM

                                              www.xebia.fr / blog.xebia.fr                                    50
OSGi dans le monde Java EE
Server side - Middlewares

    Websphere 6.1 (2006) est full-osgi
         Classloader OSGI pour isoler les applications du middleware
         Equinox est le conteneur de Websphere
         Tous les jars sont osgi-fiés (repository IBM)
         Compositions Application Server, ESB, Process Server, Portal, Telecom
          Server


    Weblogic 10 (2007) utilise OSGI
         Plusieurs jars sont osgi-fiés


    Glassfish
         Glassfish démarre sur Equinox et Knopflerfish




                                    www.xebia.fr / blog.xebia.fr                  51
OSGi dans le monde Java EE
Server side - Middlewares

    Service Mix 4
         Réécriture full OSGI / Spring DM de ServiceMix
         Service Mix Kernel est un enrichissement d’un conteneur OSGI
         Possibilité de déployer des médiations en packaging JBI ou OSGI


    Spring DM
         Propose OSGI en alternative à Java EE


    Autres acteurs Java EE : Jonas, JBoss


                           Ces projets utilisent-ils OSGI basic ?
                                    ServiceTracker ?

                                  www.xebia.fr / blog.xebia.fr              52
Bonnes pratiques OSGi
Les enjeux d’OSGi pour Java EE




                             www.xebia.fr / blog.xebia.fr
Bonnes pratiques

   Préférer Import-Package à Require-Bundle
   Utilisation des ranges de versions
   Bien designer ses bundles
        Prévoir le couplage de ses bundles
        Ne pas tout mettre dans un bundle
   Séparer les APIs exportées des implémentations
   Penser Orienté Service
   Gérer le cycle de vie des dépendances
        ServiceTracker, Spring DM, Declarative Service




                                 www.xebia.fr / blog.xebia.fr   54
Les enjeux d’OSGi pour Java EE

   L’utilisation d’anti-pattern OSGi
        Class.forName / Factory Pattern
        System.exit()


   Réutilisation des libraries existantes non-OSGi
        Repackaging et prolifération de repositories
          OSGi.org, Spring, Servicemix, IBM (privé), etc
        Modification du source code (http://www.dynamicjava.org/)
        Bytecode patching au runtime (knoplerfish)


   Gestion des meta données
        OSGi: Entrées dans le manifest
        Java Module System: annotations et nouvelle syntaxe java


                                    www.xebia.fr / blog.xebia.fr     55
Les enjeux d’OSGi pour Java EE


   Problématique cross-bundle
        AOP
        Sécurité
        Transaction


   Testabilité des bundles

   Packaging des applications
        Archive .par chez Spring
        Features chez eclipse




                                    www.xebia.fr / blog.xebia.fr   56
Conclusion

   Socle robuste et éprouvé

   Répond à des problématiques techniques complexes

   Manque de maturité dans le monde Java EE

   En pleine évolution pour les aspects Java EE




                          www.xebia.fr / blog.xebia.fr   57
Questions




            www.xebia.fr / blog.xebia.fr   58
Sponsors




  14/10/2008                                  OSGI                                                                   www.parisjug.org
               Copyright © 2008 ParisJug. Licence CC – Creative Commons 2.0 France – Paternité – Pas d'Utilisation Commerciale – Partage des Conditions Initiales à l'Identique
Merci de votre
   attention!


                                                                                                                                                                   www.parisjug.org




Copyright © 2008 ParisJug. Licence CC – Creative Commons 2.0 France – Paternité – Pas d'Utilisation Commerciale – Partage des Conditions Initiales à l'Identique
Licence




  http://creativecommons.org/licenses/by-nc-sa/2.0/fr/




   14/10/2008                                    OSGI                                                                   www.parisjug.org
                  Copyright © 2008 ParisJug. Licence CC – Creative Commons 2.0 France – Paternité – Pas d'Utilisation Commerciale – Partage des Conditions Initiales à l'Identique

Contenu connexe

Similaire à osgi-parisjug-20081014-presentation

Run java vs ruby
Run java vs rubyRun java vs ruby
Run java vs rubypinguin666
 
MarsJUG - Le classpath n'est pas mort, mais presque
MarsJUG - Le classpath n'est pas mort, mais presqueMarsJUG - Le classpath n'est pas mort, mais presque
MarsJUG - Le classpath n'est pas mort, mais presqueAlexis Hassler
 
Paris JUG - Backbone.js en environnement Java - Laurent DUTHEIL et Frederic M...
Paris JUG - Backbone.js en environnement Java - Laurent DUTHEIL et Frederic M...Paris JUG - Backbone.js en environnement Java - Laurent DUTHEIL et Frederic M...
Paris JUG - Backbone.js en environnement Java - Laurent DUTHEIL et Frederic M...Frederic Merizen
 
Java virtual machine : Notions de base
Java virtual machine : Notions de baseJava virtual machine : Notions de base
Java virtual machine : Notions de baseANASYS
 
JavaEE - Test & Deploy
JavaEE - Test & DeployJavaEE - Test & Deploy
JavaEE - Test & DeployAlexis Hassler
 
Architecture de la jvm(1ere Partie) - JVM Architecture (First Part)
Architecture de la jvm(1ere Partie) - JVM Architecture (First Part)Architecture de la jvm(1ere Partie) - JVM Architecture (First Part)
Architecture de la jvm(1ere Partie) - JVM Architecture (First Part)Michael Njong
 
Apres java 8, java 9 et 10 - BreizhCamp 2018
Apres java 8, java 9 et 10 - BreizhCamp 2018Apres java 8, java 9 et 10 - BreizhCamp 2018
Apres java 8, java 9 et 10 - BreizhCamp 2018Jean-Michel Doudoux
 
Aperçu de RequireJS
Aperçu de RequireJSAperçu de RequireJS
Aperçu de RequireJSVISEO
 
Tests d'intégration avec Arquillian
Tests d'intégration avec ArquillianTests d'intégration avec Arquillian
Tests d'intégration avec ArquillianAlexis Hassler
 
Java 110605092007-phpapp02
Java 110605092007-phpapp02Java 110605092007-phpapp02
Java 110605092007-phpapp02Eric Bourdet
 
2013 01-08-php-maturite
2013 01-08-php-maturite2013 01-08-php-maturite
2013 01-08-php-maturiteRémi Alvado
 
soft-shake.ch - Tests d'intégration JavaEE avec Arquillian
soft-shake.ch - Tests d'intégration JavaEE avec Arquilliansoft-shake.ch - Tests d'intégration JavaEE avec Arquillian
soft-shake.ch - Tests d'intégration JavaEE avec Arquilliansoft-shake.ch
 
Les ZAPeroTech #4 : REX Oracle Code One 2019 sur l'éco-système Java
Les ZAPeroTech #4 : REX Oracle Code One 2019 sur l'éco-système JavaLes ZAPeroTech #4 : REX Oracle Code One 2019 sur l'éco-système Java
Les ZAPeroTech #4 : REX Oracle Code One 2019 sur l'éco-système JavaDocDoku
 

Similaire à osgi-parisjug-20081014-presentation (20)

Java EE 6 Solutions Linux 2010
Java EE 6 Solutions Linux 2010Java EE 6 Solutions Linux 2010
Java EE 6 Solutions Linux 2010
 
Run java vs ruby
Run java vs rubyRun java vs ruby
Run java vs ruby
 
MarsJUG - Le classpath n'est pas mort, mais presque
MarsJUG - Le classpath n'est pas mort, mais presqueMarsJUG - Le classpath n'est pas mort, mais presque
MarsJUG - Le classpath n'est pas mort, mais presque
 
Paris JUG - Backbone.js en environnement Java - Laurent DUTHEIL et Frederic M...
Paris JUG - Backbone.js en environnement Java - Laurent DUTHEIL et Frederic M...Paris JUG - Backbone.js en environnement Java - Laurent DUTHEIL et Frederic M...
Paris JUG - Backbone.js en environnement Java - Laurent DUTHEIL et Frederic M...
 
Java virtual machine : Notions de base
Java virtual machine : Notions de baseJava virtual machine : Notions de base
Java virtual machine : Notions de base
 
JavaEE - Test & Deploy
JavaEE - Test & DeployJavaEE - Test & Deploy
JavaEE - Test & Deploy
 
JAVA Chapitre1
JAVA Chapitre1 JAVA Chapitre1
JAVA Chapitre1
 
gradle_lavajug
gradle_lavajuggradle_lavajug
gradle_lavajug
 
Architecture de la jvm(1ere Partie) - JVM Architecture (First Part)
Architecture de la jvm(1ere Partie) - JVM Architecture (First Part)Architecture de la jvm(1ere Partie) - JVM Architecture (First Part)
Architecture de la jvm(1ere Partie) - JVM Architecture (First Part)
 
Apres java 8, java 9 et 10 - BreizhCamp 2018
Apres java 8, java 9 et 10 - BreizhCamp 2018Apres java 8, java 9 et 10 - BreizhCamp 2018
Apres java 8, java 9 et 10 - BreizhCamp 2018
 
Aperçu de RequireJS
Aperçu de RequireJSAperçu de RequireJS
Aperçu de RequireJS
 
Tests d'intégration avec Arquillian
Tests d'intégration avec ArquillianTests d'intégration avec Arquillian
Tests d'intégration avec Arquillian
 
Gradle_LyonJUG
Gradle_LyonJUGGradle_LyonJUG
Gradle_LyonJUG
 
Java 110605092007-phpapp02
Java 110605092007-phpapp02Java 110605092007-phpapp02
Java 110605092007-phpapp02
 
Java 11 to 17 : What's new !?
Java 11 to 17 : What's new !?Java 11 to 17 : What's new !?
Java 11 to 17 : What's new !?
 
2013 01-08-php-maturite
2013 01-08-php-maturite2013 01-08-php-maturite
2013 01-08-php-maturite
 
soft-shake.ch - Tests d'intégration JavaEE avec Arquillian
soft-shake.ch - Tests d'intégration JavaEE avec Arquilliansoft-shake.ch - Tests d'intégration JavaEE avec Arquillian
soft-shake.ch - Tests d'intégration JavaEE avec Arquillian
 
Les ZAPeroTech #4 : REX Oracle Code One 2019 sur l'éco-système Java
Les ZAPeroTech #4 : REX Oracle Code One 2019 sur l'éco-système JavaLes ZAPeroTech #4 : REX Oracle Code One 2019 sur l'éco-système Java
Les ZAPeroTech #4 : REX Oracle Code One 2019 sur l'éco-système Java
 
Programmation Java
Programmation JavaProgrammation Java
Programmation Java
 
Nouveautés Java 9-10-11
Nouveautés Java 9-10-11Nouveautés Java 9-10-11
Nouveautés Java 9-10-11
 

osgi-parisjug-20081014-presentation

  • 1. 14 octobre 2008 www.parisjug.org www.parisjug.org Copyright © 2008 ParisJug. Licence CC – Creative Commons 2.0 France – Paternité – Pas d'Utilisation Commerciale – Partage des Conditions Initiales à l'Identique
  • 2. 14 octobre 2008 OSGI Cyrille Le Clerc Nicolas Griso www.parisjug.org Copyright © 2008 ParisJug. Licence CC – Creative Commons 2.0 France – Paternité – Pas d'Utilisation Commerciale – Partage des Conditions Initiales à l'Identique
  • 3. La modularité Caractéristiques d’un module ?  Expose un contrat versionné  Masque ses détails d’implémentation  Décrit ses dépendances www.xebia.fr / blog.xebia.fr 3
  • 4. Pourquoi la modularité ?  Limites du monolithique Windows Vista (50 M SLOC) est le dernier OS monolithique de Microsoft  Réutilisation et émergence de stacks Middleware Java  Serveur JavaEE, ESB/BPM, portail, télécoms,  Consolidation de marché  Maturité des briques et API de base  « One size does NOT fit all ! » Profiles Java EE 6 www.xebia.fr / blog.xebia.fr 4
  • 5. La modularité en Java L’existant Les jars Les classloaders hiérarchiques Maven 2 Le futur Java Module System OSGi www.xebia.fr / blog.xebia.fr
  • 6. La modularité en Java L’existant : les jars Module de base : le Jar  Concept de build sans réalité au runtime  Pas de gestion de version Une seule version d’un jar peut être chargée  Pas d’intermédiaire de visibilité entre protected et public  Pas de description des dépendances Java s’est jusqu’à présent peu soucié du concept de module www.xebia.fr / blog.xebia.fr 6
  • 7. La modularité en Java L’existant : les classloaders hiérarchiques  Les classloaders sont hiérarchiques et héritent de la visibilité du parent  Visibilité globale dans un classloader  Impossibilité de charger plusieurs version d’une classe dans un classloader  Les packages ne sont pas contraints au runtime Deux classes d’un package peuvent provenir de jars différents www.xebia.fr / blog.xebia.fr 7
  • 8. La modularité en Java L’existant : les classloaders hiérarchiques rt.jar JVM Classloader jce-provider.jar servlet-api-2.5.jar Servlet Engine ClassLoader catalina-6.0.16.jar tomcat-dbcp-6.0.16.jar my-service-1.0.jar my-model-1.0.jar Web App ClassLoader hibernate-core-3.3.0.jar jdom-1.0.jar Web Application Classique www.xebia.fr / blog.xebia.fr 8
  • 9. La modularité en Java L’existant : les classloaders hiérarchiques rt.jar JVM Classloader jce-provider.jar servlet-api-2.5.jar Servlet Engine ClassLoader catalina-6.0.16.jar tomcat-dbcp-6.0.16.jar c a ve my-service-1.0.jar c ile AS iffi oss D B J my-model-1.0.jar Web App ClassLoader hibernate-core-3.3.0.jar jdom-1.0.jar www.xebia.fr / blog.xebia.fr 9
  • 10. La modularité en Java L’existant : les classloaders hiérarchiques rt.jar JVM Classloader jce-provider.jar servlet-api-2.5.jar Servlet Engine ClassLoader catalina-6.0.16.jar tomcat-dbcp-6.0.16.jar c a ve my-service-1.0.jar c ile here iffi bsp D e my-model-1.0.jar Web App ClassLoader W hibernate-core-3.3.0.jar jdom-1.0.jar www.xebia.fr / blog.xebia.fr 10
  • 11. La modularité en Java L’existant : les classloaders hiérarchiques rt.jar JVM Classloader jce-provider.jar servlet-api-2.5.jar Servlet Engine ClassLoader g catalina-6.0.16.jar a gin ack at ep omc R T tomcat-dbcp-6.0.16.jar my-service-1.0.jar my-model-1.0.jar Web App ClassLoader hibernate-core-3.3.0.jar jdom-1.0.jar www.xebia.fr / blog.xebia.fr 11
  • 12. La modularité en Java L’existant : les classloaders hiérarchiques JVM Classloader Servlet Engine Spring-2.5.jar ClassLoader my-service-1.0.jar Impossible Web App my-model-1.0.jar ClassLoader cxf-2.1.jar Spring-2.0.jar Il est aujourd’hui impossible de charger deux versions d’un même jar dans une web app ! www.xebia.fr / blog.xebia.fr 12
  • 13. La modularité en Java L’existant : maven 2 Maven 2  Versionnage des jar  Description des dépendances <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> <modelVersion>4.0.0</modelVersion> <name>My Service</name> <groupId>com.mycompany</groupId> version <artifactId>my-service</artifactId> <packaging>jar</packaging> <version>1.0</version> <dependencies> dépendances <dependency> <groupId>com.mycompany</groupId> <artifactId>my-backend</artifactId> <version>1.0</version> </dependency> </dependencies> </project> www.xebia.fr / blog.xebia.fr 13
  • 14. La modularité en Java L’existant : maven 2 Les limitations  Dépendances explicites seulement au build (pas runtime)  Pas de visibilité bundle Les défis  Qualité des méta-données  Dépendances transitives  Conflits de versions  Dépendances par nom de bundle vs. par package www.xebia.fr / blog.xebia.fr 14
  • 15. La modularité en Java Le futur : JSR 291 : Dynamic Component Support for Java SE  OSGi rejoint le JCP  OSGi  Unité de travail : le bundle  Gère la visibilité des bundles et leur dépendances, leur versionning  Dynamique (cycle de vie des bundles géré au runtime)  Orienté service » Les bundles publient des services dynamiquement » Recherche de services » Bind » Cycle de vie des services lié aux bundles qui les supportent www.xebia.fr / blog.xebia.fr 15
  • 16. La modularité en Java Le futur : JSR 277 – Java Module System  Associé à JSR 294 - super packages  Utilisation des annotations Java 5 pour décrire les dépendances et les version @Version("1.0") @ImportModules({ @ImportModule(name="com.mycompany.mybackend", version="1.0+") }) super package com.mycompany.myservice { export com.mycompany.myservice.*; } Vive opposition des partisans d’OSGI www.xebia.fr / blog.xebia.fr 16
  • 17. OSGi Alliance L’histoire Le fonctionnement OSGi Alliance et le JCP www.xebia.fr / blog.xebia.fr
  • 18. OSGi Alliance L’histoire  Consortium créé en 1999  Objectifs initiaux : Java dans le monde embarqué (domotique, automobile, telco, etc)  Membres : EDF, Siemens, BMW, Ericsson, Nokia, Motorola, Sprint, IBM, SpringSource, Sun, etc  Date clefs » 1999 : l’embarqué et networked devices, la domotique, l’automobile » 2003 : les télécommunications » 2004 : virage open source (Eclipse) » 2006 : server side Java  Besoin d’être léger et dynamique dès l’origine Besoin d’isolation des composants fournis par différents éditeurs www.xebia.fr / blog.xebia.fr 18
  • 19. OSGi Alliance Le fonctionnement  Les experts group  Core platform EG  Vehicle EG  Mobile EG  Entreprise EG  Residential EG  Entreprise Expert Group  Gestion de la scalabilité (multi-conteneur, multi-processeurs)  Ouverture à d’autres languages  Distribué (SCA)  Intégration à JavaEE  Modèle de composants (Spring DM) www.xebia.fr / blog.xebia.fr 19
  • 20. OSGi Alliance OSGi et le JCP  1999 : JSR 8 – OSGi specification => retirée en 1999  2006 : JSR 291- Dynamic Component Support for JavaTM SE  Spec Lead : IBM  Craintes que le JCP n’ai qu’un rôle de validation du travail de l’OSGi Alliance  Craintes du chevauchement avec JSR 277 – Java Module System  2008 : Sun embauche Richard Hall (Apache Felix) => intégration d’OSGi dans Glassfish www.xebia.fr / blog.xebia.fr 20
  • 21. OSGi Alliance OSGi et le JCP Une communauté plus fermée que le JCP ? OSGi Alliance JCP Direction Partagée Exclusive Sun Membres Principalement des entreprises Variés : entreprises, universitaires, individuels Spécifications release Public Public Spécifications drafts Membres payants Public TCK Membres payants Membres payants + OSS Reference Impl Membres payants Public Débats Confidentiels De plus en plus publics OSGi Alliance Full Membership : 20 k$/an www.xebia.fr / blog.xebia.fr 21
  • 22. La plateforme OSGI Les bundles Le réseau de classloader www.xebia.fr / blog.xebia.fr
  • 23. La plateforme Les bundles Les c du ontra Ma inte nife s  Unité de déploiement sur la plateforme st  Un simple jar  Plus quelques entrées dans META-INF/MANIFEST.MF  Peut être utilisé hors contexte OSGi Description du bundle Déclaration des dépendances niveau package Déclaration des packages exportés www.xebia.fr / blog.xebia.fr 23
  • 24. La plateforme Les bundles  Le versionning  major.minor.micro.qualifier » 3.4.0.v20080603-2000  [version, version]  (version, version)  [version, version) www.xebia.fr / blog.xebia.fr 24
  • 25. La Plateforme Le réseau de ClassLoaders gui-grand-public-1.9 domaine-metier-1.3 web-services-1.7 dao&cache-1.1 domaine-metier-1.2 web-services-1.6 Audit&logs-1.0 Exemple de graphe de modules www.xebia.fr / blog.xebia.fr 25
  • 26. La Plateforme Le réseau de Class Loaders Classloader domaine-metier-1.2 web-services-1.6 filtrant MANIFEST Audit&logs-1.0 Import-package … MANIFEST Export-package : … Import−Package: demo.audit;version=1.0.0 Export−Package: demo.audit;version=1.0.0 Seulement les classes de demo.audit www.xebia.fr / blog.xebia.fr 26
  • 27. La plateforme Le conteneur  Environnement d’exécution des bundles  Standalone ou embarqué  Gère le cycle de vie des bundles www.xebia.fr / blog.xebia.fr 27
  • 28. La plateforme Le cycle de vie des bundles www.xebia.fr / blog.xebia.fr 28
  • 29. La plateforme Le Service Registry  Cœur du framework  Gère les services. Permet de  Publier des services  Rechercher des services  Binder des services  Découplage entre services www.xebia.fr / blog.xebia.fr 29
  • 30. Assemblage des services OSGI BundleActivator et ServiceTracker Gestion du cycle de vie du Bundle Enregistrement du service Dé-enregistrement implicite du service www.xebia.fr / blog.xebia.fr 30
  • 31. Assemblage des services OSGI BundleActivator et ServiceTracker Le manifest sert à déclarer le Bundle-Activator Déclaration de l’Activator www.xebia.fr / blog.xebia.fr 31
  • 32. Assemblage des services OSGI BundleActivator et ServiceTracker Gestion du cycle de vie du Bundle Création du ServiceTracker Injection du ServiceTracker Fermeture du ServiceTracker www.xebia.fr / blog.xebia.fr 32
  • 33. Assemblage des services OSGI BundleActivator et ServiceTracker Injection du ServiceTracker Résolution du service à chaque utilisation Gestion de l’indisponibilité Le ServiceTracker est intrusif sur le code ! www.xebia.fr / blog.xebia.fr 33
  • 34. Assemblage des services OSGI BundleActivator et ServiceTracker Enregistrement d’une servlet sur le HttpService Surcharge des méthodes addingService(…) et removedService(…) ServiceTracker devient vite lourd à gérer ! www.xebia.fr / blog.xebia.fr 34
  • 35. Assemblage des services OSGI BundleActivator et ServiceTracker  Mécanisme de gestion des dépendances le plus stable et mature d’OSGi  Très en retard par rapport aux mécanismes d’injection de dépendances Java actuels (EJB 3, Spring, Google Juice, etc)  Contraint par les limites des Execution Environments OSGI ? www.xebia.fr / blog.xebia.fr 35
  • 36. Assemblage des services OSGI Declarative Service  Créé en 2005 (OSGI R4)  Mis à jour via la RFC 134 www.xebia.fr / blog.xebia.fr 36
  • 37. Assemblage des services OSGI Declarative Service  Semble peu utilisé  Techniquement limité  Ne gère pas les dépendances intra-bundles  Remis en cause par RFC 124 (Spring DM) www.xebia.fr / blog.xebia.fr 37
  • 38. Assemblage des services OSGI Spring DM  En cours de standardisation pour OSGi R4.2  RFC 124 www.xebia.fr / blog.xebia.fr 38
  • 39. La plateforme Les services  Exemples  Log Service  Http Service  Configuration Admin Service  Preferences Service  Event Admin Service  Plus orientés embarqué / J2ME que informatique de gestion / Java 5+  Fonctionnalités limitées  Ex: HttpService ne gère ni les Filter ni les ServletContextListener www.xebia.fr / blog.xebia.fr 39
  • 40. La plateforme Les implémentations Open Source  Eclipse Equinox  Apache Felix  Knopflerfish (maintenu par Makewave)  ProSyst Open Source mBedded Server Equinox Edition  Newton Project  La liste complète  http://www.osgi.org/Markets/HomePage www.xebia.fr / blog.xebia.fr 40
  • 41. La plateforme Les chantiers en cours  Spécifiés dans le draft sur OSGi R4.2  Ajout de services « Java EE »  RFC 98: gestion des transaction via JTA et/ou XA  RFC 119: OSGi distribué » Appel de services distants  Nouveau modèle de composant  En concurrence avec Declarative Service (OSGI R4 !)  RFC 124 – « A Component Model for OSGi » » Standardisation de Spring DM www.xebia.fr / blog.xebia.fr 41
  • 42. Demo OSGi Description  Un service dépend d’un backend  Un service expose une servlet  Les composants utilisent Log4j  Upgrade à chaud du service www.xebia.fr / blog.xebia.fr 42
  • 43. Demo OSGi Bundles & packages backend-service-1.0 backend-service-1.1 business-service-1.0 log4j-1.2.13 javax.servlet.*-2.4 org.osgi.service.http.*-1.2.0 www.xebia.fr / blog.xebia.fr 43
  • 44. Demo OSGi Import d’un service backend-service-1.0 backend-service-1.1 business-service-1.0 log4j-1.2.13 javax.servlet.*-2.4 org.osgi.service.http.*-1.2.0 www.xebia.fr / blog.xebia.fr 44
  • 45. Demo OSGi Exposition d’une servlet backend-service-1.0 backend-service-1.1 business-service-1.0 log4j-1.2.13 javax.servlet.*-2.4 org.osgi.service.http.*-1.2.0 www.xebia.fr / blog.xebia.fr 45
  • 46. Demo OSGi Upgrade à chaud d’un bundle backend-service-1.0 backend-service-1.1 business-service-1.0 log4j-1.2.13 javax.servlet.*-2.4 org.osgi.service.http.*-1.2.0 www.xebia.fr / blog.xebia.fr 46
  • 47. Demo OSGi Log4j ! backend-service-1.0 backend-service-1.1 business-service-1.0 log4j-1.2.13 javax.servlet.*-2.4 log4j bundle fragment Log4j.properties org.osgi.service.http.*-1.2.0 www.xebia.fr / blog.xebia.fr 47
  • 48. OSGi dans le monde Java EE Client side Server Side www.xebia.fr / blog.xebia.fr
  • 49. OSGi dans le monde Java EE Client side  Eclipse RCP  1ère utilisation d’OSGi dans le monde Open Source  Ajout de fonctionnalités propriétaires » Eclipse-BuddyPolicy et Eclipse-RegisterBuddy » Les Features » La gestion des updates » Les extensions  Limitations Cycle de vie des plugins : On redémarre toujours Eclipse après avoir activé un plugin www.xebia.fr / blog.xebia.fr 49
  • 50. OSGi dans le monde Java EE Server side – Middlewares  Isolation middleware / application  Isolation des composants du middleware (multi versions)  Lifecycle (start, stop, install, uninstall) exports OSGi stricts pour éviter les conflits Logging avec les dépendances Service Mon Application des applications High Availability Service javax.servlet.* javax.** … Messaging Service javax.servlet.http.* … JMS 1.1 Servlet 2.4 Servlet 2.5 EJB 2.1 EJB 3.0 Tx Service Container Container Container Container JTA 1.0.1B OSGI Container JVM www.xebia.fr / blog.xebia.fr 50
  • 51. OSGi dans le monde Java EE Server side - Middlewares  Websphere 6.1 (2006) est full-osgi  Classloader OSGI pour isoler les applications du middleware  Equinox est le conteneur de Websphere  Tous les jars sont osgi-fiés (repository IBM)  Compositions Application Server, ESB, Process Server, Portal, Telecom Server  Weblogic 10 (2007) utilise OSGI  Plusieurs jars sont osgi-fiés  Glassfish  Glassfish démarre sur Equinox et Knopflerfish www.xebia.fr / blog.xebia.fr 51
  • 52. OSGi dans le monde Java EE Server side - Middlewares  Service Mix 4  Réécriture full OSGI / Spring DM de ServiceMix  Service Mix Kernel est un enrichissement d’un conteneur OSGI  Possibilité de déployer des médiations en packaging JBI ou OSGI  Spring DM  Propose OSGI en alternative à Java EE  Autres acteurs Java EE : Jonas, JBoss Ces projets utilisent-ils OSGI basic ? ServiceTracker ? www.xebia.fr / blog.xebia.fr 52
  • 53. Bonnes pratiques OSGi Les enjeux d’OSGi pour Java EE www.xebia.fr / blog.xebia.fr
  • 54. Bonnes pratiques  Préférer Import-Package à Require-Bundle  Utilisation des ranges de versions  Bien designer ses bundles  Prévoir le couplage de ses bundles  Ne pas tout mettre dans un bundle  Séparer les APIs exportées des implémentations  Penser Orienté Service  Gérer le cycle de vie des dépendances  ServiceTracker, Spring DM, Declarative Service www.xebia.fr / blog.xebia.fr 54
  • 55. Les enjeux d’OSGi pour Java EE  L’utilisation d’anti-pattern OSGi  Class.forName / Factory Pattern  System.exit()  Réutilisation des libraries existantes non-OSGi  Repackaging et prolifération de repositories OSGi.org, Spring, Servicemix, IBM (privé), etc  Modification du source code (http://www.dynamicjava.org/)  Bytecode patching au runtime (knoplerfish)  Gestion des meta données  OSGi: Entrées dans le manifest  Java Module System: annotations et nouvelle syntaxe java www.xebia.fr / blog.xebia.fr 55
  • 56. Les enjeux d’OSGi pour Java EE  Problématique cross-bundle  AOP  Sécurité  Transaction  Testabilité des bundles  Packaging des applications  Archive .par chez Spring  Features chez eclipse www.xebia.fr / blog.xebia.fr 56
  • 57. Conclusion  Socle robuste et éprouvé  Répond à des problématiques techniques complexes  Manque de maturité dans le monde Java EE  En pleine évolution pour les aspects Java EE www.xebia.fr / blog.xebia.fr 57
  • 58. Questions www.xebia.fr / blog.xebia.fr 58
  • 59. Sponsors 14/10/2008 OSGI www.parisjug.org Copyright © 2008 ParisJug. Licence CC – Creative Commons 2.0 France – Paternité – Pas d'Utilisation Commerciale – Partage des Conditions Initiales à l'Identique
  • 60. Merci de votre attention! www.parisjug.org Copyright © 2008 ParisJug. Licence CC – Creative Commons 2.0 France – Paternité – Pas d'Utilisation Commerciale – Partage des Conditions Initiales à l'Identique
  • 61. Licence http://creativecommons.org/licenses/by-nc-sa/2.0/fr/ 14/10/2008 OSGI www.parisjug.org Copyright © 2008 ParisJug. Licence CC – Creative Commons 2.0 France – Paternité – Pas d'Utilisation Commerciale – Partage des Conditions Initiales à l'Identique