Invocation de M - PowerPoint PPT Presentation

1 / 77
About This Presentation
Title:

Invocation de M

Description:

Invocation de M thode des Objets distants Exemple : CORBA Common Object Request Broker Architecture Mise en pratique avec Orbacus en JAVA – PowerPoint PPT presentation

Number of Views:80
Avg rating:3.0/5.0
Slides: 78
Provided by: RemiV9
Category:
Tags: corba | invocation

less

Transcript and Presenter's Notes

Title: Invocation de M


1
Invocation de Méthode à des Objets distants
Exemple CORBA
Common Object Request Broker Architecture Mise en
pratique avec Orbacus en JAVA
2
Consensus pour linteropérabilité
1.1-histoire
  • Le problème Intégration des applications
  • Pas de consensus sur les langages de
    programmation
  • Pas de consensus sur les plate-formes de
    développement
  • Pas de consensus sur les systèmes dexploitation
  • Pas de consensus sur les protocoles réseau
  • Pas de consensus sur les formats des données
  • manipulées par les applications
  • Recherche dun Consensus pour linteropérabilité

3
CORBA
1.2 CORBA?
  • Common Object Request Broker Architecture CORBA
  • Plate-forme client/serveur orientée objets
  • Un standard pour linteropérabilité entre objets
  • Support pour différents langages
  • Support pour différentes plate-formes
    (interopérabilité)
  • Communications au travers du réseau
  • Des services (Distributed transactions, events,
    ... )
  • Guides et modèles de programmation

4
Historique
1.2 CORBA?
1989
1990
1991
1992
1993
1994
1995
1996
1997
1998
2000
2002
CORBA 3.0
CORBA 2.1
Fondation de lOMG
Publication de lOMA
Publication CORBA 1.1
Mapping IDL/C
Adoption CORBA 2.0
Publication CORBA 1.2
CORBA 2.3
Publication CORBA 1.0
  • Minimum Corba
  • RealTime Corba
  • Corba Component Model

5
Object Management Group (OMG)
I.3. OMG
http//www.omg.org
  • consortium international créé en 1989
  • but non lucratif
  • regroupement de plus de 460 organismes
  • constructeurs (SUN, HP, DEC, IBM, ...)
  • environnements systèmes (Microsoft, OSF, Novell,
    ...)
  • outils et langages (Iona, Object Design,
    Borland, ...)
  • produits et BD (Lotus, Oracle, Informix, O2,
    ...)
  • industriels (Boeing, Alcatel, Thomson, ...)
  • institutions et universités (INRIA, NASA, LIFL,
    W3C)

6
OMG en résumé
OMA pour l architecture logicielle ? MDA
(Model Driven Architecture) CORBA pour le 
 middleware  technique UML pour la
modélisation UML Unified Modeling
language MOF pour la méta-modélisation MOF
Meta-Object Facility
7
Processus de développement
8
Le langage IDL Un  esperanto  pour les objets
contrat
Client d objets
Fournisseur d objets
Stub IDL
Bus CORBA
Squelette IDL
Objets Corba
9
Spécification interface IDL (1/2)
Un objet grid est un tableau contenant des
valeurs. Les valeurs sont accessibles grâce aux
opérateurs get et set qui peuvent être invoqués
à distance.
objets grid
Appel de get et set sur l'objet grid distant
Processus client
Processus serveur
10
Spécification interface IDL (2/2)
interface Grid readonly attribute short
height readonly attribute short width void
set (in short n, in short m, in long value)
long get(in short n, in short m) void
copyIn(inout Grid g)
11
Le langage IDL Interface Definition Language
  • langage de spécification dinterfaces,
    supportant lhéritage multiple
  • indépendant de tout langage de programmation ou
  • compilateur (langage pivot entre
    applications)
  • langage utilisé pour générer les stubs, les
    squelettes et pour définir
  • les interfaces du Référentiel dinterface
  • la correspondance IDL-langage de programmation
    est fournie pour les langages C, C, Java,
    Smalltalk, Ada, Cobol.

