Télécharger la présentation
La présentation est en train de télécharger. S'il vous plaît, attendez
1
EPU SI4 - 2008 1 Mireille Blay-Fornarino blay@essi.fr http://www.polytech.unice.fr/~blay/ENSEIGNEMENT/AppRep/ http://www.polytech.unice.fr/~pinna/Sar/AppRep/ Voir les cours qui ont servi de référence dans la bibliographie Introduction : Applications réparties par objets
2
2 EPU SI4 - 2008 Objectifs Sensibilisation au besoin dintégration des applications logicielles réparties en contexte industriel Conception dArchitectures logicielles Acquisition de connaissances sur les modèles existants pour les applications réparties RMI, CORBA, JNDI, JMS, Puis dans le domaine de linternet : SOAP & Services web, Ajax, Bases de lapproche Intergiciel Principes directeurs, organisation, usage Fonctionnement interne ( au coeur de …)
3
3 EPU SI4 - 2008 Entreprise virtuelle : illustration c u t divKgraduF () Mireille Blay-Fornarino Assemblage de ressources de Stockage, Calculs, réseaux => B2B
4
4 EPU SI4 - 2008 Pourquoi utiliser des applications réparties ?
5
5 EPU SI4 - 2008 Les 8 erreurs conceptuelles 1. Le réseau est fiable. 2. La latence est nulle. 3. La bande passante du réseau est infinie. 4. Le réseau est sécurisé. 5. La topologie de lapplication est « éternelle » 6. Il y a un seul administrateur du réseau 7. Le coût du transport est nul. 8. Le réseau est homogène. Annick Fron
6
6 EPU SI4 - 2008 Propriétés à prendre en compte Hétérogénéité Hardware Langages Ressources Contexte dusage Désignation/localisation Migration Mobilité Ubiquité Evolution Mireille Blay-Fornarino Distribution Equilibrage de charge Parallélisation Décentralisation Couplage Prise de décision Contrôle de laccès concurrent Serveurs parallèles Données réparties synchronisation de l'accès aux ressources, Gestion des transactions
7
7 EPU SI4 - 2008 Propriétés à prendre en compte Sécurité authentification (certificats) sécurisation des communications (cryptage) contrôle daccès (autorisation) Dimensionnement croissance du nombre de clients « duplication des serveurs », « gestion de caches » gigantesque quantité de données Grain des informations : plans de vol journalier ou pistes radar à la seconde ? Tolérance aux fautes site en panne ou inaccessible « redondance des serveurs » « fonctionnement en mode dégradé » Mireille Blay-Fornarino
8
EPU SI4 - 2008 8 Bus logiciel ? Principes de base de larchitecture des intergiciels Via RMI et CORBA …
9
EPU SI4 - 2008 9 1. Au début était la socket Service 1 : Hello world Une méthode hello avec un paramètre de type chaîne et retourne une chaîne : hello, + paramètre Daprès Raphael.Marvie@lifl.fr et Sacha KrakowiakRaphael.Marvie@lifl.fr Et (cf. références en bas des pages)
10
10 EPU SI4 - 2008 Principe Deux programmes écrits en deux classes Java Une pour le serveur Server.java Une pour le client Client.java Dans chaque classe est implémenté Le code fonctionnel : manipulation des chaînes Le code technique : construction / analyse des messages réseau
11
11 EPU SI4 - 2008 Architecture version « socket » Client Réseau Serveur
12
12 EPU SI4 - 2008 Modélisation des Interactions
13
13 EPU SI4 - 2008 Côté serveur Initialisation du réseau Instanciation dune socket serveur Gestion des requêtes Attente de connexion (accept) Initialisation des flux dentrée et de sortie Evaluation des requêtes Lecture de la requête sur le flux dentrée Création de la chaîne à retourner Ecriture de la réponse sur le flux de sortie
14
14 EPU SI4 - 2008 Code serveur (i) package step1 ; import java.io.* ; import java.net.* ; public class Server { private ServerSocket asock ; public Server () throws Exception { this.asock = new ServerSocket (12345) ; } public static void main (String args[]) { Server s = new Server () ; s.run () ; }
15
15 EPU SI4 - 2008 Code serveur (ii) public void run () throws Exception { while (true) { Socket sock = this.asock.accept () ; BufferedReader in = new BufferedReader (new InputStreamReader(sock.getInputStream ())); DataOutputStream out = new DataOutputStream (sock.getOutputStream ()); String msg = in.readLine () ; String res = "Hello, " + msg + "\n" ; // fonctionnel out.writeBytes (res) ; }
16
16 EPU SI4 - 2008 Côté client Initialisation du réseau Instanciation dune socket de communication (connexion implicite) Gestion de léchange réseau Initialisation des flux dentrée et de sortie Demande de service Ecriture de la requête sur le flux de sortie Lecture de la réponse sur le flux entrée Affichage de la chaîne retournée Fermeture de la connexion
17
17 EPU SI4 - 2008 Code client (i) package step1 ; import java.io.* ; import java.net.* ; public class Client { private Socket sock ; public Client () throws Exception { this.sock = new Socket ("localhost", 12345) ; } public static void main (String args[]) throws Exception { Client c = new Client () ; c.run (args[0]) ; }
18
18 EPU SI4 - 2008 Code client (ii) public void run (String msg) throws Exception { BufferedReader in = new BufferedReader (new InputStreamReader(this.sock.getInputStream ())); DataOutputStream out = new DataOutputStream (this.sock.getOutputStream ()); out.writeBytes (msg + "\n") ; String res = in.readLine () ; System.out.println ("Server replied: " + res) ; this.sock.close(); }
19
19 EPU SI4 - 2008 Bénéfices et limitations Bénéfices Invocation dun service distant (hello world) Permet de réaliser des applications client / serveur Parmi les limitations Une seule connexion cliente à la fois Un seul service ciblé Beaucoup de code très technique / peu de code métier (40 lignes de code technique pour une ligne de code métier) Un beau plat de spaghettis, difficilement évolutif
20
EPU SI4 - 2008 20 … et il y eut les Applications à base dobjets répartis Comparaison RMI et CORBA Applications Réparties AM Dery & M. Blay-Fornarino Merci à Rémi Vankeisbelck, Michel Riveill, Annick Fron, etc
21
21 EPU SI4 - 2008 Objectifs des objets répartis : RAPPELS 1) « utiliser » un objet distant (OD), sans savoir où il se trouve: ObjetDistant = ServiceDeNoms.recherche("monObjet"); 2) invoquer des méthodes comme en local : objetDistant.nomMethode(Parametres); 3) « passer » un OD en paramètre dappel à une méthode resultat = objetLocal.nomMethode(objetDistant); resultat = objetDistant.nomMethode(autreObjetDistant); 4) récupérer le « résultat » dun appel distant sous forme dun nouvel objet qui aurait été créé sur la machine distante : ObjetDistant1 = ObjetDistant2.methode() ;
22
22 EPU SI4 - 2008 Des technologies RMI (Remote Method Invocation) Système dobjets distribués performant destiné au développement dapplications distribuées entièrement en Java CORBA (Common Object Request Broker Architecture) Plate-forme client/serveur orientée objets qui permet de faire communiquer des applications écrites dans des langages différents (C++, Lisp, Smalltalk, Python…) et sur des plateformes (Interopérabilité Langage et Plateformes)
23
EPU SI4 - 2008 23 2. Bus mono-langage : RMI Remote Method Invocation Oui oui… vous savez déjà. Mais un petit rappel… ! Remote/serialisable
24
24 EPU SI4 - 2008 Principe Deux programmes écrits en deux classes Java Une pour le serveur Server.java Une pour le client Client.java Mais cette fois-ci : Des objets « Hello » Un contrat
25
25 EPU SI4 - 2008 Squelette Service Servant Architecture version « RMI » Stub Réseau Client Contrat/ Interface Service Servant Squelette Nommage Servant Squelette RMI System http://java.sun.com/j2se/1.5.0/docs/guide/rmi/relnotes.html Stub=Proxy/Talon Squelette = Proxy/Talon Serveur
26
26 EPU SI4 - 2008 Architecture RMI Client Stub Remote reference layer Serveur Skeleton Remote reference layer TCP/IP, Unicast Java Remote Method Protocol ( JRMP) Pinna -2007
27
27 EPU SI4 - 2008 Contrat : Interface Java import java.rmi.Remote; public interface HelloService extends Remote { public String hello (String msg) throws Exception ; public HelloService getClone(String InitialMessage) throws Exception ; } MBF -2007
28
28 EPU SI4 - 2008 Côté Serveur : Implémentations : Objets Remote public class HelloServiceRemote extends UnicastRemoteObject implements HelloService { int counter = 0; String initialMessage = ""; … private HelloServiceRemote(int count, String message) throws RemoteException initialMessage = message; counter = count; } public String hello(String msg) throws Exception { counter++; return initialMessage + "Hello " + msg + " : tu es le " + counter; } public HelloService getClone(String initialMessage) throws Exception { return new HelloServiceRemote(this.counter,initialMessage); } MBF -2007
29
29 EPU SI4 - 2008 Côté Serveur : Implémentations : Objets Sérialisable import java.io.Serializable; public class HelloServiceSerializable implements HelloService, Serializable { int counter = 0; private String initialMessage = ""; private HelloServiceSerializable(int count, String message) throws RemoteException { … } protected HelloServiceSerializable() throws RemoteException { … } public String hello(String msg) throws Exception { … } public HelloService getClone(String initialMessage) throws Exception { … } MBF -2007
30
30 EPU SI4 - 2008 Code du serveur public class HelloServer { public static void main(String[] args) throws RemoteException, MalformedURLException { HelloService serializedObject = new HelloServiceSerializable(); HelloService remoteObject = new HelloServiceRemote(); Naming.rebind("aSerializedHello", serializedObject); Naming.rebind("aremoteHello", remoteObject); System.out.println("Hellos bound in registry"); } Démarrage du serveur On lance le rmiregistry On lance le serveur
31
31 EPU SI4 - 2008 Côté client public class HelloClient { public static void main(String[] args) { HelloService objLocal = null; HelloService objRemote = null; try { objLocal = (HelloService) Naming.lookup("aSerializedHello"); System.out.println(objLocal.hello("Premier ")); System.out.println(objLocal.hello("deuxieme ")); objLocal = (HelloService) Naming.lookup("aSerializedHello"); System.out.println(objLocal.hello("troisieme ")); MBF -2007
32
32 EPU SI4 - 2008 Côté client public class HelloClient { public static void main(String[] args) { HelloService objLocal = null; HelloService objRemote = null; try { objRemote = (HelloService) Naming.lookup("aremoteHello"); System.out.println(objRemote.hello("Premier ")); System.out.println(objRemote.hello("deuxieme ")); objRemote = (HelloService) Naming.lookup("aremoteHello"); System.out.println(objRemote.hello("troisieme "));
33
33 EPU SI4 - 2008 Côté client Suite du précédent HelloService copieObjRemote = objRemote.getClone("Remote copy : "); System.out.println( copieObjRemote.hello("Premiere copie")); System.out.println(objRemote.hello("l'original")); } MBF -2007
34
34 EPU SI4 - 2008 Bénéfices et limitations Bénéfices Invocation de plusieurs services distants Quasiment pas de code technique Création à distance des objets accessibles Limitations Un seul langage Pas de persistance des références Gestion des Pool dobjets Pas dAssemblage dynamique
35
EPU SI4 - 2008 35 3. "Bus" multi-langages : CORBA Common Object Request Broker Architecture Juste un premier exemple… Introduction à CORBA par comparaison
36
36 EPU SI4 - 2008 Spécificité Corba => ORB la localisation dobjet la désignation des objets lempaquetage des paramètres (marshalling) le dépaquetage des paramètres (unmarshalling) linvocation des méthodes De plus, il fournit des caractéristiques telles que : la gestion des exceptions l activation automatique et transparente des objets la liaison avec « tous » les langages de programmation un système auto-descriptif l interopérabilité entre les bus I.5. OMA ORB
37
37 EPU SI4 - 2008 Squelette Service Servant Architecture version « CORBA» Stub orb Nommage Servant Client Contrat/ Interface IDL Service Servant Squelette CORBA System http://java.sun.com/j2se/1.5.0/docs/guide/rmi/relnotes.html Stub=Proxy/Talon Squelette = Proxy/Talon Serveur POA Réseau
38
38 EPU SI4 - 2008 CORBA par comparaison Client Stub Object request broker Serveur Skeleton Object request broker TCP/IP, Unicast GIOP/IIOP Interface IDL
39
39 EPU SI4 - 2008 Points communs et interopérabilité Utilisent les sockets Des Protocoles Un propriétaire : JRMP (Remote Method Protocol) Un protocole normalisé par lOMG: GIOP/IIOP Il existe des implémentations RMI basées sur le protocole RMI-IIOP
40
40 EPU SI4 - 2008 CORBA Modèle de référence OMA Bus dobjets répartis (O.R.B.) Licences TransactionsPersistancePropriétésChangementsEvents NommageVendeurSécuritéRelationsCollectionsTempsExternalisation Interrogations Cycle de vie Concurrence Services objet communs (CORBA Services) Workflow DataWareIHM Administration Utilitaires communs Finance Télécom Santé Interfaces de domaine Objets applicatifs Spécifiques
41
41 EPU SI4 - 2008 Rappel processus RMI Interface HelloWorld Interface HelloWorld Classe dimplémentation HelloWorldImpl Utilisation du registry Code du client Code du serveur
42
42 EPU SI4 - 2008 Étapes de mise en œuvre Corba Spécification interface IDL Compilation interface IDL Implantation des objets Corba Implantation du serveur Enregistrement du serveur Implantation du client Côté client Côté serveur Utilisation du service Nommage
43
43 EPU SI4 - 2008 Contrat : IDL CORBA interface HelloService { string hello (in string msg); HelloService getClone(in string InitialMessage); };
44
44 EPU SI4 - 2008 Contrat IDL Bus CORBA Squelette IDL Stub IDL Fournisseur d objets Client dobjets Corba : Interface décrite avec IDL Des projections multi-langages Objets Corba
45
45 EPU SI4 - 2008 Compilation interface IDL vers Java HelloService.java _HelloServiceStub.java HelloServicePOA.java HelloService_Impl.java Client.java Serveur.java Hello.idl HelloServiceHelper.java HelloServiceHolder.java HelloServiceOperations.java jidl À implémenter Généré ServeurClient Utile seulement si utilisation des modes in/inout dans lidl
46
46 EPU SI4 - 2008 Côté Serveur : Implémentation public class HelloServiceImpl extends HelloServicePOA {private org.omg.CORBA.ORB orb_; int counter = 0; String initialMessage = ""; publicHelloServiceImpl(org.omg.CORBA.ORB orb) { orb_=orb; } publicHelloServiceImpl(org.omg.CORBA.ORB orb, int count, String message) { this(orb); initialMessage = message; counter = count; } public String hello(String msg) { counter++; return initialMessage + "Hello " + msg + " : tu es le " + counter; } public HelloService getClone(String InitialMessage) { return (new HelloServiceImpl(orb_,this.counter,initialMessage))._this(orb_); }
47
47 EPU SI4 - 2008 Code serveur public class Server { static int run(org.omg.CORBA.ORB orb, String[] args) throws org.omg.CORBA.UserException { org.omg.PortableServer.POA rootPOA = org.omg.PortableServer.POAHelper.narrow( orb.resolve_initial_references("RootPOA")); org.omg.PortableServer.POAManager manager = rootPOA.the_POAManager(); HelloServiceImpl helloRemoteImp = new HelloServiceImpl(orb); HelloService helloRemote = helloRemoteImp._this(orb); try { String ref = orb.object_to_string(helloRemote); String refFile = "helloRemote.ref"; FileOutputStream file = new FileOutputStream(refFile); PrintWriter out = new PrintWriter(file); out.println(ref); out.flush(); file.close(); …
48
48 EPU SI4 - 2008 Côté client public class Client { static int run(org.omg.CORBA.ORB orb, String[] args) throws org.omg.CORBA.UserException { String ref = null; try { String refFile = "helloRemote.ref"; FileInputStream file = new FileInputStream(refFile); BufferedReader in = new BufferedReader(new InputStreamReader(file)); ref = in.readLine(); file.close(); org.omg.CORBA.Object obj = orb.string_to_object(ref); … HelloService hello = HelloServiceHelper.narrow(obj); System.out.println(hello.hello("premier")); System.out.println(hello.hello("deuxieme")); HelloService helloBis = hello.getClone("copie "); System.out.println(helloBis.hello("copie 1")); return 0; }
49
49 EPU SI4 - 2008 Compilation interface IDL vers C++ Hello.idl Compilateur idl ClientHello_Impl Compilateur C++ Fichiers Souche Fichiers Squelette Client (.exe) Serveur (.exe) Server
50
50 EPU SI4 - 2008 Côté Serveur : Implémentation(1) char* Hello_impl::hello(const char* msg) throw(::CORBA::SystemException) { CORBA::String_var message = ::CORBA::string_dup("Hello"); message += msg; count++; message += count; return message._retn (); }
51
51 EPU SI4 - 2008 Côté Serveur : Implémentation(2) ::Hello_ptr Hello_impl::getClone(const char* InitialMessage) throw(::CORBA::SystemException) { Hello_impl* helloImpl = new Hello_impl(orb_, poa_); helloImpl->count = this->count; … Hello_var hello = helloImpl -> _this(); return hello._retn(); … }
52
52 EPU SI4 - 2008 Le programme Server #include using namespace std; int run(CORBA::ORB_ptr); int main(int argc, char* argv[]) {int status = EXIT_SUCCESS; CORBA::ORB_var orb; try{ orb = CORBA::ORB_init(argc, argv); status = run(orb, argc, argv); }
53
53 EPU SI4 - 2008 Le programme Server … PortableServer::POA_var rootPOA = PortableServer::POA::_narrow( CORBA::Object_var(orb -> resolve_initial_references("RootPOA"))); … Hello_impl* helloImpl = new Hello_impl(orb, rootPOA); Hello_var hello = helloImpl -> _this(); CORBA::String_var s = orb -> object_to_string(hello); const char* refFile = "Hello.ref"; FILE* f = fopen(refFile, "w"); fputs(s.in(), f); fclose(f); …….
54
54 EPU SI4 - 2008 Le programme Client #include using namespace std; int run(CORBA::ORB_ptr); int main(int argc, char* argv[]) {int status = EXIT_SUCCESS; CORBA::ORB_var orb; try {orb = CORBA::ORB_init(argc, argv); status = run(orb); }
55
55 EPU SI4 - 2008 Le programme Client (suite) run(CORBA::ORB_ptr orb, int /* argc */, char* argv[]) { CORBA::Object_var obj = orb -> string_to_object("relfile:/Hello.ref"); Hello_var hello = Hello::_narrow(obj); CORBA::String_var reply = CORBA::string_dup(""); reply = hello -> say_hello("Premier"); std::cout << reply << std::endl; Hello_var helloCopy=hello -> getClone("copie"); reply = helloCopy -> say_hello("copie"); std::cout << reply << std::endl; }
56
EPU SI4 - 2008 56 Bus logiciel : …. Communications … MOM (Message Oriented Middleware) ou RPC (Remote Procedure Call)
57
57 EPU SI4 - 2008 Echanges de messages JMS Principe : Production de messages Consommation des messages Tous clients du « bus »!
58
58 EPU SI4 - 2008 Appel de procédure à distance RMI,CORBA,.NET remoting, SOAP, … Principe : Invocation dun service (contexte dappel) Attente bloquante* des résultats
59
EPU SI4 - 2008 59 Bus logiciel en résumé Un bus logiciel repose essentiellement sur deux concepts La désignation dun service (les références) La liaison avec un service distant (établir une connexion) Un intergiciel (middleware) est un « programme » qui permet de faire communiquer des machines entre-elles, indépendamment de la nature du processeur, du SE, voire du langage.
60
60 EPU SI4 - 2008 Classes dintergiciels Objets répartis Java RMI, CORBA, DCOM,.NET Composants répartis Java Beans, Enterprise Java Beans, CCM Message-Oriented Middleware (MOM) Message Queues, Publish-Subscribe Intégration dapplications Web Services Coordination Accès aux données, persistance Support dapplications mobiles
61
61 EPU SI4 - 2008 Architecture générale dun bus logiciel
62
62 EPU SI4 - 2008 Définitions dinterfaces Partie opérationnelle Interface Definition Language (IDL) Pas de standard indépendant IDL CORBA Java et C# définissent leur propre IDL WSDL … Partie contractuelle Plusieurs niveaux de contrats Sur la forme : spécification de types -> conformité syntaxique Sur le comportement (1 méthode) : assertions -> conformité sémantique Sur les interactions entre méthodes : synchronisation Sur les aspects non fonctionnels (performances, etc.) : contrats de QoS C 2003 - Sacha Krakowiak
63
63 EPU SI4 - 2008 L amorce client (stub) Représentant local de l OD qui implémente ses méthodes « exportées » Transmet l invocation distante à la couche inférieure Remote Reference Layer / ORB Il réalise le pliage (« marshalling ») des arguments des méthodes distantes Dans l autre sens, il réalise le dépliage (« demarshalling ») des valeurs de retour
64
64 EPU SI4 - 2008 L amorce serveur (Skeleton) Réalise le dépliage des arguments reçus par le flux de pliage Fait un appel à la méthode de l objet distant Réalise le pliage de la valeur de retour
65
65 EPU SI4 - 2008 La couche des références distantes Permet l obtention d une référence d objet distant à partir de la référence locale au Stub : un service dannuaire Rmiregistry en RMI Service de nommage Naming en Corba JNDI Interface dannuaire
66
66 EPU SI4 - 2008 La couche de transport Connecte les 2 espaces d adressage (JVM pour Java) Suit les connexions en cours Ecoute et répond aux invocations Construit une table des OD disponibles Réalise l aiguillage des invocations Sécurité ?
67
67 EPU SI4 - 2008 Diagramme d interaction StubSkeletonImplementation invoke Marshal param Send req. Unmarshal param Invoke impl. Return result Return return or exc. Marshal return or exc. Send reply Unmarshal reply Return value or exc
68
68 EPU SI4 - 2008 Bibliographie École dété sur les Intergiciels et sur la Construction dApplications Réparties : Patrons et Canevas pour lIntergiciel Sacha Krakowiak, ICAR 2003 Dis papa, cest quoi un bus logiciel réparti ? Raphael.Marvie@lifl.fr LIFL – IRCICA Equipe GOAL Décembre 2003
69
69 EPU SI4 - 2008 Quelques livres... Core Java Volume 2 Par Cay S. Horstmann & Gary Cornell Editions CampusPress Une référence pour les développeurs Java Bonne section sur RMI, servi de base pour ce cours Java Distributed Computing Par Jim Farley Editions O'Reilly Tout sur les applications reparties avec Java Plus technique... Architectures réparties en Java Par Annick Fron (2007) Edition Dunod RMI, CORBA, JMS, Sockets, SOAP, services web
Présentations similaires
© 2024 SlidePlayer.fr Inc.
All rights reserved.