quelques notes sur corba f. boyer, oct 2003. principes programmation distribuée multi-plateformes...
TRANSCRIPT
![Page 1: Quelques notes sur CORBA F. Boyer, Oct 2003. Principes Programmation distribuée Multi-plateformes Notion de client et de serveur Notion de stub et de](https://reader035.vdocuments.pub/reader035/viewer/2022081515/551d9da5497959293b8d6aa5/html5/thumbnails/1.jpg)
Quelques notes sur CORBA
F. Boyer, Oct 2003
![Page 2: Quelques notes sur CORBA F. Boyer, Oct 2003. Principes Programmation distribuée Multi-plateformes Notion de client et de serveur Notion de stub et de](https://reader035.vdocuments.pub/reader035/viewer/2022081515/551d9da5497959293b8d6aa5/html5/thumbnails/2.jpg)
Principes
• Programmation distribuée
• Multi-plateformes
• Notion de client et de serveur
• Notion de stub et de squelette
![Page 3: Quelques notes sur CORBA F. Boyer, Oct 2003. Principes Programmation distribuée Multi-plateformes Notion de client et de serveur Notion de stub et de](https://reader035.vdocuments.pub/reader035/viewer/2022081515/551d9da5497959293b8d6aa5/html5/thumbnails/3.jpg)
Architecture
Servant : étend le squelette ou est un délégué
![Page 4: Quelques notes sur CORBA F. Boyer, Oct 2003. Principes Programmation distribuée Multi-plateformes Notion de client et de serveur Notion de stub et de](https://reader035.vdocuments.pub/reader035/viewer/2022081515/551d9da5497959293b8d6aa5/html5/thumbnails/4.jpg)
POA
• ORB = serveur
• POA = sous_serveur– Actions effectuées avant / après appels sur les
objets distribués– Politique d’activation– Traitement des erreurs
![Page 5: Quelques notes sur CORBA F. Boyer, Oct 2003. Principes Programmation distribuée Multi-plateformes Notion de client et de serveur Notion de stub et de](https://reader035.vdocuments.pub/reader035/viewer/2022081515/551d9da5497959293b8d6aa5/html5/thumbnails/5.jpg)
Etapes
• Définition interfaces IDL
• Mapping IDL – langages de programmation
• Implémentation des classes distribuées
• Réalisation des serveurs
• Réalisation des clients
![Page 6: Quelques notes sur CORBA F. Boyer, Oct 2003. Principes Programmation distribuée Multi-plateformes Notion de client et de serveur Notion de stub et de](https://reader035.vdocuments.pub/reader035/viewer/2022081515/551d9da5497959293b8d6aa5/html5/thumbnails/6.jpg)
Exemple
module HelloApp { interface Hello {
string sayHello(); // This line is an operation statement.
oneway void shutdown(); // This line is another };
};
![Page 7: Quelques notes sur CORBA F. Boyer, Oct 2003. Principes Programmation distribuée Multi-plateformes Notion de client et de serveur Notion de stub et de](https://reader035.vdocuments.pub/reader035/viewer/2022081515/551d9da5497959293b8d6aa5/html5/thumbnails/7.jpg)
Génération IDLJ
Pour une interface IDL
• HelloPOA.java (squelette)
• _HelloStub.java (talon)
• Hello.java (interface)
• HelloHolder.java (paramètres out)
• HelloOperations.java (interface Hello)
• HelloHelper.java (cast)
![Page 8: Quelques notes sur CORBA F. Boyer, Oct 2003. Principes Programmation distribuée Multi-plateformes Notion de client et de serveur Notion de stub et de](https://reader035.vdocuments.pub/reader035/viewer/2022081515/551d9da5497959293b8d6aa5/html5/thumbnails/8.jpg)
Référence distribuée
• Obtenue par :– Appel au serveur de noms– Lecture d’une référence sérialisée dans un
fichier– Réception d’un paramètre
Org.omg.CORBA.Object servant_to_reference(in Servant)
Org.omg.CORBA. Servant reference_to_servant(in Object)
![Page 9: Quelques notes sur CORBA F. Boyer, Oct 2003. Principes Programmation distribuée Multi-plateformes Notion de client et de serveur Notion de stub et de](https://reader035.vdocuments.pub/reader035/viewer/2022081515/551d9da5497959293b8d6aa5/html5/thumbnails/9.jpg)
Helper
• HelloHelper : pour forger une référence distribuée de type Hello
• Les méthodes standarts Corba retournent le type org.omg.CORBA.Object
helloRef = HelloHelper.narrow(objRef)
![Page 10: Quelques notes sur CORBA F. Boyer, Oct 2003. Principes Programmation distribuée Multi-plateformes Notion de client et de serveur Notion de stub et de](https://reader035.vdocuments.pub/reader035/viewer/2022081515/551d9da5497959293b8d6aa5/html5/thumbnails/10.jpg)
IOR
• Référence sérialisée
String helloIor = orb.object_to_string(helloRef)
Hello helloRef = orb.string_to_object(helloIor)
![Page 11: Quelques notes sur CORBA F. Boyer, Oct 2003. Principes Programmation distribuée Multi-plateformes Notion de client et de serveur Notion de stub et de](https://reader035.vdocuments.pub/reader035/viewer/2022081515/551d9da5497959293b8d6aa5/html5/thumbnails/11.jpg)
Implémentation d’une classe distribuée
class HelloImpl extends HelloPOA { private ORB orb; private POA poa;public void setORB(ORB orb_val) { orb = orb_val; } public void setPOA(POA poa_val) { poa = poa_val; }
public String sayHello() { return "\nHello world !!\n"; }
method public void shutdown() { orb.shutdown(false); }
}
![Page 12: Quelques notes sur CORBA F. Boyer, Oct 2003. Principes Programmation distribuée Multi-plateformes Notion de client et de serveur Notion de stub et de](https://reader035.vdocuments.pub/reader035/viewer/2022081515/551d9da5497959293b8d6aa5/html5/thumbnails/12.jpg)
Implémentation d’un serveur et d’un client
• Voir serveurCorba.html et clientCorba.html
![Page 13: Quelques notes sur CORBA F. Boyer, Oct 2003. Principes Programmation distribuée Multi-plateformes Notion de client et de serveur Notion de stub et de](https://reader035.vdocuments.pub/reader035/viewer/2022081515/551d9da5497959293b8d6aa5/html5/thumbnails/13.jpg)
Serveur générique
• Fichier de propriétés Java• poas=rootpoa• servants=shutdown;repertory;hello• shutdown.class=corbatraining.ShutdownImpl• shutdown.poa=rootpoa• shutdown.nsbind=Shutdown• shutdown.iorfile=ior/shutdown.ior• shutdown.codebase=file://build
• repertory.class=corbatraining.RepertoryImpl• repertory.poa=rootpoa• repertory.nsbind=Repertory• repertory.iorfile=ior/repertory.ior• shutdown.codebase=relfile://./build
![Page 14: Quelques notes sur CORBA F. Boyer, Oct 2003. Principes Programmation distribuée Multi-plateformes Notion de client et de serveur Notion de stub et de](https://reader035.vdocuments.pub/reader035/viewer/2022081515/551d9da5497959293b8d6aa5/html5/thumbnails/14.jpg)
Gestion du projet
• Build.xml
![Page 15: Quelques notes sur CORBA F. Boyer, Oct 2003. Principes Programmation distribuée Multi-plateformes Notion de client et de serveur Notion de stub et de](https://reader035.vdocuments.pub/reader035/viewer/2022081515/551d9da5497959293b8d6aa5/html5/thumbnails/15.jpg)
Repertory – version 2
RepertoryFactory
ClientAdministrateur
Repertory pro
Repertory fri
get
get, mget
create, delete, get set, modify, remove
![Page 16: Quelques notes sur CORBA F. Boyer, Oct 2003. Principes Programmation distribuée Multi-plateformes Notion de client et de serveur Notion de stub et de](https://reader035.vdocuments.pub/reader035/viewer/2022081515/551d9da5497959293b8d6aa5/html5/thumbnails/16.jpg)
Utilisation d’un Holder
SeqOfPerson listBetween(
in string regexp,
inout long x,
inout long y,
out long size)
0 x y 200
On souhaite obtenir la fenêtre x-ySi y > 200, alors y 200
![Page 17: Quelques notes sur CORBA F. Boyer, Oct 2003. Principes Programmation distribuée Multi-plateformes Notion de client et de serveur Notion de stub et de](https://reader035.vdocuments.pub/reader035/viewer/2022081515/551d9da5497959293b8d6aa5/html5/thumbnails/17.jpg)
Utilisation d’un Holder• Holder = conteneur (objet) qui contient le
paramèter de type in ou inout
• Classes Holder prédéfinies Org.omg.CORBA.BooleanHolder,
Org.omg.CORBA.StringHolder, …
• Classes générées TimeHolder, RepertoryHolder, …
![Page 18: Quelques notes sur CORBA F. Boyer, Oct 2003. Principes Programmation distribuée Multi-plateformes Notion de client et de serveur Notion de stub et de](https://reader035.vdocuments.pub/reader035/viewer/2022081515/551d9da5497959293b8d6aa5/html5/thumbnails/18.jpg)
Utilisation d’un Holder (suite)
// impl :
Public class HorlogeImpl extends HorlogePOA {
public void getFullTime(shortHolder hour, shortHolder min) {
hour.value = …, min.value = …;
…
// client :
shortHolder hour = new shortHolder();
shortHolder min = new minHolder();
Horloge.getTime(hour, min);
System.out.println(« hour » + hour.value + « min » + min.value);
![Page 19: Quelques notes sur CORBA F. Boyer, Oct 2003. Principes Programmation distribuée Multi-plateformes Notion de client et de serveur Notion de stub et de](https://reader035.vdocuments.pub/reader035/viewer/2022081515/551d9da5497959293b8d6aa5/html5/thumbnails/19.jpg)
Utilisation d’un Holder (suite)// idl
struct time { short hour; short min }; …// impl public class HorlogeImpl … { public void getTime(timeHolder t) {
time _t = new time(); _t.hour = …, _t.min = …; t.value = _t; …
// client.time t = new timeHolder(); horloge.getTime(t); System.out.println(« hour » + t.value.hour + « min » + t.value.min);
![Page 20: Quelques notes sur CORBA F. Boyer, Oct 2003. Principes Programmation distribuée Multi-plateformes Notion de client et de serveur Notion de stub et de](https://reader035.vdocuments.pub/reader035/viewer/2022081515/551d9da5497959293b8d6aa5/html5/thumbnails/20.jpg)
Utilisation d’un Holder (suite)// idl
interface Time { void setHour(short h); void setMin (short m); ..} …// impl public class HorlogeImpl … { public void getTime(TimeHolder t) {
Time _t = new Time(); _t.setHour (…), _t.setMin(…); t.value = _t; …
// client.TimeHolder ht = new TimeHolder(); horloge.getTime(ht); Time t = ht.value; System.out.println(« hour » + t.getHour() + « min » + t.getMin());
![Page 21: Quelques notes sur CORBA F. Boyer, Oct 2003. Principes Programmation distribuée Multi-plateformes Notion de client et de serveur Notion de stub et de](https://reader035.vdocuments.pub/reader035/viewer/2022081515/551d9da5497959293b8d6aa5/html5/thumbnails/21.jpg)
Répartition de la charge de travail
• Lancer repertory_i sur Si• Repertory_i : s’enregistre dans le serveur de noms,
par exemple sous le nom rep_i• Soit les clients savent à qui s’adresser• Soit lancer un (ou plusieurs) dispatcher, qui va
récupérer les références des repertory_1..n et aiguiller les requetes clients en fonction :– De leur nom– De leur localisation– …
![Page 22: Quelques notes sur CORBA F. Boyer, Oct 2003. Principes Programmation distribuée Multi-plateformes Notion de client et de serveur Notion de stub et de](https://reader035.vdocuments.pub/reader035/viewer/2022081515/551d9da5497959293b8d6aa5/html5/thumbnails/22.jpg)
Contextes de nommage
• Cos Naming Service : service de nommage hiérarchisé
• Bind (NameComponent[], Object o)
• Rebind (NameComponent[], Corba.Object o)
• Resolve (NameComponent[]) -> Corba.Object o
• List() -> BindingIterator
![Page 23: Quelques notes sur CORBA F. Boyer, Oct 2003. Principes Programmation distribuée Multi-plateformes Notion de client et de serveur Notion de stub et de](https://reader035.vdocuments.pub/reader035/viewer/2022081515/551d9da5497959293b8d6aa5/html5/thumbnails/23.jpg)
COS Naming Service (deprecated)
• Exemple serveur:imp = new …
org.omg.CosNaming.NameComponent[] name = new NameComponent[1];
name[0] = new Org.omg.CosNaming.NameComponent();
name[0].id = « imprimeur »;
name[0].kind= « »;
try {
naming.bind(name, imp);
…
![Page 24: Quelques notes sur CORBA F. Boyer, Oct 2003. Principes Programmation distribuée Multi-plateformes Notion de client et de serveur Notion de stub et de](https://reader035.vdocuments.pub/reader035/viewer/2022081515/551d9da5497959293b8d6aa5/html5/thumbnails/24.jpg)
COS Naming Service (deprecated)
• Exemple client:org.omg.CosNaming.NameComponent[] name = new NameComponent[1];
name[0] = new Org.omg.CosNaming.NameComponent();
name[0].id = « imprimeur »;
name[0].kind= « »;
try {
obj = naming.resolve(name);
…
![Page 25: Quelques notes sur CORBA F. Boyer, Oct 2003. Principes Programmation distribuée Multi-plateformes Notion de client et de serveur Notion de stub et de](https://reader035.vdocuments.pub/reader035/viewer/2022081515/551d9da5497959293b8d6aa5/html5/thumbnails/25.jpg)
Contextes de nommage
Création nom
NameComponent [] nameC = ctxt.to_name(« name »)
Ajout liaison nom-ref
Ctxt.bind(nameC, ref)
Ajout contexte de nommage
NamingContexteExt ctxt2 = ctxt.bind_new_context(nameC);
…
Ctxt2.bind (…)
![Page 26: Quelques notes sur CORBA F. Boyer, Oct 2003. Principes Programmation distribuée Multi-plateformes Notion de client et de serveur Notion de stub et de](https://reader035.vdocuments.pub/reader035/viewer/2022081515/551d9da5497959293b8d6aa5/html5/thumbnails/26.jpg)
Contextes de nommage (ex)1. NamingContextExt ctx =
NamingContextExtHelper.narrow(orb.resolve_initial_references( "NameService"));
1. NameComponent name2[] = ctx.to_name("Personal"); NamingContextExt ctx2 = (NamingContextExt)ctx.bind_new_context(name2);
System.out.println("New naming context, Personal, added!"); 2. NameComponent name3[] = ctx.to_name("schedule");
ctx2.rebind(name3, objref); System.out.println("schedule rebind successful!");
![Page 27: Quelques notes sur CORBA F. Boyer, Oct 2003. Principes Programmation distribuée Multi-plateformes Notion de client et de serveur Notion de stub et de](https://reader035.vdocuments.pub/reader035/viewer/2022081515/551d9da5497959293b8d6aa5/html5/thumbnails/27.jpg)
Contexte de nommage (Itérateur)
1. BindingListHolder bl = new BindingListHolder(); BindingIteratorHolder blIt= new BindingIteratorHolder(); nc.list(1000, bl, blIt);
2. Get the array of bindings. This code gets the array of bindings out of the returned BindingListHolder.
3. Binding bindings[] = bl.value; 4. This code loops through the bindings and prints the names out. for
(int i=0; i < bindings.length; i++) { 5. int lastIx = bindings[i].binding_name.length-1; //
check to see if this is a naming context6. if (bindings[i].binding_type == BindingType.ncontext)
{ System.out.println( "Context: " + bindings[i].binding_name[lastIx].id); } else {
System.out.println("Object: " + bindings[i].binding_name[lastIx].id); } }