12
Exemple
interface account readonly attribute
float balance attribute string description
void credit (in float f) void
debit (in float f) interface currentAccount
account readonly attribute float
overdraftLimit interface bank
exception reject string reason
account newAccount (in string name) raises
(reject) currentAccount newCurrentAccount
(in string name, in float limit) raises
(reject) void deleteAccount (in account
a)
interface
attribut
opérations
exception
opérations
13
Eléments IDL
  • Une spécification IDL définit un ou plusieurs
    types, constantes,
  • exceptions, interfaces, modules,...
  • pragma
  • constantes
  • types de base au format binaire normalisé
  • nouveaux types (typedef, enum, struct,
    union, array, sequence)
  • exceptions
  • types de méta-données (TypeCode, any)

14
Eléments IDL
  • Un module permet de limiter la validité des
    identificateurs
  • Interface ensemble dopérations et de types
    gtclasse C
  • Syntaxe
  • Interface lthéritagegt ltinterface Bodygt
  • opération (synchrone ou asynchrone sans
    résultat)
  • attribut (possibilité de lecture seule)

Surcharge Interdite
  • Réutilisation de spécifications existantes
    (include)

15
Exemple
module unService typedef unsigned long
EntierPositif typedef sequenceltPositifgt
desEntiersPositifs interface Premier
boolean est_premier ( in EntierPositif
nombre) desEntiersPositifs nombres_premiers (in
EntierPositif nombre) module
monApplication interface MonService
unServiceEntierPositif prochainPremier(..)

module
définitions de type

interface
opérations
16
Exemple
3. IDL Description
17

18
Attribut IDL
Définition dattribut interface account
readonly attribute float balance attribute
string description ... Equivaut à
float get_balance() string
get_description() void set_description(in
string s)
19
Operations (1/2)
3. IDL Description
  • Paramètres nommés
  • et associés à un mode
  • Opérations bloquantes
  • par défaut

void op1 (in long input, out long output,
inout long both) interface account interface
bank account newAccount (in string name)
void deleteAccount (in account old)
Client
uneBanque
newAccount
calcul
retours
ltuneOpérationgt ltmodeInvocationgt lttypeRetourgt
ltidentificateurgt  ( ltparamètresgt  ) 
ltclausesExceptionsgtltclausesContextesgt
20
Pourquoi différents modes de passage de
paramètres ?
in Données fournies par le client out
Données retournées par l objet inout Données
clientes modifiées par l objet
Répartition
Passage par copie
21
Opérations (2/2)
3. IDL Description
  • Opération non bloquante
  • Pas de paramètre de type out, inout ou
    dexceptions
  • Valeur de retour void
  • Pas d exceptions déclenchées.

Client
uneBanque
notify(ok )
méthode finie
22
Exceptions
3. IDL Description
exception reject string reason
account newAccount (in string name) raises
(reject) exception DateErronnee String
raison
CORBAException
CORBAUserException
CORBASystemException
Des exceptions CORBA standardisées
UNKNOWN NO_PERMISSION BAD_PARAM
NO_IMPLEMENT COM_FAILURE OBJECT_NOT_EXIST INV_O
BJREF .
Gestion explicite de la part du client
23
Définitions circulaires
3. IDL Description
module Circulaire interface B interface A
void utiliséB(in B unB) interface B
void utiliséA(in A unA)
24
Héritage multiple
3. IDL Description
interface A ... interface B A ...
interface C A ... interface D B, C
...
A
B
C
D
25
Types de base et autres types
3. IDL Description
  • Types de base
  • short
  • long
  • unsigned short
  • unsigned long
  • float
  • double
  • char
  • boolean
  • octet
  • ...
  • Types construits
  • struct
  • union
  • enum
  • Types génériques
  • array
  • sequence
  • string

MétaTypes
Types de données dynamiques et auto-descriptifs
  • any
  • TypeCode

