46
 CORBA CORBA Common ommon Object bject Request equest B Broker roker A  Architecture rchitecture Mohamed Y ouss fi Laboratoire Signaux Systèmes Distribués e t Intelligence Artificielle (SSDIA) ENSET, Universi Hassan II Casablanca, Maroc Email : [email protected] Supports de cours : http://fr.slideshare.net/mohamedyoussfi9 Chaîne vidéo : http://youtube.com/mohamedYoussfi Recherche : http://www.researchgate.net/profile/Youssfi_Mohamed/publications [email protected]

Cours Corba 2014 m.youssfi

Embed Size (px)

DESCRIPTION

Cours Corba 2014 m.youssfi Cours Corba 2014 m.youssfi Cours Corba 2014 m.youssfi Cours Corba 2014 m.youssfi corba,youssfi, java ee corba,youssfi, java ee

Citation preview

  • CORBACORBACCommon ommon OObject bject RRequestequest BBroker roker AArchitecturerchitecture

    Mohamed Youssfi

    Laboratoire Signaux Systmes Distribus et Intelligence Artificielle (SSDIA)

    ENSET, Universit Hassan II Casablanca, Maroc

    Email : [email protected]

    Supports de cours : http://fr.slideshare.net/mohamedyoussfi9

    Chane vido : http://youtube.com/mohamedYoussfi

    Recherche : http://www.researchgate.net/profile/Youssfi_Mohamed/publications

    [email protected]

  • CORBACORBACCommon ommon OObject bject RRequestequest BBroker roker AArchitecturerchitecture

    Mohamed Youssfi

    Laboratoire Signaux Systmes Distribus et Intelligence Artificielle (SSDIA)

    ENSET, Universit Hassan II Casablanca, Maroc

    Email : [email protected]

    Supports de cours : http://fr.slideshare.net/mohamedyoussfi9

    Chane vido : http://youtube.com/mohamedYoussfi

    Recherche : http://www.researchgate.net/profile/Youssfi_Mohamed/publications

    [email protected]

  • Applications distribuesApplications distribues

    Machine 1 Machine 2TCP/IP ou UDP

    3

    Application1 Application2

    Middlewares: RMI CORBA EJB JMS SOAP REST

  • Architectures DistribuesArchitectures Distribues

    SGBD

    Serveur dapplication

    Couche DAO

    Couche mtier

    SGBD

    Serveur dapplication

    Couche DAO

    Couche mtier

    Entreprise 1 Entreprise 2

    4

    Couche mtier

    Couche webCouche Service

    MiddleWares :- RMI- CORBA- EJB- Web Services

    Client HTTP

    HTTP

    Couche mtier

    Couche web Couche Service

    MiddleWares:- RMI- CORBA- EJB- Web Services

    Client HTTP

    HTTP

    TCP/IPUDP

  • Architecture dun MiddlewareArchitecture dun Middleware

    od:ObjetDistantVaribalesmthode1()mthode2()

    InterfaceObjetDistant

    mthode1()mthode2()

    implements

    Serveur (RMI/CORBA/EJB/WS)

    InterfaceObjetDistant

    mthode1()mthode2()

    RMI

    Appel dune mthode distante

    Client Distant

    5

    mthode2()

    RMI CORBA EJB WSTCP/IP

    Nom de lobjet distant Rfrence de lobjet distant

    OD1 Rf1OD2 Rf2

    SKELETON

    Naming Service

    STUB

    CORBA

    EJB

    WS

    TCP/IP InvocationDe Mthodes

    RcuprerRf de lobjetSachant le nom

  • Qu'est ce que C.O.R.B.A. ?Qu'est ce que C.O.R.B.A. ?

    CORBA ( Common Object Request Broker

    Architecture )

    Cest un Middleware qui permet de crer des

    6

    Cest un Middleware qui permet de crer des

    applications rparties multi langages et

    multiplteforme.

  • Intervention des amorces Intervention des amorces C.O.R.B.A.C.O.R.B.A.

    STUB Java

    Client Java

    SKELETON C++

    Objet C++

    7

    PC Sparc

    NT UNIX

    ORB JavaPC/NT

    ORB C++Sparc/UNIX

    Protocole IIOP

  • Langage IDLLangage IDL Le langage OMG-IDL (Interface Definition Language) permet dexprimer,

    sous la forme de contrats IDL [Geib 97], la coopration entre les fournisseurs et les utilisateurs de services, en sparant linterface de limplmentation des objets

    Un contrat IDL spcifie les types manipuls par un ensemble dapplications rparties,

    Le contrat IDL isole ainsi les clients et fournisseurs de linfrastructure logicielle et matrielle les mettant en relation travers le bus CORBA.

    8

    logicielle et matrielle les mettant en relation travers le bus CORBA.

  • L'adaptateur d'objets (POA)L'adaptateur d'objets (POA)

    Skeleton A

    Servant A

    Skeleton B

    Servant B

    Serveur

    9

    POA Manager

    Adaptateur d'objets (POA)

    Le bus C.O.R.B.A. ( O.R.B. )

    Adaptateur d'objets (POA)

    STUB A

    Client

  • L'adaptateur d'objetsL'adaptateur d'objets Diffrents types dadaptateurs sont envisageables :

    BOA ou Basic Object Adapter : les structures daccueil sont matrialises par des processus systmes.

    POA ou Portable Object Adapter : limplantation des objets est ralise par des objets fournis par un langage de programmation.

    OODA ou Object-Oriented Database Adapter : la structure daccueil

    10

    OODA ou Object-Oriented Database Adapter : la structure daccueil est une base de donnes oriente objet.

    LOA ou Library Object Adapter : le code dimplantation des objets est stock dans des bibliothques charges dans lespace des applications clientes.

    COA ou Card Object Adapter : limplantation des objets est stocke dans une carte microprocesseur. Cet adaptateur a t expriment conjointement par le LIFL et la socit Gemplus.

  • L'annuaire C.O.R.B.A.L'annuaire C.O.R.B.A.

    Client

    Rf du

    Serveur

    ORB

    Skeleton

    Servant

    Appel de mthode

    Rponse de la mthode

    11

    ORB

    Stub

    Rf duservant

    Protocole IIOP

    ORB

    Naming Service

    Context

    Nom2Nom1

    Rf Servant

    Nom de lobjet

    Rfrence de lobjet

    Appel de mthode

  • Dmarche suivre pour dvelopper un projet Dmarche suivre pour dvelopper un projet CORBA CORBA

    Conception : UML (Cas dutilisation et diagramme de classes, Squence) Maquettes de lapplication

    Fichier IDL (indpendant du langage) Compilation IDL

    Gnration des STUBS et SKELETONS Gnration des interfaces des objets distants

    12

    Gnration des interfaces des objets distants Gnration des classes du modle.

    Implmentation de lobjet distant (Servant) Cration du serveur Cration du client Dploiement et lancement

    Lancer le Naming Service Lancer le serveur Lancer le Client

  • IDL : IDL : Interface Definition LanguageInterface Definition Language

    13

  • Premires rgles sur l'IDLPremires rgles sur l'IDL

    Une interface est une numration d'oprations et de dfinitions de types de donnes.

    interface Exemple

    {

    // contenu de l'interface

    14

    // contenu de l'interface

    };

    Une interface supporte l'hritage multiple.interface AutreExemple : Exemple1, Exemple2

    {

    // contenu de l'interface

    };

  • Dcrire une oprationDcrire une opration

    Les oprations dcrites dans une interface respectent le format suivant :

    type_de_retour nom_de_l'operation ( liste_des_paramtres ) ;

    15

    C.O.R.B.A. offre plusieurs types de donnes :- les types de bases- les types complexes

    La liste des paramtres peut tre vide.

  • Les types de basesLes types de bases Les types de bases de CORBA sont :

    boolean

    octet

    short ( ushort )

    long ( ulong )

    long long ( ulonglong )

    16

    long long ( ulonglong )

    float

    double

    long double

    char

    wchar

    string

    wstring

  • Les paramtres d'une oprationLes paramtres d'une opration

    La description d'un paramtre comporte trois parties :

    le modificateur

    le type de l'argument ( type de base ou type complexe )

    le nom de l'argument

    17

    Le modificateur spcifie le sens d'change du paramtre :

    in : du client vers l'objet CORBA

    out : en retour, de l'objet CORBA le client

    inout : quivalent un passage par adresse.

  • Un exemple de description IDLUn exemple de description IDL

    L'exemple suivant dcrit un objet qui offre une interface appele Premier .

    Cette interface comporte

    une opration dnomme affiche qui entrane l'affichage d'un message

    sur le serveur ( message pass en tant que paramtre par le client ).

    Une mthode produit qui retourne le produit de deux nombres a et b.

    18

    Une mthode produit qui retourne le produit de deux nombres a et b.

    interface Premier{void affiche ( in string message ) ;double produit (in double a, in double b);

    };

  • Compilation d'une description IDLCompilation d'une description IDL

    La description doit tre compile afin de gnrer les amorces (

    souche et squelette ) requises pour l'tablissement de la communication

    inter-processus.

    Exemple de compilation IDL :

    idlj fall v Premier.idl

    19

    idlj fall v Premier.idl

    A l'issu de la compilation, plusieurs fichier sont crs :

    PremierOperations.java : il s'agit des oprations de l'interface

    Premier.java : il s'agit de l'interface

    PremierPOA.java : il s'agit du squelette,

    _PremierStub.java : il s'agit de la souche,

  • Concept de Concept de mappingmapping

    Une description IDL est traduite vers un langage de programmation.

    Les rgles de traduction sont appeles mapping et font partie de la spcification CORBA.

    Grce au mapping, deux fournisseurs d'ORBs offriront le mme

    20

    Grce au mapping, deux fournisseurs d'ORBs offriront le mme modle de programmation.

    portabilit des applications

  • Correspondance des types de basesCorrespondance des types de bases

    boolean octet shortushort

    longulong

    long longulong longIDL

    Java boolean byte short int long

    21

    float double long double char wcharIDL

    Java float double charchar

    string wstringIDL

    Java string string

  • Implantation de lobjet distant (Servant)Implantation de lobjet distant (Servant)

    org.omg.PortableServer.ServantAPI de CORBA

    Gnr

    22

    PremierOperationsPremierPOA

    Implantation de l'objet

    A dvelopper par le programmeur

    Gnr partir de l'IDL

  • Exemple dune applicationExemple dune application

    Supposons que lon souhaite crer une application client serveur qui permet de grer des comptes bancaires, en utilisant le middleware CORBA.

    Dans cette partie, le serveur cre un

    23

    Dans cette partie, le serveur cre un objet distant qui reprsente un compte qui est dfini par son code et son solde et permet un client distant faire des versements, des retraits et des consultations de ce compte.

  • 1 1 Conception :Conception :

    Diagramme de classes

    24

  • 22-- Fichier IDLFichier IDLmodule corbaBank{struct Compte{long code;float solde;

    };typedef Compte cpte;interface Banque{

    25

    typedef Compte cpte;interface Banque{

    void verser(in float mt);void retirer(in float mt);cpte getCompte();

    };};

  • 22--Fichier IDL:Fichier IDL:

    Ce fichier dclare les lments suivants : Un module nomm corbaBanque (reprsente un

    package dans java). Une structure Compte qui dclare les variables

    dun compte savoir le code de type long (quivalent de int en java) et le solde de type float.

    26

    (quivalent de int en java) et le solde de type float. Linterface de lobjet distant nomm Banque qui

    dclare des mthodes abstraites : verser : qui possde un paramtre mt de type

    float en entre retirer : qui possde un paramtre mt de type

    float en entre getCompte() : qui retourne lobjet Compte.

  • 33-- Compilation IDLCompilation IDL

    Cette tape consiste utiliser un utilitaire fourni par LORB

    Cette opration consiste gnrer le code

    des STUBS (Souche)

    des SKELETONS (Squelette)

    Interface du servant

    Classes reprsentant chaque structure du modle

    27

    Classes reprsentant chaque structure du modle

    Et dautres codes utilises par le serveur et le client

    Dans java, ces fichiers sont gnrs partir du fichier IDL en utilisant lutilitaire IDLJ fourni avec le kit de dveloppement java.

    Pour faire cette opration, il faut se placer dans le rpertoire de votre projet sur ligne de commandes et excuter la commande suivante. idlj fall v Banque.idl

  • 33-- Compilation IDLCompilation IDL

    BanqueOperations.java : Interface qui dclare les

    28

    BanqueOperations.java : Interface qui dclare les mthodes abstraites.

    Banque.java : Interface de lobjet distant (Hrite de BanqueOperations)

    BanquePOA : Squelette (Skeleton)

    _BanqueStub.java : Souche (STUB)

    BanqueHelper.java : Utilis par le client.

    BanqueHolder.java : Utilis par le serveur.

    Compte.java : Classe qui reprsente le compte ;

  • 4 4 Implmentation du ServantImplmentation du Servant Limplmentation dun objet CORBA distant est une

    classe qui hrite du squelette et qui redfini toutes les mthodes abstraites de linterface.

    Dans notre cas, cette classe sera nomme ImplBanque. Elle hrite du squelette BanquePOA

    Cette classe dfini

    29

    Cette classe dfini une variable qui reprsente un objet de la classe Compte ,

    un constructeur qui crer un compte

    les trois mthodes dclars dans linterface savoir : verser, retirer et getCompte.

    Le code java de cette implmentation est le suivant :

  • 4 4 Implmentation du ServantImplmentation du Servantpackage implOD;import corbaBank.BanquePOA;import corbaBank.Compte;public class BanqueImpl extends BanquePOA {

    private Compte compte;public BanqueImpl () {

    compte=new Compte(1,0);}

    30

    }public Compte getCompte() {

    return compte;}public void retirer(float mt) {

    compte.solde-=mt;}public void verser(float mt) {

    compte.solde+=mt;}

    }

  • Serveur Corba, en utilisant JNDIServeur Corba, en utilisant JNDIimport javax.naming.InitialContext;import javax.naming.Context;import org.omg.CORBA.*; import org.omg.PortableServer.*;import servants.BanqueImpl;public class ServeurCorba {public static void main(String[] args) {try {

    ORB orb=ORB.init(args,null);Context ctx=new InitialContext();//ctx.addToEnvironment("java.naming.corba.orb", orb);POA poa=POAHelper.narrow(orb.resolve_initial_references("RootPOA"));POA poa=POAHelper.narrow(orb.resolve_initial_references("RootPOA"));poa.the_POAManager().activate();BanqueImpl od=new BanqueImpl();ctx.rebind("BK", poa.servant_to_reference(od));orb.run();

    } catch (Exception e) {e.printStackTrace();}}}

    java.naming.factory.initial=com.sun.jndi.cosnaming.CNCtxFactoryjava.naming.provider.url=iiop://localhost:900

    Fichier jndi.properties :

  • Client Corba, en utilisant JNDIClient Corba, en utilisant JNDIimport javax.naming.Context;import javax.naming.InitialContext;import corba.IBanque;import corba.IBanqueHelper;public class ClientCORBA {public static void main(String[] args){try {

    Context ctx=new InitialContext();java.lang.Object o=ctx.lookup("BK");IBanque stub=IBanqueHelper.narrow((org.omg.CORBA.Object)o);stub.verser(7000);stub.verser(7000);

    } catch (Exception e) {

    e.printStackTrace();}}}

    java.naming.factory.initial=com.sun.jndi.cosnaming.CNCtxFactoryjava.naming.provider.url=iiop://localhost:900

    Fichier jndi.properties :

  • 5 5 Cration du serveur javaCration du serveur javaimport org.omg.CORBA.ORB; import org.omg.CosNaming.*;

    import org.omg.PortableServer.POA;

    import org.omg.PortableServer.POAHelper;

    public class ServeurCorba {

    public static void main(String[] args) {

    try {

    // Initialiser l'ORB

    ORB orb=ORB.init(args,null);

    33

    ORB orb=ORB.init(args,null);

    // Crer le POA Manager

    POA rootPOA= POAHelper.narrow(orb.resolve_initial_references("RootPOA"));

    // Activer le POA Manager

    rootPOA.the_POAManager().activate();

    // Crer l'objet qui offre le service distant

    BanqueImpl od=new BanqueImpl ();

  • 5 5 Cration du serveur javaCration du serveur java// Crer un contexte de nomsNamingContext root=NamingContextHelper.narrow

    (orb.resolve_initial_references("NameService"));//Crer un tableau de noms qui seront attribus l'objetNameComponent[] nsNom=new NameComponent[1];// Dfinir un nom publique de l'objet distantnsNom[0]=new NameComponent("MaBanque","");//Enregistrer la rfrence de l'objet distant dans le Naming

    34

    //Enregistrer la rfrence de l'objet distant dans le Naming//Serviceroot.rebind(nsNom,rootPOA.servant_to_reference(od));// Dmarrer le serveurorb.run();

    } catch (Exception e) {e.printStackTrace();}

    }}

  • 6 6 Projet Du ClientProjet Du Client Avant de crer la classe du client, il faut tout dabord copier dans le

    projet du client les fichiers ncessaires au fonctionnement dun client CORBA. Ces fichiers sont principalement

    le STUB

    linterface de lobjet distant

    la classe Compte.

    35

    la classe Compte.

    Tous ces fichiers se trouvent dans le dossier corbaBank gnr par lutilitaire IDLJ. Copier donc le dossier corbaBank du projet du Serveur dans le projet du Client.

  • 6 6 Projet Du ClientProjet Du Clientimport org.omg.CORBA.ORB; import org.omg.CORBA.Object;import org.omg.CosNaming.*; import corbaBank.*;public class ClientCorba {

    public static void main(String[] args) {try{// Initialiser l'ORB

    ORB orb=ORB.init(args,null);// Crer le contexte de Naming Service

    NamingContext root=NamingContextHelper.narrow(orb.resolve_initial_references("NameService"));

    // Crer un tableau de nomsNameComponent[] nsNom=new NameComponent[1];

    36

    // Crer un tableau de nomsNameComponent[] nsNom=new NameComponent[1];

    // Initialiser le nom de l'objet DistantnsNom[0]=new NameComponent("MaBanque","");

    // Rcuprer la rfrence de l'objet distant partier du Naming Service Object remoteRef=root.resolve(nsNom);

    // Crer le reprsentant local de l'objet distantBanque b=BanqueHelper.narrow(remoteRef);// Invocation des mthodes distantes.b.verser(4000); b.retirer(2000); b.verser(1000);Compte cpte=b.getCompte();System.out.println("Code="+cpte.code+"Solde="+cpte.solde);}catch (Exception e) { e.printStackTrace();}}}

  • Serveur Corba, en utilisant JNDIServeur Corba, en utilisant JNDIimport javax.naming.InitialContext;import javax.naming.Context;import org.omg.CORBA.*; import org.omg.PortableServer.*;import servants.BanqueImpl;public class ServeurCorba {public static void main(String[] args) {try {

    ORB orb=ORB.init(args,null);Context ctx=new InitialContext();//ctx.addToEnvironment("java.naming.corba.orb", orb);POA

    poa=POAHelper.narrow(orb.resolve_initial_references("RootPOA"));POA

    poa=POAHelper.narrow(orb.resolve_initial_references("RootPOA"));poa.the_POAManager().activate();BanqueImpl od=new BanqueImpl();ctx.rebind("BK", poa.servant_to_reference(od));orb.run();

    } catch (Exception e) {e.printStackTrace();}}}

    java.naming.factory.initial=com.sun.jndi.cosnaming.CNCtxFactoryjava.naming.provider.url=iiop://localhost:900

    Fichier jndi.properties :

  • Client Corba, en utilisant JNDIClient Corba, en utilisant JNDIimport javax.naming.Context;import javax.naming.InitialContext;import corba.IBanque;import corba.IBanqueHelper;public class ClientCORBA {public static void main(String[] args){try {

    Context ctx=new InitialContext();java.lang.Object o=ctx.lookup("BK");Banque stub=BanqueHelper.narrow((org.omg.CORBA.Object)o);System.out.println(stub.test("test"));

    } catch (Exception e) {

    e.printStackTrace();}}}

    java.naming.factory.initial=com.sun.jndi.cosnaming.CNCtxFactoryjava.naming.provider.url=iiop://localhost:900

    Fichier jndi.properties :

  • 77-- LancementLancement1- Lancer le NamingService :

    Se placer dans le dossier du projet du serveur :

    Excuter la commande : tnameserv

    39

    1- Lancer le Serveur : Se placer dans le dossier du projet du serveur :

    Excuter la commande : java ServeurCorba

  • 77-- LancementLancement

    3 - Lancer le Client : Se placer dans le dossier du projet du client :

    Excuter la commande : java ClientCorba

    40

  • Application rpartie CORBA (Bourse)Application rpartie CORBA (Bourse)

    Une socit de bourse dispose dune base de donnes MySQL Nomme DB_BOURSE. Cette base de donnes stocke les cotations boursires de quelques socits. Ces donnes son stockes dans une table nomme COTATIONS dans la structure est la suivante :

    41

  • Application rpartie CorbaApplication rpartie Corba On souhaite crer une application distribue qui se compose de :

    Un Servant qui permet de fournir dautres clients les informations sur les cotations dune socit donnes. Ce servant lui-mme fait appel aux diffrentes classes de la couche mtier qui sont lies la base de donnes. Le servant Corba ainsi que la couche mtier sont dploys dans un serveur administr par la bourse des cotations. Ce serveur contient galement le naming service. La couche mtier se compose de :

    La classe Persistante Cotation.java La classe MetierBourse qui contient deux mthodes :

    42

    La classe MetierBourse qui contient deux mthodes : Une mthode qui permet de retourner une liste dobjets cotation dune socit donne en

    faisant le mapping objet relationnel.

    Une application Test.java pour tester cette mthode.

    Le servant corba doit offrir les services quivant : Donner les cotations dune socit donne Donner la cotation moyenne dune socit donne ;

    Une application Graphique SWIG Java qui sera dploye chez des banques et qui permet de : Saisir le code de la socit

    Afficher les cotations ou la cotation moyenne de la socit saisie.

  • Architecture 1Architecture 1

    43

  • Classe Persistante Cotation.javaClasse Persistante Cotation.javapackage metier;

    import java.io.Serializable;

    import java.util.Date;

    public class Cotation implements Serializable {

    private long numCotation;

    private String codeSociete;

    private Date dateCotation;

    private double valAction;

    public Cotation() {

    44

    public Cotation() {

    }

    public String toString(){

    return("Num="+numCotation+" Date="+dateCotation+

    " Socit= "+codeSociete +" Val Action=" +valAction);

    }

    // Getters

    // Setters

    }

  • Couche Mtier : Couche Mtier : MappingMapping objet relationnelobjet relationnel

    :CotationnumCot = 1dateCot=valAction= codeSoc=SGMB

    :CotationnumCot = 2

    cots

    public List getCotations(String codeSoc){List cotations=new ArrayList();try {Class.forName("com.mysql.jdbc.Driver");Connection conn=DriverManager.getConnection("jdbc:mysql://localhost:3306/bourse_ws","root","");PreparedStatement ps=conn.prepareStatement

    ("select * from cotations where CODE_SOCIETE=?");ps.setString(1, codeSoc);ResultSet rs=ps.executeQuery();while(rs.next()){

    Cotation cot=new Cotation();cot.setNumCotation(rs.getLong("NUM_COTATION"));

    45

    numCot = 2dateCot=valAction= codeSoc=SGMB

    :CotationnumCot = 3dateCot=valAction= codeSoc=SGMB

    Base de donnes relationnelleApplication Oriente objet

    cot.setNumCotation(rs.getLong("NUM_COTATION"));

    cot.setDateCotation(rs.getDate("DATE_COTATION"));

    cot.setCodeSociete(rs.getString("CODE_SOCIETE"));cot.setValAction(rs.getDouble("VAL_ACTION"));cotations.add(cot);

    }} catch (Exception e) { e.printStackTrace();}

    return(cotations);}}

  • Travail demandTravail demand

    Mettre en place la base de donnes Mettre en place et tester la couche mtier

    La classe Cotation.java

    La classe MetierBourse

    La classe TestMetier

    Crer le ficher IDL

    46

    Crer le ficher IDL Faire la compilation IDL Crer le servant Crer le serveur Corba Crer le client Dployer et Tester votre projet