Constructiond’applicationsr´epartiesGilles RousselConstruction d’applications r´epartiesLa d´el´egationCours 3L’ORBIORLe service denommage Gilles RousselGilles.Roussel@univ-mlv.frURLhttp://igm.univ-mlv.fr/~roussel/CORBA/IR317 octobre 2006Gilles Roussel Construction d’applications r´epartiesL’approche par d´el´egationConstructiond’applicationsr´epartiesGilles RousselPermet `a un servant d’h´eriter d’autre chose que du POALa d´el´egation En particulier, utile en cas d’h´eritage d’interface en IDLL’ORBN´ecessit´e de g´en´erer une classe tieIOROption -fallTIE pour la commande idljLe service denommage Classe tie h´erite de la classe POALes op´erations de l’interface sont d´el´egu´ees `a une instanceURLd’une autre classe pass´ee en argument lors de laconstructionUne instance de la classe tie est activ´ee au sein du POA `ala place de la classe d’implantationGilles Roussel Construction d’applications r´epartiesLa classe d’implantationConstructiond’applicationsr´epartiesGilles RousselLa d´el´egationpackage fr.umlv.ir3.corba.cours2;L’ORBIORpublic class HelloServant implements HelloOperations {Le service depublic String hello(String localisation) {nommagereturn "Hello " + localisation;URL}}Gilles Roussel Construction d’applications r´epartiesLa classe serveurConstructiond’applicationsr´epartiespackage fr.umlv.ir3.corba.cours2;Gilles Roussel import org.omg.CORBA.ORB;import org.omg.PortableServer.POA;import org.omg ...
Permet`aun servant d’he´riterd’autrechosequeduPOA Enparticulier,utileencasd’h´eritaged’interfaceenIDL N´ecessit´edege´ne´reruneclasse tie Option -fallTIE pour la commande idlj Classe tie he´ritedelaclassePOA Lesope´rationsdel’interfacesontd´el´egu´ees`auneinstance d’uneautreclassepasse´eenargumentlorsdela construction Une instance de la classe tie estactiv´eeauseinduPOA`a la place de la classe d’implantation
d’onplapaticnsio
geURLitnortculpci’dpansr´atiotiesepar
package fr.umlv.ir3.corba.cours2;
public class HelloServant implements HelloOperations { public String hello(String localisation) { return "Hello " + localisation; } }
ORB.init(String[] args, Properties props); permetdecr´eerunobjetORBpouruneapplicationla m´ethodeaappelerpourinitialiserl’ORB ` « D´emarre » le serveur args et props permettentdeparam´etrerl’ORB Parmilespropri´ete´spossibles: org.omg.CORBA.ORBClass et org.omg.CORBA.ORBSingletonClass : classes d’implantation de l’ORB (standard) org.omg.CORBA.ORBInitialHost et org.omg.CORBA.ORBInitialPort : machine et port du service de nommage (standard) com.sun.CORBA.ORBServerHost et com.sun.CORBA.ORBServerPort : machine et port d’attentedel’ORB(spe´cifiqueSun)
L’initialisation de l’ORB
seit
uoRslesssnoCcurtontiapd’icplioatsn´rperaitse
Plusieursfa¸consdeparame´trerl’ORB: via lam´ethode init() Properties props = new Properties(); props.setProperty(" com.sun.CORBA.ORBServerPort ", "8080"); String[] argv = { " -ORBInitialPort ", "5656" } ; ORB orb = ORB.init( argv , props ); via lespropri´et´essyste`mes: java -Dorg.omg.CORBA.ORBInitialPort=8080 .... via le fichier orb.properties recherch´ed’aborddansle re´pertoireutilisateur,puisdans file:///$ { java.home } /lib
orb.init(...) demarre l’ORB ´ orb.run() bloqueleprocessusl´egercouranttantque l’ORBn’estpasarreˆte´(plusieursappelsconcurrents possibles) orb.shutdown() permetd’arrˆeterl’ORB.L’argument bool´eenpre´cisesil’appeldoitattendrelafindel’ORB avant de retourner (attention au dead-lock )
Les ´etats de l’ORB
ssuesseoRtsurClnond’actiocatipplillGi
iGllseoRs
Lese´tatsduPOA
LePOAracinere´cup´er´epar orb.resolve initial reference("RootPOA") est dans l’e´tat suspendu aussiatteintparappela` hold requests() desonmanagerre´cupe´re´parla me´thode the POAmanager() Passagedansl’e´tat actif via lam´ethode activate() de son manager L’´etat rejet estatteintparl’appel`a discard request() L’e´tat inactif estatteintparl’appel`a desactivate()
IORcontienttouteslesinformationsne´cessaires(encod´ees en Common Data Representation ) pour retrouver un objet CORBA Pour l’implantation au dessus d’IP il contient : identificateur du type de l’objet nume´roIPduserveur port du serveur identificateur de l’objet Formatd´ecritenIDL IOR d’un objet obtenu par orb.object to string()