26
Type Any
3. IDL Description
interface PileDeChaines readonly attribut
string sommet void poser(in string
valeur) string retirer()
interface PileGénérique readonly attribut Any
sommet readonly attribut TypeCode
typeDesValeurs void poser(in Any valeur) Any
retirer()
27
Exemple Compilation interface IDL vers Java
1- Exemple introductif
Grid.idl
jidl Grid.idl
A écrire
Compilateur IDL/Java
Généré
Répertoire grid
Répertoire grid
Répertoire grid
Répertoire grid
Client
Serveur
GridOperations.java
_GridStub.java
GridPOA.java
I
Grid.java
Client.java
Grid_Impl.java
GridHelper.java
Serveur.java
GridHolder.java
28
Les classes Stubs et Squelettes
1- Exemple introductif
  • implantation du stub
  • public class _GridStub . Grid
  • envoie de requêtes
  • invisible par le programmeur
  • instanciée automatiquement par GridHelper
    (narrow)
  • Utilise le DII pour assurer la portabilité du
    binaire
  • implantation du squelette
  • public abstract class GridPOA . GridOperations
  • reçoit et décode des requêtes
  • doit être héritée par limplantation

29
Implémentation du serveur (1)
1- Exemple introductif
  • 1. Initialiser le bus CORBA
  • obtenir lobjet ORB
  • 2. Initialiser ladaptateur dobjets
  • obtenir le POA
  • 3. Créer les implantations dobjets
  • 4. Enregistrer les implantations par ladaptateur
  • 5. Diffuser leurs références
  • afficher une chaîne codifiant lIOR
  • 6. Attendre des requêtes venant du bus
  • 7. Destruction du Bus

30
Implémentation du client
1- Exemple introductif
  • 1. Initialiser le bus (objet ORB)
  • 2. Créer les souches des objets à utiliser
  • 2.a. obtenir les références dobjet (IOR)
  • 2.b. convertir vers les types nécessaires
  • narrow contrôle le typage à travers le réseau
  • 3. Réaliser les traitements
  • Rem. éviter lopérateur bind (2.a 2.b)
  • spécifique à chaque produit donc non portable

31
Le cycle de vie des objets
  • Problème
  • actuellement, 1 grille 1 serveur
  • pas de création/destruction dobjets à distance
  • seulement invocation dopérations
  • Solution
  • notion de fabrique dobjets
  • exprimée en OMG-IDL
  • Cest un canevas de conception Design pattern
  • voir aussi le service LifeCycle

Autres usages de la fabrique - gestion de
droits, load-balancing, polymophisme,
32
Limplantation de la fabrique
Grille
Fabrique
33
Limplantation de la fabrique
Grille
Fabrique
34
Interface IDL d une fabrique de Grilles
module grilles . . . interface Fabrique
Grid newGrid(in short width,in short height)

35
Scénario d obtention de la référence du service
de nommage
ORB
Client ou Serveur
resolve_initial_references ("NameService")
CosNaming NamingContext
conversion
ajout,retrait,lecture,...
36
Notion de chemin daccès
37
Enregistrer un objet
  • Opération pour publier un Objet
  • en général, opération réalisée par le serveur
  • Scénario Type
  • 1. Créer un objet
  • 2. Construire un chemin d accès (Name)
  • 3. Appeler l opération  bind  ou  rebind 
    avec le chemin et la référence de l objet
  • void bind (in Name n, in Object obj)
  • raises (NotFound, CannotProceed,
    InvalidName, AlreadyBound)

38
Retrouver un objet
  • Opération réalisée par un client ou un serveur
  • Scénario type
  • construire un chemin d accès (Name)
  • appeler l opération  resolve  avec le chemin
  • convertir la référence obtenue dans le bon type
  • Object resolve (in Name n)
  • raises (NotFound, CannotProceed, InvalidName)

