Construction d applications r[Please insert PrerenderUnicode{é} into preamble]parties - Cours 6
6 pages
Latin

Construction d'applications r[Please insert PrerenderUnicode{é} into preamble]parties - Cours 6

Le téléchargement nécessite un accès à la bibliothèque YouScribe
Tout savoir sur nos offres
6 pages
Latin
Le téléchargement nécessite un accès à la bibliothèque YouScribe
Tout savoir sur nos offres

Description

Le type AnyConstruction Constructiond’applications d’applicationsr´eparties r´epartiesGilles Roussel Gilles RousselConstruction d’applications r´eparties Transmettre des arguments ou des valeurs de retourAny Anyg´en´eriquesCours 6Invocation Invocationdynamique dynamiqueType IDL any correspondant au type Java AnyLes LesInstance vide construite via orb.create any()intercepteurs intercepteursGilles RousselInstance remplie avec une valeur particuli`ere par :Gilles.Roussel@univ-mlv.frorb.insert type() pour les types primitifshttp://igm.univ-mlv.fr/~roussel/CORBA/TypeHelper.insert() pour les types utilisateursClasses particuli`eres pour ins´erer des tableaux ou s´equencesIR3(i.e. LongSeqHelper)17 octobre 2006Gilles Roussel Construction d’applications r´eparties Gilles Roussel Construction d’applications r´epartiesR´ecup´eration du type du contenu Comparer les typesConstruction ConstructionIl faut connaˆıtre le type de l’objet pour l’extraired’applications d’applicationsr´eparties r´epartiesType repr´esent´e par un objet TypeCode retourn´e par laGilles Roussel Gilles Rousselm´ethode type()Contient des informations caract´erisant le type de l’objet :Any Any Comparer la sorte (kind().value()) en utilisant lesla sorte (type primitif, structure, s´equence, alias, etc.)Invocation Invocationconstantes enti`eres TCKind. tk kinddynamique dynamiqueretourn´ee par la m´ethode kind(), repr´esent´ee parComparer directement l’objet TypeCode avec les ...

Informations

Publié par
Nombre de lectures 35
Langue Latin

Extrait

Construction d’applications re´parties
Gilles Roussel
Any Invocation dynamique Les intercepteurs
Construction d’applications r´eparties
Gilles Roussel
Any Invocation dynamique Les intercepteurs
Constructiondapplicationsre´parties Cours 6
Gilles Roussel Gilles.Roussel@univmlv.fr http://igm.univmlv.fr/~roussel/CORBA/
IR3 17 octobre 2006
Gilles Roussel
Constructiondapplicationsr´eparties
R´ecupe´rationdutypeducontenu
Il faut connaˆıtre le type de l’objet pour l’extraire Typerepre´sente´parunobjetTypeCodearparlrn´eetou m´ethodetype() Contientdesinformationscaracte´risantletypedelobjet: lasorte(typeprimitif,structure,s´equence,alias,etc.) retourn´eeparlam´ethodekind()are´peestnrpe´,er l´enume´rationIDLTCKindrerittenueo(nre´aprvalue()) pour les types utilisateurs, l’identificateur de type ou Repository ID(que l’on trouve aussi dans les IOR) retourn´eparlam´ethodeid() pourlestypesconteneurssimples(alias,s´equenceou tableau),letypeduoudes´ele´mentscontenusretourne´par content type() pour les types conteneurs complexes (structures, unions, etc.), le nombre de membres (member count()) et, pour chacun d’eux, leur nom (member count(i)) et leur type (member type(i)) GillesRousselConstructiondapplicationsre´parties
Construction d’applications r´eparties
Gilles Roussel
Any Invocation dynamique Les intercepteurs
Construction d’applications r´eparties
Gilles Roussel
Any Invocation dynamique Les intercepteurs
Le typeAny
Transmettre des arguments ou des valeurs de retour g´en´eriques Type IDLanycorrespondant au type JavaAny Instance vide construiteviaorb.create any() Instanceremplieavecunevaleurparticulie`repar: orb.inserttype()pour les types primitifs TypeHelper.insert()pour les types utilisateurs Classesparticulie`respourinse´rerdestableauxouse´quences (i.e.LongSeqHelper)
Gilles Roussel
Comparer les types
Constructiondapplicationsr´eparties
Comparer la sorte (kind().value()) en utilisant les constantesenti`eresTCKind. tkkind Comparer directement l’objetTypeCodelcevadesethoesm´ equal()(sans«s») ouequivalent()(pour les alias) avec les objets : TypeHelper.type()pour les types utilisateurs orb.get primitie tc(TCKind.tktype)pour les types primitifs
Gilles Roussel
Constructiondapplicationsr´eparties
Construction d’applications r´eparties
Gilles Roussel
Any Invocation dynamique Les intercepteurs
Construction d’applications r´eparties
Gilles Roussel
Any Invocation dynamique Les intercepteurs
R´ecup´ererlecontenudunAny
any.extracttype()pour les types primitifs TypeHelper.extract(any)pour les autres types
Gilles Roussel
Constructiondapplicationsre´parties
Affichage des informations sur un type
TypeCode type= ... int n =type.member count(); System.err.println("Nombre de membres : " + n); for (int i = 0; i < n; i++) { System.err.print("Membre n " + i + " : "); System.err.print(type.member name(i)); System.err.print(" de type code "); System.err.println(type.member type(i) ); }
Gilles Roussel
Constructiondapplicationsre´parties
Construction d’applications r´eparties
Gilles Roussel
Any Invocation dynamique Les intercepteurs
Construction d’applications re´parties
Gilles Roussel
Any Invocation dynamique Les intercepteurs
Re´cupe´rationdutypere´el
TypeCodegetRealType(TypeCode type) { try { if (type.kind().value()==TCKind. tk alias) { returngetRealType(type.content type()); } returntype; } catch (BadKinde) { assert false; throw new RuntimeException(e); } }
Gilles Roussel
Constructiondapplicationsr´eparties
Construction de l’objetAny
Any arg = orb.createany(); arg.insert string(nelaVa"Marlle´"e); System.out.println(h.hello(arg)); LocalityHelper.insert(arg,new Locality("Paris")); System.out.println(h.hello(arg)); String [] t = new String[] "Paris", "Londres", "Tokyo" StringSeqHelper.insert(arg,t); System.out.println(h.hello(arg)); arg.insert long(2); System.out.println(h.hello(arg));
Gilles Roussel
Constructiondapplicationsre´parties
Construction d’applications re´parties
Gilles Roussel
Any Invocation dynamique Les intercepteurs
Construction d’applications r´eparties
Gilles Roussel
Any Invocation dynamique Les intercepteurs
R´ecup´erationducontenuduntypeAny
public String hello(Any arg) { try { String h = "Hello from "; TypeCodetype= getRealType(arg.type()); switch (type.kind().value()) { caseTCKind. tk string: return h +arg.extract string(); caseTCKind. tk struct: if (type.equal(LocalityHelper.type())) { return h +LocalityHelper.extract(arg).name; } break; caseTCKind. tk sequence: TypeCode stringType = ORB.init().get primitive tc(TCKind.tk string); if (type.content type().equivalent(stringType)) { for (String from :StringSeqHelper.extract(arg)) { h += from + " "; } return h; } break; } return h + "nowhere"; } catch (BadKind e) { assert false; throw new RuntimeException(e); } catch (Bounds e) { assert false; throw new RuntimeException(e);
Gilles Roussel
Constructiondapplicationsre´parties
Cr´eationdelobjetrequˆete
Obtenirunre´fe´rencedelobjetCORBAsurlequel invoqueruneme´thode Cre´erunobjetrequeˆte(Request)saosice´a`nure´eference aveclame´thoderequest()de celleci ref. request("hello") Rien n’est transmis Pre´ciserlesarguments: Cre´er,danslordredesparam`etres,desobjetsAnypour les contenir soit avecadd in arg(),add out arg()ou add inout arg(), soit avecadd named in arg(), add named out arg()ouadd named inout arg() Remplirlesobjetsretourn´esparcesm´ethodesavecles arguments Pr´eciserletypedelavaleurderetouraveclame´thode set return type()qui prend en argument un objet TypeCode
Gilles Roussel
Constructiondapplicationsr´eparties
Construction d’applications r´eparties
Gilles Roussel
Any Invocation dynamique Les intercepteurs
Construction d’applications re´parties
Gilles Roussel
Any Invocation dynamique Les intercepteurs
Invocation dynamique
Possibilit´edinvoqueruneme´thodesurunobjetCORBA sans disposer de son interface ni de sa classeHelper Utilis´edanslessouches(stub) N´ecessitedeconnaıˆtre: lesprolsdesm´ethodes lesclassesdestypesutilisateursutilis´eespourles parame`tres,lavaleurderetouretlesexceptions
Gilles Roussel
Constructiondapplicationsre´parties
Cre´ationdynamiquederequˆete
Object h = context.resolvestr("Hello"); Request request=h.request("hello"); Any arg=request.add in arg(); Any value = orb.createany(); valuel´ee");esetarlVtsliargn"(.aMnnir arg.insert any(value); TypeCode returnType= orb.get primitive tc(TCKind.tk string); request.set return type(returnType);
Gilles Roussel
Constructiondapplicationsre´parties
Construction d’applications r´eparties
Gilles Roussel
Any Invocation dynamique Les intercepteurs
Construction d’applications r´eparties
Gilles Roussel
Any Invocation dynamique Les intercepteurs
Invocationdeme´thodeetre´cup´erationdur´esultat
Plusieurs modes d’invocation : invocation classique avecinvoke()l,math´eebodquloe tantquelar´eponsenestpasre¸cue invocationonewayavecsend oneway()edohte´am,l nattendpasder´eponse,elleestd´eclar´eeonewaydans l’IDL invocationdi´ere´eavecsend deferred()ethodam´e,l nattendpaslarrive´edelare´ponse invocations multiples : die´re´esavecorb.send multiple requests deferred() onewayavecorb.send multiple requests oneway() R´ecup´erationdure´sultatparget response()sous la forme d’un objetAny Me´thodebloquanteencasdappeldie´r´e poll response()asovriisepmrteedseestlar´epon arriv´ee
Gilles Roussel
Constructiondapplicationsre´parties
Lagestiondesparam`etresoutetinout
Argumentsoutetinoute´spilusoneansmpantviales Holder ObjetAnyeldneevuolereoˆrgumentji´e`alapspsloocea Pourinoutelrualaveparcis´pr´etestgranemupytelede,l envelopp´ee Pouroutarlaˆtteerrpe´ic´speiodtnemugraledeypet,l m´ethodetypede l’objetAny
Gilles Roussel
Constructiondapplicationsr´eparties
Construction d’applications r´eparties
Gilles Roussel
Any Invocation dynamique Les intercepteurs
Construction d’applications r´eparties
Gilles Roussel
Any Invocation dynamique Les intercepteurs
Invocationdem´ethodeetre´cupe´rationdur´esultat
request.invoke(); Any result=request.return value(); System.out.println(result.extract string());
Gilles Roussel
Constructiondapplicationsr´eparties
Lagestiondesparame`tresoutetinout
Pourlame´thode: voidm(instring a,outstring b,inoutstring c); L’appel est le suivant : Object o = ... Request request = o._request("m"); Any arg1 = request.add_in_arg(); Any arg2 = request.add_out_arg(); Any arg3 = request.add_inout_arg(); arg1.insert_string("A"); arg2.type(orb.get_primitive_tc(TCKind.tk_string)); arg3.insert_string("C"); request.invoke(); System.out.println(arg2.extract_string()); System.out.println(arg3.extract_string());
Gilles Roussel
Constructiondapplicationsre´parties
  • Univers Univers
  • Ebooks Ebooks
  • Livres audio Livres audio
  • Presse Presse
  • Podcasts Podcasts
  • BD BD
  • Documents Documents