Objectifs des approches distribuées Vue macroscopique



Yüklə 445 b.
tarix28.10.2017
ölçüsü445 b.



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



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



Développement du serveur

  • 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

  • Reçoit une référence sur le mandataire du serveur

  • 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




Yüklə 445 b.

Dostları ilə paylaş:




Verilənlər bazası müəlliflik hüququ ilə müdafiə olunur ©muhaz.org 2020
rəhbərliyinə müraciət

    Ana səhifə