Module SI2 Applications r - PowerPoint PPT Presentation

1 / 54
About This Presentation
Title:

Module SI2 Applications r

Description:

Title: Aucun titre de diapositive Author: ILOG Last modified by: Anne-Marie Dery Created Date: 11/8/1998 5:35:10 PM Document presentation format: Affichage l' cran – PowerPoint PPT presentation

Number of Views:78
Avg rating:3.0/5.0
Slides: 55
Provided by: ILO149
Category:

less

Transcript and Presenter's Notes

Title: Module SI2 Applications r


1
Module SI2 Applications réparties
  • Service de nommage JNDI

Extraits de Mireille Blay-Fornarino, Anne-Marie
Dery-Pinna et Didier Donsez
2
Besoins dun service de nommage
3
Rappel Besoins de Nommage et serveur CORBA
  • 1. Initialiser le bus CORBA obtenir lORB
  • 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 (IOR)
  • afficher une chaîne codifiant lIOR ou
  • stocker lIOR dans un fichier
  • OU Utiliser un service de nommage
  • 6. Attendre des requêtes venant du bus
  • 7. Destruction du Bus

4
Rappel Besoins de nommage et client CORBA
  • 1. Initialiser le bus (ORB)
  • 2. Créer les souches des objets à utiliser
  • 2.a.obtenir les références dobjet (IOR)
  • copier/coller lIOR affichée coté serveur ou
  • lire le fichier contenant lIOR
  • OU Accéder au service de nommage
  • 2.b. convertir vers les types nécessaires
    (narrow)
  • 3. Réaliser les traitements
  • Accès à lécran/système de fichier du serveur
    INSATISFAISANT

