• Aucun résultat trouvé

Les objets distribués

N/A
N/A
Protected

Academic year: 2022

Partager "Les objets distribués"

Copied!
38
0
0

Texte intégral

(1)

1

Les objets distribués

S. Frénot INSA Lyon 1998

[email protected]

(2)

2

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

(3)

3

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)

(4)

4

CORBA

• Fondé sur le modèle client/serveur s'échangeant des valeurs

• Une architecture

– OMA : Object Management 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

(5)

5

Objet client Objet serveur

Etat ? Service ?

Problématique Vue microscopique

• Service ==> appel des méthodes

• Etat ==> accès aux attributs

Espace 1 Espace 2

(6)

6

Principe des échanges

• Fournir des objets de service qui vont servir d'intermédiaires pour le client et le serveur

Objet client Objet serveur

Espace 1 Espace 2

Echange neutre

Appel spécifique Appel spécifique

(7)

7

Client

Système

Intermédiaire Client

Serveur

Fonctionnement

Espace 1 Espace 2

Système

Intermédiaire Serveur

Mandataire serveur (skeleton) Mandataire

client (stub)

(8)

8

ORB Serveur

Client

ORB Client

Demande de service

Référentiel des Services Recherche du service

Lanceur

Appel du lanceur

Lancement du

mandataire Mandataireserveur

Mandataire client

Fonctionnement lancement

Espace 1 Espace 2

Serveur

Instanciation du serveur

le service est prêt

le

mandataire est prêt

Le client peut invoquer les méthodes du service

(9)

9

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)

(10)

10

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);

(11)

11

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++

(12)

12

 IDL

typedef sequence<string> 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

(13)

13

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);

}

(14)

14

 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...");

} }

(15)

15

 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;}

(16)

16

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

(17)

17

 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) {}

} }

(18)

18

 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

(19)

19

Liste des services

(20)

20

Le fichier de définition

(21)

21

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

(22)

22

 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<reponse.length; i++) { System.out.println(reponse[i]);

}}}

(23)

23

Classes impliquées sur le client

acces_bd

COMPOSANTCLI Main()

omg.org.CORBA

REQUETEHelper static bind() ...

ORB init()

...

Object

REQUETE

classe Classe statique

interface héritage

Classe Abstraite PackagePackage

(24)

24

Classes impliquées sur le serveur

acces_bd omg.org.CORBA

ORB init()

connect() disconnect()

IE.Iona.OrbixWeb._CORBA

Orbix impl_is_ready() ...

REQUETEImplementation _REQUETEOperations

public String[] executer_req_array(String req)

_tie_REQUETE

Object

REQUETE _REQUETESkeletons

ComposantServ

(25)

25

Schéma général de développement

Description d’interface

en IDL

Souches IDL Code des

clients

+

Applications clientes

(5) Implantation des clients

(1) Compilation

IDL Squelettes

IDL

(2)

Implantation des interfaces IDL

Code des classes

(3) Implantation des serveurs

+

Référentiel des Implantation (4) Installation

Configuration des serveurs

(26)

26

Les Services CORBA

La Plomberie CORBA Les Canevas CORBA

OMA : Object Management Architecture

(27)

27

OMG Services

Objets Développés

Spécifiques et non standardisés

Utilitaires Communs

Services orientés utilisateurs

Santé Finance Télécom

verticaux

horizontaux IU Gestion

information Administration Système

Gestion des tâches

Nommage

Externalisation

Persistance

Cycle de vie Evénement

Transactions

Propriétés

Relations

Collections Temps

Sécurité d’accès Versions

Négociateurs Licences

Service Objet Communs

Services orientés systèmes

Concurrence d’accès

Common Object Request Broker Architecture (CORBA)



(28)

28

Un autre exemple : Médicaments

typedef sequence<string> 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<resultat_interactions> struct_interac;

(29)

29

Canevas de composants

Client

ORB

Description des médicaments

Espace 1 Espace 2

Service de requêtage

Espace 3

ORB ORB

(30)

30

Architecture fonctionnelle de l’ORB

Invocation

Dynamique Souches IDL

Interface de l’ORB

Squelettes IDL (statique)

Squelettes Dynamique

Adaptateur d’objets

Noyau de l’ORB

Entrepôt Implantation Entrepôt

des Interfaces

Client Implantation Objet : serveur

Interface standard des ORB Une interface par classe d’objet

Spécifique à l’ORB

(31)

31

Composants de Corba (Spec. V2.0)

• ORB : Négociateur de requêtes objet

• BOA : Adaptateur d’objets

• IDL : Langage de définition des interfaces

• SII : Interface d’invocation statique

• IR : Entrepôt des interfaces et implantations

• Mise en correspondance vers langages hôtes java, c, c++ ...

• IIOP : Communication inter-ORB

• DII : Interface d’invocation dynamique

• DSI : Squelette d’interface dynamique

(32)

32

CORBA, c’est :

• Une architecture complète d’objets distribués

• Des spécifications techniques qui font partie d’un tout : l’OMA

Séparation entre la couche service (IDL) et la

plomberie (ORB)

(33)

33

Limitation des fonctionnalité

• Pas de réponse par rapport aux problèmes classiques des applications distribuées :

– Délais d’attente

– Tolérance aux pannes

– Ordonnancement des événements – Verrou Mortel

• De plus

– Pas de transmission d'objets – Pas de traitements groupés

– Problème des objets à granularité fine

(34)

34

Limitation des performances

• Plus lent qu’une application spécifique

– Surcoût lié à la résolution de noms – Traitement des paramètres

– Recopie de données – Gestion de la mémoire – Démultiplexage

• Probleme classique :

– Trouver l’équilibre entre extensibilité, solidité, maintenabilité et efficacité des couches de bas niveau

• Un bon ORB devrait être capable d’optimiser les

fonctionnalités supérieures

(35)

35

Modes d'invocation transparent

• objetDistant.methode( );

• objetDisant=ServicedeRecherche.recherche("UnObjet");

• resultat=objetLocal.methode(objetDistant);

• resultat=objetDistant.methode(objetDistant2);

• ObjetDistant=new ObjetDistant( );

(36)

36

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

(37)

37

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

(38)

38

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

Références

Documents relatifs

 Caractériser cette socket en terme de communication : -au moins un numéro de port (associé au service) -éventuellement une adresse IP (interface cible).  Lui permettre de

//On associe un paquet à un buffer vide pour la réception DatagramPacket paquet =new DatagramPacket(buffer,buffer.length());. //On crée un socket pour écouter sur le

Serveur en gestion multi--clients clients en en mode connecté. mode

◮ Réponse : message transmis par un serveur à un client suite à l’exécution d’une opération, contenant le résultat

Par exemple, nous pouvons autoriser un accès plus ou moins restreint tous les soirs entre 18 h et 20 h dans la semaine et entre 10 h et 20 h les samedis et dimanches, et tout

– Comment casser la relation forte entre client et serveur, comment rendre le client indépendant du serveur pour l'appel.

Ainsi, lorsqu'un utilisateur se connecte à internet à l'aide d'une application cliente configurée pour utiliser un serveur proxy, celle-ci va se connecter en premier lieu au

En revanche, certaines utilisations comme le continu (streaming) nécessitent l'emploi d'un protocole plus léger et plus rapide, comme UDP (User Datagram Protocol ou protocole