cours corba 2012
DESCRIPTION
corba dans architecture jeeTRANSCRIPT
![Page 1: Cours Corba 2012](https://reader034.vdocuments.site/reader034/viewer/2022042522/55cf99f9550346d0339ff6dd/html5/thumbnails/1.jpg)
Middleware
CORBA
M.Youssfi
![Page 2: Cours Corba 2012](https://reader034.vdocuments.site/reader034/viewer/2022042522/55cf99f9550346d0339ff6dd/html5/thumbnails/2.jpg)
2
Applications distribuées
Machine 1
Application1
Machine 2
Application2
TCP/IP ou UDP
Middlewares: • RMI
• CORBA • EJB
• Web Services
![Page 3: Cours Corba 2012](https://reader034.vdocuments.site/reader034/viewer/2022042522/55cf99f9550346d0339ff6dd/html5/thumbnails/3.jpg)
3
Architectures Distribuées SGBD
Serveur d’application
Couche DAO
Couche métier
Couche web Couche Service
MiddleWares : - RMI
- CORBA
- EJB
- Web Services
Client HTTP
HTTP
SGBD
Serveur d’application
Couche DAO
Couche métier
Couche web Couche Service
MiddleWares: - RMI
- CORBA
- EJB
- Web Services
Client HTTP
HTTP
TCP/IP
UDP
Entreprise 1 Entreprise 2
![Page 4: Cours Corba 2012](https://reader034.vdocuments.site/reader034/viewer/2022042522/55cf99f9550346d0339ff6dd/html5/thumbnails/4.jpg)
4
Architecture d’un Middleware
od:ObjetDistant Varibales méthode1()
méthode2()
InterfaceObjetDistant
méthode1()
méthode2()
implements
RMI CORBA EJB WS TCP/IP
Serveur (RMI/CORBA/EJB/WS)
Nom de l’objet distant Référence de l’objet distant
OD1 Réf1
OD2 Réf2
SKELETON
Naming Service
InterfaceObjetDistant
méthode1()
méthode2()
STUB
RMI
CORBA
EJB
WS
Appel d’une méthode distante
TCP/IP
Client Distant
Invocation
De Méthodes
Récupérer
Réf de l’objet
Sachant le nom
![Page 5: Cours Corba 2012](https://reader034.vdocuments.site/reader034/viewer/2022042522/55cf99f9550346d0339ff6dd/html5/thumbnails/5.jpg)
5
Qu'est ce que C.O.R.B.A. ?
CORBA ( Common Object Request Broker
Architecture )
C’est un Middleware qui permet de créer des
applications réparties multi langages et
multiplâteforme.
![Page 6: Cours Corba 2012](https://reader034.vdocuments.site/reader034/viewer/2022042522/55cf99f9550346d0339ff6dd/html5/thumbnails/6.jpg)
6
Intervention des amorces C.O.R.B.A.
PC Sparc
NT UNIX
ORB Java
PC/NT
ORB C++
Sparc/UNIX
Protocole IIOP
STUB Java
Client Java
SKELETON C++
Objet C++
![Page 7: Cours Corba 2012](https://reader034.vdocuments.site/reader034/viewer/2022042522/55cf99f9550346d0339ff6dd/html5/thumbnails/7.jpg)
7
Langage IDL Le langage OMG-IDL (Interface Definition Language) permet
d’exprimer, sous la forme de contrats IDL [Geib 97], la coopération
entre les fournisseurs et les utilisateurs de services, en séparant
l’interface de l’implémentation des objets
Un contrat IDL spécifie les types manipulés par un ensemble
d’applications réparties,
Le contrat IDL isole ainsi les clients et fournisseurs de
l’infrastructure logicielle et matérielle les mettant en relation à
travers le bus CORBA.
![Page 8: Cours Corba 2012](https://reader034.vdocuments.site/reader034/viewer/2022042522/55cf99f9550346d0339ff6dd/html5/thumbnails/8.jpg)
8
POA Manager
Adaptateur
d'objets (POA)
Le bus C.O.R.B.A. ( O.R.B. )
Adaptateur
d'objets (POA)
L'adaptateur d'objets (POA)
STUB A
Client
Skeleton A
Servant A
Skeleton B
Servant B
Serveur
![Page 9: Cours Corba 2012](https://reader034.vdocuments.site/reader034/viewer/2022042522/55cf99f9550346d0339ff6dd/html5/thumbnails/9.jpg)
9
L'adaptateur d'objets
Différents types d’adaptateurs sont envisageables :
BOA ou Basic Object Adapter : les structures d’accueil sont
matérialisées par des processus systèmes.
POA ou Portable Object Adapter : l’implantation des objets est
réalisée par des objets fournis par un langage de programmation.
OODA ou Object-Oriented Database Adapter : la structure
d’accueil est une base de données orientée objet.
LOA ou Library Object Adapter : le code d’implantation des
objets est stocké dans des bibliothèques chargées dans l’espace
des applications clientes.
COA ou Card Object Adapter : l’implantation des objets est
stockée dans une carte à microprocesseur. Cet adaptateur a été
expérimenté conjointement par le LIFL et la société Gemplus.
![Page 10: Cours Corba 2012](https://reader034.vdocuments.site/reader034/viewer/2022042522/55cf99f9550346d0339ff6dd/html5/thumbnails/10.jpg)
10
L'annuaire C.O.R.B.A.
Client
ORB
Stub
Réf du
servant
Protocole IIOP
Serveur
ORB
Skeleton
Servant
Naming Service
Context
Nom2 Nom1
Réf
Servant
Nom de l’objet
Référence de l’objet
Appel de méthode
Réponse de la méthode
![Page 11: Cours Corba 2012](https://reader034.vdocuments.site/reader034/viewer/2022042522/55cf99f9550346d0339ff6dd/html5/thumbnails/11.jpg)
11
Démarche à suivre pour développer un projet
CORBA
Conception : UML (Cas d’utilisation et diagramme de classes)
Maquettes de l’application
Fichier IDL (indépendant du langage)
Compilation IDL Génération des STUBS et SKELETONS
Génération des interfaces des objets distants
Génération des classes du modèle.
Implémentation de l’objet distant (Servant)
Création du serveur
Création du client
Déploiement et lancement Lancer le Naming Service
Lancer le serveur
Lancer le Client
![Page 12: Cours Corba 2012](https://reader034.vdocuments.site/reader034/viewer/2022042522/55cf99f9550346d0339ff6dd/html5/thumbnails/12.jpg)
12
IDL : Interface Definition Language
![Page 13: Cours Corba 2012](https://reader034.vdocuments.site/reader034/viewer/2022042522/55cf99f9550346d0339ff6dd/html5/thumbnails/13.jpg)
13
Premières règles sur l'IDL
Une interface est une énumération d'opérations et de définitions de types de données.
interface Exemple
{
// contenu de l'interface
};
Une interface supporte l'héritage multiple. interface AutreExemple : Exemple1, Exemple2
{
// contenu de l'interface
};
![Page 14: Cours Corba 2012](https://reader034.vdocuments.site/reader034/viewer/2022042522/55cf99f9550346d0339ff6dd/html5/thumbnails/14.jpg)
14
Décrire une opération
Les opérations décrites dans une interface respectent le format suivant :
type_de_retour nom_de_l'operation ( liste_des_paramètres ) ;
C.O.R.B.A. offre plusieurs types de données :
- les types de bases
- les types complexes
La liste des paramètres peut
être vide.
![Page 15: Cours Corba 2012](https://reader034.vdocuments.site/reader034/viewer/2022042522/55cf99f9550346d0339ff6dd/html5/thumbnails/15.jpg)
15
Les types de bases Les types de bases de CORBA sont :
boolean
octet
short ( ushort )
long ( ulong )
long long ( ulonglong )
float
double
long double
char
wchar
string
wstring
![Page 16: Cours Corba 2012](https://reader034.vdocuments.site/reader034/viewer/2022042522/55cf99f9550346d0339ff6dd/html5/thumbnails/16.jpg)
16
Les paramètres d'une opération
La description d'un paramètre comporte trois parties :
le modificateur
le type de l'argument ( type de base ou type complexe )
le nom de l'argument
Le modificateur spécifie le sens d'échange du paramètre :
in : du client vers l'objet CORBA
out : en retour, de l'objet CORBA le client
inout : équivalent à un passage par adresse.
![Page 17: Cours Corba 2012](https://reader034.vdocuments.site/reader034/viewer/2022042522/55cf99f9550346d0339ff6dd/html5/thumbnails/17.jpg)
17
Un exemple de description IDL
L'exemple suivant décrit un objet qui offre une interface appelée
« Premier ».
Cette interface comporte
une opération dénommée « affiche » qui entraîne l'affichage
d'un message sur le serveur ( message passé en tant que
paramètre par le client ).
Une méthode 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);
};
![Page 18: Cours Corba 2012](https://reader034.vdocuments.site/reader034/viewer/2022042522/55cf99f9550346d0339ff6dd/html5/thumbnails/18.jpg)
Déclarer une structure
module corbaBanque {
struct Compte {
long code;
float solde;
};
typedef sequence<Compte> tabComptes;
interface IBanqueRemote{
double conversion(in double mt);
Compte getCompte(in long code);
tabComptes getComptes();
};
};
![Page 19: Cours Corba 2012](https://reader034.vdocuments.site/reader034/viewer/2022042522/55cf99f9550346d0339ff6dd/html5/thumbnails/19.jpg)
19
Compilation d'une description IDL
La description doit être compilée afin de générer les amorces (
souche et squelette ) requises pour l'établissement de la communication
inter-processus.
Exemple de compilation IDL :
idlj –fall –v Premier.idl
A l'issu de la compilation, plusieurs fichier sont créés :
PremierOperations.java : il s'agit des opérations 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,
![Page 20: Cours Corba 2012](https://reader034.vdocuments.site/reader034/viewer/2022042522/55cf99f9550346d0339ff6dd/html5/thumbnails/20.jpg)
20
Concept de « mapping »
Une description IDL est traduite vers un langage de
programmation.
Les règles de traduction sont appelées « mapping » et font
partie de la spécification CORBA.
Grâce au mapping, deux fournisseurs d'ORBs offriront le même
modèle de programmation.
portabilité des applications
![Page 21: Cours Corba 2012](https://reader034.vdocuments.site/reader034/viewer/2022042522/55cf99f9550346d0339ff6dd/html5/thumbnails/21.jpg)
21
Correspondance des types de bases
boolean octet short
ushort
long
ulong
long long
ulong long IDL
Java boolean byte short int long
float double long double char wchar IDL
Java float double char char
string wstring IDL
Java string string
![Page 22: Cours Corba 2012](https://reader034.vdocuments.site/reader034/viewer/2022042522/55cf99f9550346d0339ff6dd/html5/thumbnails/22.jpg)
22
Implantation de l’objet distant (Servant)
org.omg.PortableServer.Servant
PremierOperations PremierPOA
Implantation
de l'objet A développer par le programmeur
API de CORBA
Généré à
partir de l'IDL
![Page 23: Cours Corba 2012](https://reader034.vdocuments.site/reader034/viewer/2022042522/55cf99f9550346d0339ff6dd/html5/thumbnails/23.jpg)
23
Exemple d’une application
Supposons que l’on souhaite créer une
application client serveur qui permet de gérer
des comptes bancaires, en utilisant le
middleware CORBA.
Dans cette partie, le serveur crée un objet
distant qui représente un compte qui est
défini par son code et son solde et permet à
un client distant faire des versements, des
retraits et des consultations de ce compte.
![Page 24: Cours Corba 2012](https://reader034.vdocuments.site/reader034/viewer/2022042522/55cf99f9550346d0339ff6dd/html5/thumbnails/24.jpg)
24
1 – Conception :
Diagramme de classes
![Page 25: Cours Corba 2012](https://reader034.vdocuments.site/reader034/viewer/2022042522/55cf99f9550346d0339ff6dd/html5/thumbnails/25.jpg)
25
2- Fichier IDL
module corbaBank{
struct Compte{
long code;
float solde;
};
typedef Compte cpte;
interface Banque{
void verser(in float mt);
void retirer(in float mt);
cpte getCompte();
};
};
![Page 26: Cours Corba 2012](https://reader034.vdocuments.site/reader034/viewer/2022042522/55cf99f9550346d0339ff6dd/html5/thumbnails/26.jpg)
26
2-Fichier IDL:
Ce fichier déclare les éléments suivants : Un module nommé corbaBanque (représente un
package dans java).
Une structure Compte qui déclare les variables d’un compte à savoir le code de type long (équivalent de int en java) et le solde de type float.
L’interface de l’objet distant nommé « Banque » qui déclare des méthodes abstraites :
verser : qui possède un paramètre « mt » de type float en entrée
retirer : qui possède un paramètre « mt » de type float en entrée
getCompte() : qui retourne l’objet Compte.
![Page 27: Cours Corba 2012](https://reader034.vdocuments.site/reader034/viewer/2022042522/55cf99f9550346d0339ff6dd/html5/thumbnails/27.jpg)
27
3- Compilation IDL
Cette étape consiste à utiliser un utilitaire fourni par L’ORB
Cette opération consiste à générer le code
des STUBS (Souche)
des SKELETONS (Squelette)
Interface du servant
Classes représentant chaque structure du modèle
Et d’autres codes utilisées par le serveur et le client
Dans java, ces fichiers sont générés à partir du fichier IDL en utilisant l’utilitaire IDLJ fourni avec le kit de développement java.
Pour faire cette opération, il faut se placer dans le répertoire de votre projet sur ligne de commandes et exécuter la commande suivante. idlj –fall –v Banque.idl
![Page 28: Cours Corba 2012](https://reader034.vdocuments.site/reader034/viewer/2022042522/55cf99f9550346d0339ff6dd/html5/thumbnails/28.jpg)
28
3- Compilation IDL
BanqueOperations.java : Interface qui déclare les
méthodes abstraites.
Banque.java : Interface de l’objet distant (Hérite 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 représente le compte ;
![Page 29: Cours Corba 2012](https://reader034.vdocuments.site/reader034/viewer/2022042522/55cf99f9550346d0339ff6dd/html5/thumbnails/29.jpg)
29
4 – Implémentation du Servant
L’implémentation d’un objet CORBA distant est une classe qui hérite du squelette et qui redéfini toutes les méthodes abstraites de l’interface.
Dans notre cas, cette classe sera nommée ImplBanque. Elle hérite du squelette BanquePOA
Cette classe défini une variable qui représente un objet de la classe Compte ,
un constructeur qui créer un compte
les trois méthodes déclarés dans l’interface à savoir : verser, retirer et getCompte.
Le code java de cette implémentation est le suivant :
![Page 30: Cours Corba 2012](https://reader034.vdocuments.site/reader034/viewer/2022042522/55cf99f9550346d0339ff6dd/html5/thumbnails/30.jpg)
30
4 – Implémentation du Servant package implOD;
import corbaBank.BanquePOA;
import corbaBank.Compte;
public class BanqueImpl extends BanquePOA {
private Compte compte;
public BanqueImpl () {
compte=new Compte(1,0);
}
public Compte getCompte() {
return compte;
}
public void retirer(float mt) {
compte.solde-=mt;
}
public void verser(float mt) {
compte.solde+=mt;
}
}
![Page 31: Cours Corba 2012](https://reader034.vdocuments.site/reader034/viewer/2022042522/55cf99f9550346d0339ff6dd/html5/thumbnails/31.jpg)
Serveur Corba, en utilisant JNDI import 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.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.CNCtxFactory
java.naming.provider.url=iiop://localhost:900
Fichier jndi.properties :
![Page 32: Cours Corba 2012](https://reader034.vdocuments.site/reader034/viewer/2022042522/55cf99f9550346d0339ff6dd/html5/thumbnails/32.jpg)
Client Corba, en utilisant JNDI import 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);
}
catch (Exception e) {
e.printStackTrace();
}
}
}
java.naming.factory.initial=com.sun.jndi.cosnaming.CNCtxFactory
java.naming.provider.url=iiop://localhost:900
Fichier jndi.properties :
![Page 33: Cours Corba 2012](https://reader034.vdocuments.site/reader034/viewer/2022042522/55cf99f9550346d0339ff6dd/html5/thumbnails/33.jpg)
33
5 – Création du serveur java import 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);
// Créer le POA Manager
POA rootPOA= POAHelper.narrow(orb.resolve_initial_references("RootPOA"));
// Activer le POA Manager rootPOA.the_POAManager().activate();
// Créer l'objet qui offre le service distant
BanqueImpl od=new BanqueImpl ();
![Page 34: Cours Corba 2012](https://reader034.vdocuments.site/reader034/viewer/2022042522/55cf99f9550346d0339ff6dd/html5/thumbnails/34.jpg)
34
5 – Création du serveur java // Créer un contexte de noms NamingContext root=NamingContextHelper.narrow
(orb.resolve_initial_references("NameService"));
//Créer un tableau de noms qui seront attribués à l'objet
NameComponent[] nsNom=new NameComponent[1];
// Définir un nom publique de l'objet distant nsNom[0]=new NameComponent("MaBanque","");
//Enregistrer la référence de l'objet distant dans le Naming
//Service
root.rebind(nsNom,rootPOA.servant_to_reference(od));
// Démarrer le serveur orb.run();
} catch (Exception e) {
e.printStackTrace();
}
}}
![Page 35: Cours Corba 2012](https://reader034.vdocuments.site/reader034/viewer/2022042522/55cf99f9550346d0339ff6dd/html5/thumbnails/35.jpg)
35
6 – Projet Du Client Avant de créer la classe du client, il faut tout d’abord copier
dans le projet du client les fichiers nécessaires au fonctionnement d’un client CORBA. Ces fichiers sont principalement
le STUB
l’interface de l’objet distant
la classe Compte.
Tous ces fichiers se trouvent dans le dossier corbaBank généré par l’utilitaire IDLJ. Copier donc le dossier corbaBank du projet du Serveur dans le projet du Client.
![Page 36: Cours Corba 2012](https://reader034.vdocuments.site/reader034/viewer/2022042522/55cf99f9550346d0339ff6dd/html5/thumbnails/36.jpg)
36
6 – Projet Du Client import 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);
// Créer le contexte de Naming Service
NamingContext root=NamingContextHelper.narrow
(orb.resolve_initial_references("NameService"));
// Créer un tableau de noms NameComponent[] nsNom=new NameComponent[1];
// Initialiser le nom de l'objet Distant
nsNom[0]=new NameComponent("MaBanque","");
// Récupérer la référence de l'objet distant à partier du Naming Service Object remoteRef=root.resolve(nsNom);
// Créer le représentant local de l'objet distant Banque b=BanqueHelper.narrow(remoteRef);
// Invocation des méthodes 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();}}}
![Page 37: Cours Corba 2012](https://reader034.vdocuments.site/reader034/viewer/2022042522/55cf99f9550346d0339ff6dd/html5/thumbnails/37.jpg)
Serveur Corba, en utilisant JNDI import 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.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.CNCtxFactory
java.naming.provider.url=iiop://localhost:900
Fichier jndi.properties :
![Page 38: Cours Corba 2012](https://reader034.vdocuments.site/reader034/viewer/2022042522/55cf99f9550346d0339ff6dd/html5/thumbnails/38.jpg)
Client Corba, en utilisant JNDI import 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.CNCtxFactory
java.naming.provider.url=iiop://localhost:900
Fichier jndi.properties :
![Page 39: Cours Corba 2012](https://reader034.vdocuments.site/reader034/viewer/2022042522/55cf99f9550346d0339ff6dd/html5/thumbnails/39.jpg)
39
7- Lancement 1- Lancer le NamingService :
Se placer dans le dossier du projet du serveur :
Exécuter la commande : tnameserv
1- Lancer le Serveur : Se placer dans le dossier du projet du serveur :
Exécuter la commande : java ServeurCorba
![Page 40: Cours Corba 2012](https://reader034.vdocuments.site/reader034/viewer/2022042522/55cf99f9550346d0339ff6dd/html5/thumbnails/40.jpg)
40
7- Lancement
3 - Lancer le Client : Se placer dans le dossier du projet du client :
Exécuter la commande : java ClientCorba
![Page 41: Cours Corba 2012](https://reader034.vdocuments.site/reader034/viewer/2022042522/55cf99f9550346d0339ff6dd/html5/thumbnails/41.jpg)
41
Application répartie CORBA (Bourse)
Une société de bourse dispose d’une base de données
MySQL Nommée DB_BOURSE. Cette base de données
stocke les cotations boursières de quelques sociétés. Ces
données son stockées dans une table nommée
« COTATIONS » dans la structure est la suivante :
![Page 42: Cours Corba 2012](https://reader034.vdocuments.site/reader034/viewer/2022042522/55cf99f9550346d0339ff6dd/html5/thumbnails/42.jpg)
42
Application répartie Corba On souhaite créer une application distribuée qui se compose de :
Un Servant qui permet de fournir à d’autres clients les informations sur les cotations d’une société données. Ce servant lui-même fait appel aux différentes classes de la couche métier qui sont liées à la base de données. Le servant Corba ainsi que la couche métier sont déployés dans un serveur administré par la bourse des cotations. Ce serveur contient également le naming service. La couche métier se compose de :
La classe Persistante Cotation.java
La classe MetierBourse qui contient deux méthodes : Une méthode qui permet de retourner une liste d’objets cotation d’une société
donnée en faisant le mapping objet relationnel.
Une application Test.java pour tester cette méthode.
Le servant corba doit offrir les services quivant : Donner les cotations d’une société donnée
Donner la cotation moyenne d’une société donnée ;
Une application Graphique SWIG Java qui sera déployée chez des banques et qui permet de : Saisir le code de la société
Afficher les cotations ou la cotation moyenne de la société saisie.
![Page 43: Cours Corba 2012](https://reader034.vdocuments.site/reader034/viewer/2022042522/55cf99f9550346d0339ff6dd/html5/thumbnails/43.jpg)
43
Architecture 1
![Page 44: Cours Corba 2012](https://reader034.vdocuments.site/reader034/viewer/2022042522/55cf99f9550346d0339ff6dd/html5/thumbnails/44.jpg)
44
Classe Persistante Cotation.java package 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() {
}
public String toString(){
return("Num="+numCotation+" Date="+dateCotation+
" Société= "+codeSociete +" Val Action=" +valAction);
}
// Getters
// Setters
}
![Page 45: Cours Corba 2012](https://reader034.vdocuments.site/reader034/viewer/2022042522/55cf99f9550346d0339ff6dd/html5/thumbnails/45.jpg)
45
Couche Métier : Mapping objet relationnel
:Cotation numCot = 1 dateCot=…
valAction= … codeSoc=‘SGMB’
:Cotation numCot = 2 dateCot=…
valAction= … codeSoc=‘SGMB’
:Cotation numCot = 3 dateCot=…
valAction= … codeSoc=‘SGMB’
cots
Base de données relationnelle Application Orientée objet
public List<Cotation> getCotations(String codeSoc){
List<Cotation> cotations=new ArrayList<Cotation>();
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")); 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);
}
}
![Page 46: Cours Corba 2012](https://reader034.vdocuments.site/reader034/viewer/2022042522/55cf99f9550346d0339ff6dd/html5/thumbnails/46.jpg)
46
Travail demandé
Mettre en place la base de données
Mettre en place et tester la couche métier La classe Cotation.java
La classe MetierBourse
La classe TestMetier
Créer le ficher IDL
Faire la compilation IDL Créer le servant
Créer le serveur Corba
Créer le client Déployer et Tester votre projet