5
IOR et informations de nommage
6
Les services de nommage usage
  • Les services de nommage (ex rmiregistry) sont
    utilisés
  • Pour stocker des objets
  • Pour offrir un point d'accès aux applications
    réparties
  • Référentiels d'entreprise pour accéder à
  • des applications (machine/port),
  • des bases de données,
  • des informations de sécurité (gestion des accès
    au sein d'une entreprise)
  • des dispositifs tels que les imprimantes

7
Service de nommage pour RMI RMIregistry
URL du registre RMI rmi//hostport
8
Service de nommage pour CORBA CosNaming
Des différences dans le scénario dobtention du
service de nommage
Client ou Serveur
9
Utilisation du service de nommage CORBA coté
serveur
  • Récupérer le service de nommage
  • afin de pouvoir sy adresser et faire des
    requêtes
  • Creer et lier un contexte de nommage
  • afin didentifier un nœud de nommage ou
    enregistrer les objets
  • Lier un servant au service de nommage
  • afin denregistrer un ou plusieuyrs objets
    auxquels les clients pourront accéder
  • PUIS
  • A la fin du serveur
  • Nettoyer le serveur de nommage Desenregistrer
    le servant et détruire le contexte

10
Utilisation du service de nommage CORBA coté
serveur (1/3)
  • import org.omg.CosNaming.
  • import org.omg.CosNaming.NamingContextPackage.
  • ...
  • // Récupérer le service de nommage
  • org.omg.CORBA.Object obj null
  • try
  • obj orb.resolve_initial_references("NameServ
    ice")
  • catch(org.omg.CORBA.ORBPackage.InvalidName ex)
  • System.out.println("Can't resolve
    NameService'")
  • return 1
  • if (obj null)
  • System.out.println("NameService' is a nil
    object reference")
  • return 1
  • NamingContext nc null
  • try
  • nc NamingContextHelper.narrow(obj)

11
Utilisation du service de nommage CORBA coté
serveur (2/3)
  • try
  • // Creer et lier un contexte de nommage
  • NameComponent siName new
    NameComponent1
  • siName0 new NameComponent()
  • siName0.id "si"
  • siName0.kind ""
  • NamingContext si nc.bind_new_context(siName)
  • // Lier un servant (hello ici) au service de
    nommage
  • NameComponent helloName new
    NameComponent2
  • helloName0 new NameComponent()
  • helloName0.id "si"
  • helloName0.kind ""
  • helloName1 new NameComponent()
  • helloName1.id "myhello"
  • helloName1.kind ""
  • nc.bind(helloName, hello)
  • System.out.println("Server Ready...")

12
Utilisation du service de nommage CORBA coté
serveur (3/3)
  • // Desenregistrer le servent et le contexte
  • nc.unbind(helloName) nc.unbind(siName)
  • try
  • si.destroy() // destruction du contexte
  • catch(NotEmpty ex) throw new
    RuntimeException()
  • catch(NotFound ex)
  • System.err.print("Got a NotFound' exception
    ")
  • switch(ex.why.value())
  • case NotFoundReason._missing_node
  • System.err.print("missing node") break
  • case NotFoundReason._not_context
  • System.err.print("not context") break
  • case NotFoundReason._not_object
  • System.err.print("not object") break
  • ex.printStackTrace() return 1
  • catch(CannotProceed ex)
  • System.err.println("Got a CannotProceed'
    exception "e) return 1
  • catch(InvalidName ex)

13
Utilisation du service de nommage CORBA coté
client
  • Récuperer le service de nommage
  • afin de pouvoir y adresser des requêtes
  • Résoudre le contexte avec le service de nommage
  • afin de se placer sur le nœud de nommage où sont
    enregistrés les objets auxquels on a besoin
    daccéder
  • Récupérer le servant via le service de nommage
  • afin de pouvoir avoir une référence sur lobjet
    dans le serveur auquel on souhaite envoyer des
    messages
  • Utiliser le servant

14
Utilisation du service de nommage CORBA coté
client (1/3)
  • import org.omg.CosNaming.
  • import org.omg.CosNaming.NamingContextPackage.
  • ...
  • // Récuperer le service de nommage
  • org.omg.CORBA.Object obj null
  • try
  • obj orb.resolve_initial_references("NameServ
    ice")
  • catch(org.omg.CORBA.ORBPackage.InvalidName ex)
  • System.out.println("Can't resolve
    NameService'")
  • return 1
  • if (obj null)
  • System.out.println("NameService' is a nil
    object reference")
  • return 1
  • NamingContext nc null
  • try
  • nc NamingContextHelper.narrow(obj)

15
Utilisation du service de nommage CORBA coté
client (2/3)
  • try
  • // Résoudre le contexte avec le service de
    nommage
  • NameComponent siName new
    NameComponent1
  • siName0 new NameComponent()
  • siName0.id "si"
  • siName0.kind ""
  • org.omg.CORBA.Object siObj
    nc.resolve(siName)
  • NamingContext si NamingContextHelper.narrow(si
    Obj)
  • System.out.println("Resolved si'")
  • // Récupérer le servant hello via le service
    de nommage
  • NameComponent helloName new
    NameComponent2
  • helloName0 new NameComponent()
  • helloName0.id "si"
  • helloName0.kind ""
  • helloName1 new NameComponent()
  • helloName1.id "myhello"
  • helloName1.kind ""

16
Utilisation du service de nommage CORBA coté
client (3/3)
  • // Utiliser le servant
  • hello.say_hello()
  • catch(NotFound ex)
  • System.err.print("Got a NotFound' exception
    ")
  • switch(ex.why.value())
  • case NotFoundReason._missing_node
  • System.err.print("missing node") break
  • case NotFoundReason._not_context
  • System.err.print("not context") break
  • case NotFoundReason._not_object
  • System.err.print("not object") break
  • ex.printStackTrace() return 1
  • catch(CannotProceed ex)
  • System.err.println("Got a CannotProceed'
    exception "e) return 1
  • catch(InvalidName ex)
  • System.err.println("Got an InvalidName'
    exception"e) return 1

17
Utilisation du service de nommage CORBA
Configuration exécution
  • Lancement du service de nommage
  • Sous Windows java com.ooc.CosNaming.Server
  • Sous Linux nameserv
  • Utiliser loption -i pour afficher lIOR puis
    exécuter la commande iordump pour voir la machine
    et le port sur lequel le service est lançé
  • Lancement dun serveur/client avec loption
    -ORBInitRef NameServicecorbalociiophostport/
    NameService
  • ajoute le service de nom NameService à la liste
    des services initiaux de lORB en précisant où
    trouver le service
  • Pas de transparence vis-à-vis du service utilisé

18
JNDI en quelques mots
  • Services de nommages connus rmiregistry, Corba
    naming
  • Services dannuaires connus LDAP, DNS
  • Des fonctionnalités
    communes
  • Principe Fournir une API (java) uniforme à des
    services de nommage ou dannuaire
  • Utilisation de pilotes SPI dynamiquement
    chargeables
  • LDAP, DNS, NIS, NDS, RMI, CORBA, et FileSystems

19
JNDI en quelques mots
  • Packages
  • javax.naming fonctionnalités de nommage
    enregitrement et recherche (bind, lookup)
  • javax.naming.directory fonctionnalités étendues
    aux services dannuaire
  • javax.naming.spi interface pour les
    fournisseurs
  • javax.naming.event, javax.naming.ldap, ...

20
Service providers (SPI)
SPI est linterface permettant dattaquer
différents providers de manière uniforme. Les
providers  compatibles  doivent fournir un
ensemble de classes implémentant
javax.naming.spi.
21
Le contexte notion de chemin daccès
  • Structure hiérarchique de graphe équivalente à la
    notion de (sous)répertoire
  • nœuds contextes (A, B, C, D)
  • feuilles objets (1, 2, 3, 4, 5)
  • Le contexte permet une isolation des nomspour
    plusieurs applications gt évite les collisions
  • Unicité dun nom dans un contexte mais un objet
    peut avoir plusieurs noms Lobjet référencé
     2  est commun aux contextes A/B et A/C

22
Interface Context fonctions denregistrement
  • void bind(String name, Object object) Lie un
    nom à un objet. Le nom ne doit pas déjà être lié
    à un autre objet
  • void rebind(String name, Object object) Lie un
    nom à un objet. Si le nom est déjà lié, la
    liaison précédente est écrasée
  • void unbind(String name) Délie l'objet pointé
    par le nom
  • void rename(String oldName, String newName)
    Modifie le nom auquel l'objet est lié

23
Interface Context fonctions de recherche
  • Object lookup(String name) Renvoie l'objet
    pointé par le nom
  • NamingEnumeration listBindings(String name)
    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 name) Renvoie une
    énumération contenant les noms liés au contexte,
    ainsi que les noms de classes des objets liés à
    eux

24
Contexte initial et sous-contextes
  • InitialContext définit UN point dentrée pour
    lutilisation de JNDI
  • pas forcément le contexte racine
  • donne une visibilité relative X et X/Y ne sont
    pas accessiblesdepuis le contexte initial IC
  • Possibilité de créer des sous-contextes
  • Tous les contextes intermédiaires doivent exister
    pour accéder à 1, A et A/B doivent
    existerpublic Context createSubcontext(String na
    me) throws
    NamingException

25
Naming versus Directory
  • Un service de nommage (Naming) permet de
    retrouver des objets à partir d'un nom ("pages
    blanches")
  • Un service dannuaire (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")

26
Les fonctions de base dun service de pages
jaunes (Directory)
  • Mêmes méthodes que Context (rebind, lookup,
    createSubcontext, ...)
  • Créé à partir de InitialDirContext
  • Rajoute la gestion des attributs
  • Rajoute les fonctions sophistiquées de recherche

27
Configuration de JNDI ContextFactory Provider
  • Consiste à choisir
  • quel service de nommage utiliser
  • un fournisseur particulier
  • Utilisation de propriétés systèmes
  • "java.naming.factory.initial" ou
    Context.INITIAL_CONTEXT_FACTORY
  • "java.naming.provider.url" ou Context.PROVIDER_URL
  • Deux façons de configurer ces propriétés
  • Paramétrer le contexte initial
  • Hashtable env new Hashtable()
  • env.put("java.naming.factory.initial", ...)
  • env.put("java.naming.provider.url", ...)
  • javax.naming.Context ct new InitialContext(env)
  • Passer en paramètre de ligne de commande de Java
  • java -Djava.naming.factory.initialvalue
    -Djava.naming.provider.urlvalue Server

28
ContextFactory exemples
  • FileSystem com.sun.jndi.fscontext.FSContextFacto
    ry
  • Lightweight Directory Access Protocol (LDAP)
    com.sun.jndi.ldap.LdapCtxFactory
  • CORBA services (COS) naming service
    com.sun.jndi.cosnaming.CNCtxFactor
  • Java Remote Method Invocation (RMI) Registry
    com.sun.jndi.rmi.registry.RegistryContextFactory
  • NIS com.sun.jndi.nis.NISCtxFactory
  • NDS com.novell.naming.service.nds.NdsInitialCon
    textFactory

29
Providers et formats daccès exemples
  • FileSystem file//directory_path
  • Lightweight Directory Access Protocol (LDAP)
    ldap//hostport
  • CORBA services (COS) naming service
    corbalochostport/NameService
  • Java Remote Method Invocation (RMI) Registry
    rmi//hostport/
  • NIS nis//servername/domain
  • NDS nds//ndsTreeName

30
Création du contexte initial exemple pour un
système de fichier
  • 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
  • Hashtable hashtableEnvironment new Hashtable()
  • hashtableEnvironment.put(Context.INITIAL_CONTEXT_F
    ACTORY,
  •          "com.sun.jndi.fscontext.F
    SContextFactory")
  • hashtableEnvironment.put(Context.PROVIDER_URL,
    "file//tmp")
  • Context context new InitialContext(hashtableEnvi
    ronment)

31
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) ...
  • Sécurité associée à un nœud
  • Se répercute aux sous-nœuds

32
Lister un contexte
  • Lister un contexte
  • Pour obtenir un objet (désigné par n DN ? dans le
    cours ???) on a vu qu'il fallait utiliser
    Context.lookup() . Par contre il est aussi
    possible de lister le contenu d'un répertoire (ce
    n'est pas plutôt le contenu d'un contexte ?). On
    utiliise toujours InitialContext dans les
    exemples ...., le lookup s'utilise après
    ?Context.list() renvoie une énumération de
    NameClassPair . comportant le nom de l'objet et
    sa classe.NamingEnumeration list
    ctx.list("awt")while (list.hasMore())
    NameClassPair nc (NameClassPair)list.next()S
    ystem.out.println(nc)Reprenez le premier
    exemple, en utilisant cette fois    
    env.put(Context.PROVIDER_URL, "file/yourHome/tmp/
    tutorial") Et listez le contenu du répertoire.

33
Lier un objet à un contexte
  • Lier un objet à un contexte
  • L'interface Context permet de lier (bind) un
    objet à un contexte. Elle implémente également
    rebind, unbind.Afin de pouvoir être lié à un
    Context, l'objet doit implémenter l'interface
    Referenceable.
  • - Création du contexte initial Hashtable env
    new Hashtable()     env.put(Context.INITIAL_CONTE
    XT_FACTORY,         "com.sun.jndi.fscontext.RefFSC
    ontextFactory")     env.put(Context.PROVIDER_URL,
    "file/yourHome/tmp/tutorial") Context ctx
    new InitialContext(env)
  • - Création de l'objet  Fruit fruit new
    Fruit("orange")

34
Lier un objet à un contexte
  • - Création de la liaisonctx.bind("favorite",
    fruit)
  • - Lookup et affichage de l'objetQue se
    passe-t-il lorsque l'on exécute le programme une
    deuxième fois ?On peut alors penser à utiliser
    rebind.Il est également possible de renommer un
    objet en utilisant Context.rename() .
  • Création d'un sous-contexte
  • Il est possible de créer un sous-contexte en
    utilisant createSubcontext() .Context result
    ctx.createSubcontext("new")

35
Lier un objet à un contexte
  • Appli de test
  •     On écrit une classe de test permettant de
    faire un bind sur l'objet// Create the remote
    object to be bound, and give it a nameHello h
    new HelloImpl()// Bind the object to the
    directoryctx.bind("cnRemoteHello", h)
  • Appli de test lookup
  • Et on rajoute le lookup. Hello h2
    (Hello)ctx.lookup("cnRemoteHello")        
  • System.out.println(h2.sayHello())
  • On ferme le contexte quand on a fini, et on
    oublie pas le catch sur NamingException  //
    Close the context when we're done        
    ctx.close()

36
Classe Fruit
  • import javax.naming.
  • / This class is used by the Bind example.
  • It is a referenceable class that can be stored
    by service
  • providers like the LDAP and file system
    providers. /
  • 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
  • public String toString() return fruit

37
  • import javax.naming.
  • import javax.naming.spi.ObjectFactory
  • import java.util.Hashtable
  • / This is an object factory that when given a
    reference for a Fruit
  • object, will create an instance of the
    corresponding Fruit. /
  • public class FruitFactory implements
    ObjectFactory
  • public FruitFactory()
  • 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.getName(
    )))
  • RefAddr addr ref.get("fruit")
  • if (addr ! null) return new
    Fruit((String)addr.getContent())
  • return null

38
Utilisation dun directory
  • Import des classes dans le programme
  • import javax.naming.Contextimport
    javax.naming.directory.InitialDirContextimport
    javax.naming.directory.DirContextimport
    javax.naming.directory.Attributesimport
    javax.naming.NamingException
  • Création du Contexte initial
  • Hashtable env new Hashtable()env.put(Context.
    INITIAL_CONTEXT_FACTORY,"com.sun.jndi.ldap.LdapCt
    xFactory")env.put(Context.PROVIDER_URL,
    "ldap//localhost389/ostooges")DirContext
    ctx new InitialDirContext(env)

39
Utilisation dun directory
  • Obtenir les attributs d'un objet du Directory
  • Attributes attrs ctx.getAttributes("cn Moe
    Anderson, ouMemberGroupA")
  • Extraction de l'attribut désiré
  • //Sn surname (nom de famille)System.out.pri
    ntln("sn " attrs.get("sn").get())
    System.out.println("pager " attrs.get("pager").
    get())
  • Gérer l'exception NamingException
  • Ne pas oublier le try/catch !

40
Utilisation dun directory
  • Créez un filtre en s'aidant du code suivant //
    Specify the attributes to match// Ask for
    objects that has a surname ("sn") attribute with
    // the value "Geisel" and the "mail"
    attributeAttributes matchAttrs new
    BasicAttributes(true) // ignore attribute name
    casematchAttrs.put(new BasicAttribute("sn",
    "Geisel"))matchAttrs.put(new BasicAttribute("mai
    l"))// Search for objects that have those
    matching attributesNamingEnumeration answer
    ctx.search("ouPeople", matchAttrs)Affichez
    les résultats avec tous leurs attributs en vous
    aidant du code suivant while (answer.hasMore())
    SearchResult sr (SearchResult)answer.next()S
    ystem.out.println("gtgtgt" sr.getName())printAttr
    s(sr.getAttributes())Et du code suivant pour
    printAttrsfor (NamingEnumeration ae
    answer.getAll() ae.hasMore()) Attribute attr
    (Attribute)ae.next()System.out.println("attrib
    ute " attr.getID())/ Print each value
    /for (NamingEnumeration e attr.getAll()
    e.hasMore()System.out.println("value "
    e.next()))

41
Module SI2 Applications réparties
  • Service de nommage RMI IIOP JNDI

Extraits de Mireille Blay-Fornarino, Anne-Marie
Dery-Pinna et Didier Donsez
42
RMI-IIOP et JNDIpour linteropérabilitéCORBA/RMI
43
Communication inter-ORB
IIOP
IIOP
TCP/IPnetwork
IIOP
44
Protocoles GIOP, IIOP et JRMP
  • GIOP (General Inter-ORB Protocol) spécifie un
    standard de communications entre ORBs basé sur
  • un format pour les références dobjet
    interopérable (IOR)
  • une représentation commune des données échangées
    entre les ORBs la spécification CDR (Common
    Data Representation)
  • un ensemble de messages de transport de requêtes
    aux objets (reply, Request, )
  • IIOP (Internet Inter-ORB Protocol) est
    l'implémentation la populaire du protocole GIOP
    au dessus de TCP/IP
  • JRMP (Java Remote Method Protocol) est le
    protocole utilisé par Java RMI
  • IIOP et JRMP sont incompatibles comment faire
    interopérer Corba et RMI ?

45
Pourquoi faire interopérer RMI et CORBA ?
  • RMI est une solution tout-java
  • Un modèle simple de programmation
  • Un monde clos
  • CORBA est un standard pour les objets distribués
  • Un modèle de programmation pas si simple et non
    dédié spécifiquement à Java
  • Offre linteropérabilité à moindre coût
  • Combiner leurs avantages respectifs sans passer
    par un nouveau middleware

46
Intégration Java-RMI/CORBA
  • Coté CORBA à partir de la spec 2.3
  • la spec précise quel sous ensemble de JAVA RMI
    peut être utilise pour faire du CORBA
  • Java to IDL Prise en charge de la sémantique
    liée objets RMI
  • Passage par valeur un équivalent à la
    sérialisation Java
  • Coté RMI à partir de la jdk 1.3
  • Extension du compilateur rmic pour pouvoir
    générer à partir de code Java
  • des souches compatibles IIOP
  • des IDLs
  • Interopérabilité et service de nommage JNDI
  • Restrictions pas de garbage collector, pas de
    cast implicite, pas de surcharge

47
Compatibilité IIOP Différences de développement
coté serveur (1/2)
  • 1. Clause dimportation
  • javax.rmi.PortableRemoteObject au lieu de
    java.rmi.UnicastRemoteObject
  • javax.naming.InitialContext au lieu de
    java.rmi.Naming
  • 2. Définition de lobjet distant
  • pas de différence au niveau de linterface de
    lobjet
  • au niveau de limplémentation public class
    MyObjectImpl extends PortableRemoteObject
    implements MyObject
  • 3. Enregistrement de lobjet distant via JNDI
  • InitialContext.rebind("obj_ref", obj)
  • 4. Génération des souches compatibles IIOP rmic
    -iiop

48
Compatibilité IIOP Différences de développement
coté serveur (2/2)
  • 5. Lancement du service de nommage choisi
    (rmiregistry, CosNaming, )
  • 6. Dans le cas de linteropérabilité avec CORBA,
    une étape supplémentaire génération de lIDL
    avec rmic -idl
  • Pour générer les bonnes souches CORBA

49
Compatibilité IIOP Différences de développement
coté client
  • 1. Clause dimportation (idem serveur)
  • javax.rmi.PortableRemoteObject
  • javax.naming.InitialContext
  • 2. Obtenir un objet distant toujours via JNDI
  • InitialContext IC new InitialContext(env)
  • Object obj IC.lookup("obj_ref")
  • MyObject myobj (MyObject)PortableRemoteObject.na
    rrow(obj,MyObject.class)
  • 3. Génération des souches compatibles IIOP rmic
    -iiop

50
Procédure de compilation rmic -iiop
Implementation File(MyObjectImpl.class)
rmic -iiop
Coté client
Coté serveur
_MyObject_Stub.class
_MyObject_Tie.class
51
Client CORBA Serveur RMI
Interface RMI de lobjet
IDL CORBA de lobjet
Implémentation RMI de lobjet
Client CORBA
Squelette RMI
Stub CORBA
Protocole IIOP
ORB
ORB
52
Client RMI Serveur CORBA
Interface RMI de lobjet
IDL CORBA de lobjet
Implémentation CORBA de lobjet
Client RMI
Squelette CORBA
Stub RMI
Protocole IIOP
ORB
ORB
  • Étape 1 pas naturelle !
  • Ne marche que pour lintégration de nouvelles
    applications

53
Conclusion
  • Interopérabilité CORBA/Java RMI peu courante mais
  • Première approche d'unification CORBA/Java RMI
    contre Microoft gt effort pour faire face aux
    solutions tout Microsoft
  • des utilisations plus fréquentes depuis
    l'apparition des EJB
  • Importance de linteropérabilité face à la
    prolifération des langages, des middlewares, ...
  • Maturation des technologies
  • émergence des middlewares orientés composants
    ccm, .net
  • Réalité différente dans les entreprises
    solutions tout XML
  • nécessité de traduire de A vers XML puis de XML
    vers B
  • même mécanismes sous-jacents (langage
    intermédiaire, conversion des données, ...)
  • Pourquoi réinventer la roue ?

54
Quelques références ...
  • Le cours http//www.essi.fr/occello/apprep/Cou
    rsIIOP-JNDI.ppt
  • Le site de Sun sur RMI-IIOP http//java.sun.com/
    j2se/1.4.2/docs/guide/rmi-iiop/
  • Un article sur linteropérabilité RMI/CORBA
    http//www.javaworld.com/jw-12-1999/jw-12-iiop.ht
    ml
  • Tutorial JNDIhttp//java.sun.com/products/jndi/tu
    torial/TOC.html
Write a Comment
User Comments (0)
About PowerShow.com