SID32 Corba

publicité
CORBA
Stéphane Frenot - Département Télécommunication - SID -
II - Corba 120
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
Stéphane Frenot - Département Télécommunication - SID -
II - Corba 121
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)
Stéphane Frenot - Département Télécommunication - SID -
II - Corba 122
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
Stéphane Frenot - Département Télécommunication - SID -
II - Corba 123
Problématique
Vue microscopique
Service ?
Etat ?
Objet client
Espace 1
Objet serveur
Espace 2
• Service ==> appel des méthodes
• Etat ==> accès aux attributs
Stéphane Frenot - Département Télécommunication - SID -
II - Corba 124
Principe des échanges
Espace 2
Espace 1
Objet client
Objet serveur
Appel spécifique
Appel spécifique
Echange neutre
• Fournir des objets de service qui vont servir
d'intermédiaires pour le client et le serveur
Stéphane Frenot - Département Télécommunication - SID -
II - Corba 125
Fonctionnement
Serveur
Client
Mandataire
client
(stub)
Système
Intermédiaire Client
Espace 1
Mandataire
serveur
(skeleton)
Système
Intermédiaire Serveur
Espace 2
Stéphane Frenot - Département Télécommunication - SID -
II - Corba 126
Fonctionnement lancement
Le client peut invoquer les
méthodes du service
Client
Demande
de service
Mandataire
client
le
mandataire
est prêt
Instanciation du serveur
Lanceur
Serveur
Lancement du
mandataire
Appel du
lanceur le service est
Mandataire
serveur
prêt
ORB Client
ORB Serveur
Recherche du service
Référentiel
des
Services
Espace 1
Espace 2
Stéphane Frenot - Département Télécommunication - SID -
II - Corba 127
Développement
1) Définition de l'interface IDL du composant (objet serveur)
– mandataires client (client stubs)
– mandataires serveurs (serveur skeleton)
2) Développement du serveur qui implante les services
3) Développement d'un lanceur capable d'instancier le serveur
et de le rendre disponible sur le bus corba (création du
skeleton)
4) Inscription du lanceur sur le bus(ajout dans le référentiel)
------------------------5) Insertion dans le client des appels au serveur (connexion sur
le serveur via le stub et invocation des méthodes distantes)
Stéphane Frenot - Département Télécommunication - SID -
II - Corba 128
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);
Stéphane Frenot - Département Télécommunication - SID -
II - Corba 129
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++
Stéphane Frenot - Département Télécommunication - SID -
II - Corba 130
1 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
Stéphane Frenot - Département Télécommunication - SID -
II - Corba 131
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);
}
Stéphane Frenot - Département Télécommunication - SID -
II - Corba 132
2 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.insalyon.fr:1526:INSA", "bcb", "bcb");
} catch (Exception raison2) {
System.out.println("pb pendant get connection jdbc.....");
}
Stéphane Frenot - Département Télécommunication - SID -
II - Corba 133
2 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;}
Stéphane Frenot - Département Télécommunication - SID -
II - Corba 134
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
Stéphane Frenot - Département Télécommunication - SID -
II - Corba 135
3 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) {}
}
}
Stéphane Frenot - Département Télécommunication - SID -
II - Corba 136
4 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
Stéphane Frenot - Département Télécommunication - SID -
II - Corba 137
Liste des services
Stéphane Frenot - Département Télécommunication - SID -
II - Corba 138
Le fichier de définition
Stéphane Frenot - Département Télécommunication - SID -
II - Corba 139
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
Stéphane Frenot - Département Télécommunication - SID -
II - Corba 140
5 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]);}}}
Stéphane Frenot - Département Télécommunication - SID -
II - Corba 141
Classes impliquées sur le client
acces_bd
omg.org.CORBA
COMPOSANTCLI
Object
Main()
REQUETE
ORB
init()
...
REQUETEHelper
static bind()
...
classe
interface
Classe statique Classe Abstraite
héritage
Package
Stéphane Frenot - Département Télécommunication - SID -
II - Corba 142
Classes impliquées sur le serveur
omg.org.CORBA
acces_bd
Object
_REQUETEOperations
public String[] executer_req_array(String req)
REQUETEImplementation
_REQUETESkeletons
REQUETE
ORB
init()
connect()
disconnect()
IE.Iona.OrbixWeb._CORBA
_tie_REQUETE
Orbix
impl_is_ready()
...
ComposantServ
Stéphane Frenot - Département Télécommunication - SID -
II - Corba 143
Schéma général de développement
Description
d’interface
en IDL
Référentiel
des
Interfaces
(5) Implantation des clients
(2)
Implantation des interfaces IDL
(1)
Compilation
IDL
Code des
classes
Squelettes
Souches
Code des
clients
IDL
IDL
+
(3) Implantation des serveurs
+
Applications clientes
(4) Installation
Configuration des serveurs
Stéphane Frenot - Département Télécommunication - SID -
Référentiel
des
Implantation
II - Corba 144
OMA : Object Management Architecture
Les Canevas CORBA
Les Services CORBA
La Plomberie CORBA
Stéphane Frenot - Département Télécommunication - SID -
II - Corba 145

