Title: Java Par L'exemple : Le serveur
1Les objets distribués
S. Frénot INSA Lyon 1998 stephf_at_lisiflory.insa-lyo
n.fr
2Objectifs des approches distribuéesVue
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 gt On ne connaît pas la
localisation - "Détails" des langages utilisés gt On ne connaît
pas l'implantation
3Quelques 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)
4CORBA
- 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
5Problématique Vue microscopique
Service ?
Etat ?
Objet client
Objet serveur
Espace 2
Espace 1
- Service gt appel des méthodes
- Etat gt accès aux attributs
6Principe des échanges
Espace 2
Espace 1
Objet client
Objet serveur
- Fournir des objets de service qui vont servir
d'intermédiaires pour le client et le serveur
7Fonctionnement
Serveur
Client
Système Intermédiaire Client
Système Intermédiaire Serveur
Espace 2
Espace 1
8Fonctionnement lancement
Le client peut invoquer les méthodes du service
Client
ORB Serveur
ORB Client
Espace 2
Espace 1
9Dé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)
10Un 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)
11OMG-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 ltgt Interfaces Java, Classes
Abstraites du C
12? IDL
- typedef sequenceltstringgt tableaux_resultat
- interface REQUETE
- tableaux_resultat executer_req_array(in string
req) -
- --gt 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
13Dé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? Développement du serveur
- package acces_bd
- import java.sql.
- import java.util.Vector
- class REQUETEImplementation implements
_REQUETEOperations - Connection connull
- 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
("jdbcoraclethin_at_lisiaix0.insa-lyon.fr1526INS
A", "bcb", "bcb") - catch (Exception raison2)
- System.out.println("pb pendant get connection
jdbc.....") -
15? Développement du serveur
- public String executer_req_array(String req)
- String resultat Vector resultvectornew
Vector() - Statement stmtnull ResultSet rsnull int
ncols0 - 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 i1 iltncols i)
- resultvector.addElement(rs.getString(i))
- catch (Exception ex)
- resultat new Stringresultvector.size()
- resultvector.copyInto(resultat)
- return resultat
16Développement du lanceur (adapteur d'objet)
- Enregistre les classes dimplantation 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? Développement du lanceur
- package acces_bd
- public class composantserv
- public static void main (String args )
- REQUETE REQUETEImplnull //Nom du
mandataire - REQUETEImplementation tmpnull //Nom du
serveur - try
- tmpnew REQUETEImplementation()
- REQUETEImpl new _tie_REQUETE(tmp)
- catch(SystemException se1)
- try
- IE.Iona.OrbixWeb._CORBA.Orbix.impl_is_ready("SE
RVICEREQUETES") - catch(SystemException se)
-
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 dobjets métiers de lentreprise
- Accessible à lORB et aux développeurs
- Possibilité de fédération dIR
19Liste des services
20Le fichier de définition
21Dé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? Développement du client
- package acces_bd
- public class composantcli
- public static void main(String args)
- REQUETE myreq null
- String reponsenew 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
- reponsemyreq.executer_req(req)
- catch (Exception raison)
- for (int i0 iltreponse.length i)
- System.out.println(reponsei)
-
23Classes impliquées sur le client
interface
classe
Classe statique
Package
Classe Abstraite
24Classes impliquées sur le serveur
25Schéma général de développement
Description dinterface en IDL
(2) Implantation des interfaces IDL
(1) Compilation IDL
(5) Implantation des clients
Code des classes
Squelettes IDL
Souches IDL
Code des clients
(3) Implantation des serveurs
Applications clientes
(4) Installation Configuration des serveurs
Référentiel des Implantation
26Les Services CORBA
OMA Object Management Architecture
Les Canevas CORBA
La Plomberie CORBA
27OMG Services
?????
Utilitaires Communs Services orientés utilisateurs
Santé
Finance
Télécom
verticaux
Objets Développés Spécifiques et non standardisés
Gestion information
Administration Système
Gestion des tâches
IU
horizontaux
Nommage
Persistance
Transactions
Collections
Temps
Négociateurs
Licences
Concurrence daccès
Propriétés
Externalisation
Versions
Evénement
Cycle de vie
Relations
Sécurité daccès
Service Objet Communs Services orientés systèmes
28Un autre exemple Médicaments
- typedef sequenceltstringgt 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 sequenceltresultat_interactionsgt
struct_interac
29Canevas de composants
Description des médicaments
Service de requêtage
Client
ORB
ORB
ORB
Espace 1
Espace 2
Espace 3
30Architecture fonctionnelle de lORB
Implantation Objet serveur
Client
Entrepôt des Interfaces
Entrepôt Implantation
Squelettes IDL (statique)
Squelettes Dynamique
Adaptateur dobjets
Interface de lORB
Invocation Dynamique
Souches IDL
Noyau de lORB
Spécifique à lORB
Interface standard des ORB
Une interface par classe dobjet
31Composants de Corba (Spec. V2.0)
- ORB Négociateur de requêtes objet
- BOA Adaptateur dobjets
- IDL Langage de définition des interfaces
- SII Interface dinvocation statique
- IR Entrepôt des interfaces et implantations
- Mise en correspondance vers langages hôtes java,
c, c ... - IIOP Communication inter-ORB
- DII Interface dinvocation dynamique
- DSI Squelette dinterface dynamique
32CORBA, cest
- Une architecture complète dobjets distribués
- Des spécifications techniques qui font partie
dun tout lOMA - Séparation entre la couche service (IDL) et la
plomberie (ORB)
33Limitation des fonctionnalité
- Pas de réponse par rapport aux problèmes
classiques des applications distribuées - Délais dattente
- 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
34Limitation des performances
- Plus lent quune 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 doptimiser les
fonctionnalités supérieures
35Modes d'invocation transparent
- objetDistant.methode( )
- objetDisantServicedeRecherche.recherche("UnObjet"
) - resultatobjetLocal.methode(objetDistant)
- resultatobjetDistant.methode(objetDistant2)
- ObjetDistantnew ObjetDistant( )
36Java 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
37Java 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
38Marché 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