39
Une application dadministration de la fabrique
  • Création dune nouvelle grille et mise à
    disposition par le service Nommage
  • 1. Initialiser le bus CORBA
  • 2. Obtenir le service Nommage (NS)
  • 3. Obtenir la fabrique depuis le NS
  • 4. Créer un répertoire
  • 5. Enregistrer le répertoire dans le NS

40
Annuaire service de nommage
java.rmi.Naming
bind rebind unbind lookup
Client
rmi URL
java.rmi.naming
RMI Registry
RMI Remote Object
41
RMI URL
  • Même syntaxe que http mais préfixe rmi
  • rmi//mymachine.com/monObjet
  • Inconvénient perte de la transparence
  • gt utilisation de JNDI (Java Naming Directory
    Interface)

42
JNDI Nommage et directory
Lien (bind)
  • C/monRépertoire/monFichier

Nom
Contexte
Créé le 12 mars 2002 Taille 12 M
Attributs
43
Conventions de nommage
  • LDAP (Light Directory Access Protocol)
  • "cnTodd Sundsted, oComFrame, cUS" nomme la
    personne "cnTodd Sundsted"
  • Note c country, o organization
  • DNS
  • carabosse.essi.fr
  • gt Abstraction JNDI

44
Naming/Directory
  • Un service de Naming permet de retrouver des
    objets à partir d'un nom ("pages blanches")
  • Un service de Directory rajoute des
    fonctionnalités permettant d'associer des
    attributs aux points d'entrée, et de faire une
    recherche sur ces attributs ("pages jaunes")

45
Usage
  • Les services de nommage sont utilisés
  • Pour stocker des objets
  • Pour offrir un point d'accès aux applications
    réparties (RMI, Corba , EJB)
  • Ils servent également de référentiel d'entreprise
    pour accéder à des applications (machine/port),
    des bases de données, et même des informations de
    sécurité (gestion des accès au sein d'une
    entreprise)
  • Mais aussi pour référencer des devices
    (imprimantes, etc.) (cf. Jini)

46
Service providers
47
L'interface Context
48
Contexte
  • Le contexte permet une isolation des noms, par
    exemple pour plusieurs applications gt évite les
    collisions
  • Structure hiérarchique comme un répertoire

49
Interface Context
  • void bind(String stringName, Object object) Lie
    un nom à un objet. Le nom ne doit pas déjà être
    lié à un autre objet. Tous les contextes
    intermédiaires doivent exister.
  • void rebind(String stringName, Object object)
    Lie un nom à un objet. Si le nom est déjà lié, la
    liaison précédente est écrasée. Tous les
    contextes intermédiaires doivent exister.
  • Object lookup(String stringName) Renvoie l'objet
    pointé par le nom
  • void unbind(String stringName) Délie l'objet
    pointé par le nom.

50
Mais aussi
  • void rename(String stringOldName, String
    stringNewName) Modifie le nom auquel l'objet est
    lié.
  • NamingEnumeration listBindings(String
    stringName) Envoie une énumération contenant les
    noms liés au contexte passé en paramètre, ainsi
    que les objets liés à ces noms et leur classe
  • NamingEnumeration list(String stringName)
    Renvoie une énumération contenant les noms liés
    au contexte, ainsi que les noms de classes des
    objets liés à eux

51
Contextes
  • Pas de contexte racine gt InitialContext
  • Possibilité de créer des sous-contextes
  • public Context createSubcontext(String name)
  • throws NamingException

52
Un exemple d'abord les packages
  • import javax.naming.Context
  • import javax.naming.InitialContext
  • import javax.naming.Binding
  • import javax.naming.NamingEnumeration
  • import javax.naming.NamingException
  • // Pour les paramètres d'initialisation
  • import java.util.Hashtable

53
Création du contexte initial
  • L'information d'environnement spécifie le
    provider JNDI par le nom de la factory.
  • Dans ce cas répertoire sous forme URL
    file//...
  •       Hashtable hashtableEnvironment new
    Hashtable()
  •       hashtableEnvironment.put(
  •         Context.INITIAL_CONTEXT_FACTORY,
  •         "com.sun.jndi.fscontext.RefFSContextFactor
    y"
  •       )
  •       hashtableEnvironment.put(
  •         Context.PROVIDER_URL,
  •         "file//tmp"
  •       )
  •       Context context new InitialContext(hashtab
    leEnvironment)