OMG Services
Utilitaires Communs
Services orientés utilisateurs
Objets Développés
Spécifiques et non standardisés
Santé
verticaux
horizontaux IU
Finance
Gestion
information
Télécom
Administration
Système
Gestion
des tâches
Common Object Request Broker Architecture (CORBA)
Nommage
Persistance Transactions Collections
Négociateurs
Temps
Licences
Propriétés
Externalisation
Cycle de vie
Versions
Evénement
Service Objet Communs
Concurrence
d’accès
Relations
Sécurité d’accès
Services orientés systèmes
Stéphane Frenot - Département Télécommunication - SID -
II - Corba 146
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;
Stéphane Frenot - Département Télécommunication - SID -
II - Corba 147
Canevas de composants
Description
des
médicaments
Client
ORB
Espace 1
ORB
Espace 2
Stéphane Frenot - Département Télécommunication - SID -
Service de
requêtage
ORB
Espace 3
II - Corba 148
Architecture fonctionnelle de l’ORB
Implantation
Objet : serveur
Client
Référentiel
des Interfaces
Référentiel des
Implantations
Invocation
Dynamique
Souches
IDL
Squelettes Squelettes Adaptateur
IDL
Interface
Dynamique d’objets
(statique)
de l’ORB
Noyau de l’ORB
Interface standard des ORB
Spécifique à l’ORB
Une interface par classe d’objet
Stéphane Frenot - Département Télécommunication - SID -
II - Corba 149
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
Stéphane Frenot - Département Télécommunication - SID -
II - Corba 150
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)
Stéphane Frenot - Département Télécommunication - SID -
II - Corba 151
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
Stéphane Frenot - Département Télécommunication - SID -
II - Corba 152
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
Stéphane Frenot - Département Télécommunication - SID -
II - Corba 153
Marché des objets distribués
• Architectes de canevas de composants
• Développeurs de composants
• Intégrateurs de composants
------------------------------------------------Biblio ?
ORB public : HORB, MICO, Jonathan
Manuels de Iona, Visigenic...
http://www.iona.com,
http://www.visigenic.com
http://www.omg.org
Stéphane Frenot - Département Télécommunication - SID -
II - Corba 154
Modes d'invocation transparent
• objetDistant.methode( );
• objetDisant=ServicedeRecherche.recherche("UnObjet");
• resultat=objetLocal.methode(objetDistant);
• resultat=objetDistant.methode(objetDistant2);
• ObjetDistant=new ObjetDistant( );
Stéphane Frenot - Département Télécommunication - SID -
II - Corba 155
Compléments
• Krakowiak http://sirac.imag.fr/
• J.M. Geib, C. Gransart, Ph.Merle CORBA, des
concepts à la pratique
• Douglas Schmidt http://www.cs.wustl.edu/~shmidt
Stéphane Frenot - Département Télécommunication - SID -
II - Corba 156
Téléchargement