|
Objectifs des approches distribuées Vue macroscopique
|
tarix | 28.10.2017 | ölçüsü | 445 b. | | #18375 |
|
Objectifs des approches distribuées Vue macroscopique Développer des applications dont les services sont répartis sur plusieurs machines interconnectées par un réseau Contraintes - Développement similaire à une approche centralisée
Moyens : masquer les "détails" - "Détails" du réseau => On ne connaît pas la localisation
- "Détails" des langages utilisés => On ne connaît pas l'implantation
Quelques architectures OSF (Open Software Foundation) - Distributed Computing Environnement
Microsoft - Distributed Component Object Model
OMG (Object Management Group) - Common Object Request Broker Architecture (CORBA)
Sun - EJB (Enterprise Java Beans)
CORBA Fondé sur le modèle client/serveur s'échangeant des valeurs Une architecture Un langage de description des services offerts - IDL : Interface Definition Language
Un modèle d'échange d'informations - Valeurs atomiques, Valeurs Contruites et Références d'objet
Mais surtout une spécification papier de l'ORB et des services
Problématique Vue microscopique Service ==> appel des méthodes
Principe des échanges Fournir des objets de service qui vont servir d'intermédiaires pour le client et le serveur
Fonctionnement
Développement Définition de l'interface IDL du composant (objet serveur) - mandataires client (client stubs)
- mandataires serveurs (serveur skeleton)
Développement du serveur qui implante les services Développement d'un lanceur capable d'instancier le serveur et de le rendre disponible sur le bus corba (création du skeleton) Inscription du lanceur sur le bus(ajout dans le référentiel) ------------------------- Insertion dans le client des appels au serveur (connexion sur le serveur via le stub et invocation des méthodes distantes)
Un exemple Un composant Requête sur une base de données - Le composant maintient une connexion sur une base
- Il contient une méthode d'invocation
- Chaine [] executerRequete (Chaine commandeSQL);
OMG-IDL : Définition Langage de spécification des interfaces - Orienté Objet
- Opérations et Attributs
- Héritage simple et multiple
- Exceptions
Conçu pour être mappé sur de nombreux langages de programmation - Java, C, C++ , Smalltalk, Ada, Cobol, Modula3
OMG-IDL <=> «Interfaces» Java, «Classes Abstraites» du C++
IDL typedef sequence tableaux_resultat; interface REQUETE { tableaux_resultat executer_req_array(in string req); }; --> Compilation : idl -jPacces_bd requete.idl (sous OrbixWeb) Mandataire client : REQUETE.java Service client pour demander un proxy : REQUETEHelper.java Mandataire serveur : _tie_REQUETE.java Interface de développement du serveur : _REQUETEOperations
Garantit que toutes les fonctions sont implantées N'importe quel langage sur lequel est défini un mapping ------------- Implante REQUETE_Operations package acces_bd; public interface _REQUETEOperations { public String[] executer_req_array(String req); }
Développement du serveur package acces_bd; import java.sql.*; import java.util.Vector; class REQUETEImplementation implements _REQUETEOperations { Connection con=null; public REQUETEImplementation() { try { DriverManager.registerDriver (new oracle.jdbc.driver.OracleDriver ()); } catch (Exception raison1) { System.out.println("pb pendant new oracle.jdbc.driver....."); } try { con = DriverManager.getConnection ("jdbc:oracle:thin:@lisiaix0.insa-lyon.fr:1526:INSA", "bcb", "bcb"); } catch (Exception raison2) { System.out.println("pb pendant get connection jdbc....."); } }
Développement du serveur public String[] executer_req_array(String req){ String resultat[]; Vector resultvector=new Vector(); Statement stmt=null; ResultSet rs=null; int ncols=0; try { // Lancement de la requête stmt = con.createStatement(); rs = stmt.executeQuery(req); ncols= rs.getMetaData().getColumnCount(); }catch (Exception ex) {//code d'erreur} try { while (rs.next) { for (int i=1; i<=ncols; i++) resultvector.addElement(rs.getString(i));} }catch (Exception ex) { } resultat =new String[resultvector.size()]; resultvector.copyInto(resultat); return resultat;}
Développement du lanceur (adapteur d'objet) Enregistre les classes d’implantation des serveurs Active / désactive les serveurs Génération / interprétation des références sur les objets Plusieurs types en fonction de la nature du serveur
Développement du lanceur package acces_bd; public class composantserv { public static void main (String args []) { REQUETE REQUETEImpl=null; //Nom du mandataire REQUETEImplementation tmp=null; //Nom du serveur try { tmp=new REQUETEImplementation(); REQUETEImpl = new _tie_REQUETE(tmp); }catch(SystemException se1) { } try { IE.Iona.OrbixWeb._CORBA.Orbix.impl_is_ready("SERVICEREQUETES");} catch(SystemException se) {} } }
Inscription du lanceur putit -j LAREQUETE acces_bd.composantserv Implantation sur le système de fichiers du serveur Annuaire des objets du système distribué (Interface Repository) - Banque d’objets métiers de l’entreprise
- Accessible à l’ORB et aux développeurs
Possibilité de fédération d’IR
Liste des services
Le fichier de définition
Développement du client Se connecte sur le service d'intermédiation Demande l'accès à un service particulier Peut invoquer des méthodes sur les mandataires serveurs pour récupérer des valeurs. Aussi simple que si l'objet serveur est local
Développement du client package acces_bd; public class composantcli { public static void main(String args[]) { REQUETE myreq = null; String [] reponse=new String [0]; ORB.init(); //Initialisation de l'accès à l'ORB try { myreq = REQUETEHelper.bind(":LAREQUETE","lisisun1.insa-lyon.fr); } catch (Exception raison) { // } String req= "select * from tab"; try { reponse=myreq.executer_req(req); }catch (Exception raison){ } for (int i=0; i System.out.println(reponse[i]); }}}
Classes impliquées sur le client
Classes impliquées sur le serveur
Les Services CORBA
OMG Services
Un autre exemple : Médicaments typedef sequence liste_chaine; interface Medicaments { attribute string code_cip; attribute string nom_medicament; liste_chaine donner_indications(in string code_cip); liste_chaine donner_contre_indications(in string code_cip); liste_chaine donner_effets_indesirable(in string code_cip); struct_interac donner_interactions(in string code_cip1,in string code_cip2);}; struct resultat_interactions { string principe_actif1; string principe_actif2; string nom_pa1; string nom_pa2; string libelle_gravite; string libelle_message; string type_interaction; }; typedef sequence struct_interac;
Canevas de composants
Modes d'invocation transparent objetDistant.methode( ); objetDisant=ServicedeRecherche.recherche("UnObjet"); resultat=objetLocal.methode(objetDistant); resultat=objetDistant.methode(objetDistant2); ObjetDistant=new ObjetDistant( );
Java est adapté à la distribution Java est adapté pour l'Internet - objet
- syntaxe simple
- portable
- sécurisé
Internet est un réseau pensé pour la distribution - standardisation des protocoles
- expansion mondiale
- coût d'accès réduit
Java EJB /RMI Distribution d'objets sur un réseau Appel standard indépendant de la localisation - Modèle objet non remis en cause
- Sécurisation
- Ramasse Miette
- Implantation aussi simple que si locale
- Réservé à Java + Chargement dynamique des stubs d'invocation
Marché des objets distribués Architectes de canevas de composants Développeurs de composants Intégrateurs de composants ------------------------------------------------- Biblio ? ORB public : HORB, MICO Manuels de Iona, Visigenic... http://www.iona.com, http://www.visigenic.com http://www.omg.org
Dostları ilə paylaş: |
|
|