54
Lien avec la sécurité
  • private Context getInitialCtx()
  • // Set up our JNDI environment properties...
  • Hashtable env new Hashtable()
  • env.put(Context.INITIAL_CONTEXT_FACTORY,
    INITCTX)
  • env.put(Context.PROVIDER_URL, HOST)
  • env.put(Context.SECURITY_AUTHENTICATION,
    "simple")
  • env.put(Context.SECURITY_PRINCIPAL, USER)
  • env.put(Context.SECURITY_CREDENTIALS,
    PASSWORD)
  • try
  • return new InitialDirContext(env)
  • catch(NamingException e)

55
Enumération de tous les objets
  •   NamingEnumeration namingEnumeration
    context.listBindings("")
  •         while (namingEnumeration.hasMore())
  •           Binding binding (Binding)namingEnumera
    tion.next()
  •           System.out.println(
  •             binding.getName() " "
  •             binding.getObject()
  •           )
  •         

56
Recherche d'un objet particulier
  •  Object object context.lookup(unNom)
  •           System.out.println(
  •             unNom " "
  •             object
  •           )

57
Utilisation de l'objet
  • On reçoit un object, il faut par conséquent faire
    un "cast" pour pouvoir l'utiliser
  • (MyClass) object.myMethode(.)

58
Résumé
  • Comme dans RMI
  • InitialContext
  • bind, lookup
  • On peut lister un contexte, créer un
    sous-contexte
  • Utilisation d'une factory pour lier à une
    implémentation et initialiser les paramètres
  • La sécurité est définie au niveau de
    l'environnement passé à la factory

59
Directory Service
60
Directory Service
  • Naming attributs

61
Les fonctions de base
  • void bind(
  •    String stringName,
  •    Object object,
  •    Attributes attributes
  • )
  • Même méthode que Context, mais avec un paramètre
    de plus les attributs.
  • Idem rebind, lookup
  • Idem createSubcontext
  • Créé à partir de InitialDirContext

62
GetAttributes
  • 2 formes possibles
  • Attributes
  • getAttributes(
  •    String stringName
  • )
  • Attributes
  • getAttributes(
  •    String stringName,
  •    String rgstringAttributeNames
  • )

63
modifyAttributes
  • void
  • modifyAttributes(
  •    String stringName,
  •    int nOperation,
  •    Attributes attributes
  • )
  • Avec les opérations
  • ADD_ATTRIBUTE, REPLACE_ATTRIBUTE, et
    REMOVE_ATTRIBUTE

64
Search
  • La forme la plus simple passe une liste
    d'attributs
  • Il est possible d'utiliser des filtres selon la
    norme
  • RFC 2254
  • Les contrôles permettent la mise en forme des
    résultats (par exemple tri ascendant, etc)

65
Search pour faire des requêtes
  • NamingEnumeration
  • search(
  •   String stringName,
  •   Attributes attributesToMatch
  • )
  • On peut utiliser des filtres de recherche selon
    la spécification RFC 2254
  • (cnBabs Jensen)
  • (!(cnTim Howes))
  • ((objectClassPerson)((snJensen)(cnBab
    s J)))
  • (ounivofmich)
  • NamingEnumeration
  • search(Name stringName, String stringRFC2254Filter
    , SearchControls searchcontrols)

66
Search contrôle de la recherche
  • On peut utiliser des contrôles permettant
  • De définir les attributs à renvoyer
  • De définir la portée de la recherche (récursive
    en arbre, locale)
  • Le nombre maximum de réponses
  • Le temps maximum d'attente
  • De renvoyer ou non l'objet Java associé
  • De déréférencer ou non les liens

