Upload
anouar-attn
View
284
Download
43
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
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
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