67
Un exemple
  • String filter "(objectclassInetorgperson)"
  • SearchControls controls new SearchControls()
  • controls.setSearchScope(SearchControls.SUBTREE_SCO
    PE)
  • controls.setReturningObjFlag(false)
  • controls.setReturningAttributes(attrIds)
  • try
  • NamingEnumeration enumDev
  • initCtx.search("oupeople", filter, sc)

68
Classes à connaître
Renvoient une NamingEnumeration de ...
69
Utilisation d'un SearchResult
  • while (enumDev.hasMore())
  • SearchResult sr (SearchResult)enumDev.next()
  • Attributes attributes sr.getAttributes()
  • NamingEnumeration ne attributes.getAll()
  • while (ne.hasMore())
  • Attribute attr (Attribute) ne.next()
  • String attrID attr.getID()
  • NamingEnumeration values attr.getAll()
  • . . .
  • while (values.hasMore())
  • child.add(
  • new DefaultMutableTreeNode(values.next
    Element()))

70
Résumé Directory
  • Mêmes méthodes que Context
  • Créé à partir de InitialDirContext
  • Rajoute la gestion des attributs
  • Rajoute les fonctions de recherche

71
Autres fonctionnalités
72
Noms composés
  • Object obj1 ctx.lookup("cnTed Geisel,
    ouPeople, oJNDITutorial")
  • CompositeName cname new CompositeName(
  • "cnTed Geisel, ouPeople, oJNDITutorial")
  • Object obj2 ctx.lookup(cname)
  • L'interface lookup a 2 signatures String ou Name

73
Stockage d'objets
  • On peut stocker
  • Des objets serialisables
  • Des références et des objets référençables
  • Des objets avec des attributs
  • Des Remote Objects
  • Des objets Corba

74
Exemple stockage d'un objet RMI
  • // On initialise le Contexte
  • // ctx new javax.naming.InitialDirContext...
  • Hello h new HelloImpl()
  • // Bind the object to the directory
  • ctx.bind("cnRemoteHello", h)
  • Une fois que l'objet est stocké dans le
    Directory, une autre application peut l'utiliser
  • Hello h2 (Hello)ctx.lookup("cnRemoteHello")
  • NB cf. javax.rmi.Naming.bind, lookup

75
Exemple stockage d'une référence
  • public class Fruit implements Referenceable
  • String fruit
  • public Fruit(String f)
  • fruit f
  • public Reference getReference() throws
    NamingException
  • return new Reference(
  • Fruit.class.getName(),
  • new StringRefAddr("fruit", fruit),
  • FruitFactory.class.getName(),
  • null) // Factory location

76
Factory pour une référence
  • public class FruitFactory implements
    ObjectFactory
  • public Object getObjectInstance(Object obj, Name
    name, Context ctx,
  • Hashtable env) throws Exception
  • if (obj instanceof Reference)
  • Reference ref (Reference)obj
  • if (ref.getClassName().equals(Fruit.class.get
    Name()))
  • RefAddr addr ref.get("fruit")
  • if (addr ! null)
  • return new Fruit((String)addr.getContent())
  • return null

77
URL LDAP
  • Ldap supporte les URLS de la forme
  • ldap//hostport/dn?attributes?scope?filter?extens
    ions
  • Le nom d'hôte par défaut est localhost
  • Le port par défaut est 389
  • Exemple
  • Object obj new InitialContext().lookup(
  • "ldap//localhost389/cnhomedir,cnJon20Ruiz
    ,ouPeople,ojnditutorial")

78
alias
  • Il est possible de définir des alias
  • ctx.search("ouStaff", "(cnJ)", null)
  • Propriété d'environnement
  • java.naming.ldap.derefAliases
  • always
  • never
  • finding
  • searching

79
Autres idées
  • Espaces de nommages
  • Fédérations de serveur , referrals (alias de
    serveurs)
  • Sécurité, authentification, SSL
  • Liens avec JINI, EJB ...
Write a Comment
User Comments (0)
About PowerShow.com