Vai alla Home Page About me Courseware Federica Living Library Federica Federica Podstudio Virtual Campus 3D La Corte in Rete
 
Il Corso Le lezioni del Corso La Cattedra
 
Materiali di approfondimento Risorse Web Il Podcast di questa lezione

Stefano Russo » 24.Classi di libreria CORBA


Classi di libreria – org.omg.CORBA.Object

Sono la rappresentazione di sistema dei riferimenti IOR.

I metodi possono essere raggruppati in tre categorie:

  • metodi per la creazione delle Request (_request, _create_request, ..);
  • metodi per la gestione dei riferimenti remoti (duplicate, _release, is_equivalent, ..);
  • metodi per l’introspezione dell’interfaccia remota (_is_a, get_interface_def, ..).

Classi di libreria – org.omg.CORBA.Request

Racchiudono le informazioni per l’invocazione di un metodo remoto.
Il ciclo di vita di un oggetto Request attraversa le fasi di:

  • Costruzione
    • Istanziazione (tramite uno dei metodi di org.omg.CORBA.Object)
    • Popolamento (metodi tipo add)
  • Inoltro
    • Metodi invoke, send_one_way, send_deferred, ..
  • Recupero
    • return_value
  • Distruzione
    • delete

Classi di libreria – org.omg.CORBA.Any

Un oggetto org.omg.CORBA.Any è un contenitore generico per il valore di una variabile.

Per i tipi predefiniti in IDL, compreso il tipo any, la classe Any prevede una coppia di metodi per l’inserimento e l’estrazione di valori, che realizzano le operazioni di marshalling e unmarshalling.

Es per le stringhe: insert_string, extract_string

//Sia x un riferimento ad un oggetto di tipo
//org.omg.CORBA.Any

//Inserimento di un valore di tipo IDL string
x.insert_string("StringaInserita");

//Estrazione di un valore di tipo String
String stringaRitornata = x.extract_string();

Classi di libreria – org.omg.CORBA.Any

Un oggetto org.omg.CORBA.Any è un contenitore generico per il valore di una variabile.

Per i tipi predefiniti in IDL, compreso il tipo any, la classe Any prevede una coppia di metodi per l’inserimento e l’estrazione di valori, che realizzano le operazioni di marshalling e unmarshalling.

Es per le stringhe: read_string, extract_string

Per i tipi definiti in IDL dall’utente il marshalling e l’unmarshalling sono più complessi. Any fornisce stream (create_input_stream, create_output_stream) per la scrittura e per la lettura di valori in formato stream di caratteri. E’ compito del programmatore, tramite le Helper Class, trasformare i valori strutturati in uno stream e viceversa.


Classi di libreria – org.omg.CORBA.ORB

Gli oggetti di tipo ORB rappresentano il punto d’ accesso a molti servizi di piattaforma necessari sia ai clienti sia ai serventi. Si possono individuare tre gruppi di metodi:

  • per l’inizializzazione, l’attivazione e la disattivazione della piattaforma;
    • Metodi statici init
  • per la risoluzione di servizi remoti;
    • resolve_initial_reference, string_to_object
  • a supporto della formulazione delle Request
    • create_operation_list, send_multiple_request_deferred, poll_response
  • per la manipolazione e la trasformazione dei riferimenti remoti.
    • object_to_string

L’interfaccia DII

L’ interfaccia Dynamic Invocation Interface permette la formulazione di invocazioni di metodi remoti, quando non si dispone dello stub.

L’interfaccia DII comprende diversi oggetti di sistema che devono essere esplicitamente utilizzati dal programmatore, e permette la creazione di oggetti Request a partire da:

  • un riferimento all’oggetto remoto;
  • una completa informazione sulla firma del metodo da invocare.

Informazioni sulla firma dei metodi

Prerequisito per l’invocazione della richiesta dinamica

Possono essere note a tempo di programmazione del client.

Pur non disponendo lo stub o la completa specifica dell’interfaccia in IDL (da cui derivare lo stub) il programmatore potrebbe conoscere la firma dei metodi remoti.

Possono essere acquisite a tempo di esecuzione, tramite introspezione della definizione dell’interfaccia IDL (oggetti di tipo InterfaceDef) supportata dal servizio di Interface Repository.

Request dinamiche per metodi a firma nota

Passi

  • Risoluzione del riferimento remoto (acquisizione dell’org.omg.CORBA.Object)
  • Costruzione della richiesta
  • Invocazione e recupero risultati
  • Distruzione della richiesta

Primo esempio

Sia void metodoNoto(), un metodo semplice che non restituisce risultati e non richiede parametri in ingresso.

La programmazione del cliente è relativamente semplice, come illustrato nell’esempio riportato di seguito.

Mostra codice

Primo esempio


Secondo esempio

Sia: long metodoRestituisceLong() il metodo da invocare. Rispetto al caso precedente il cliente dovrà recuperare il valore di ritorno.

Dalla risposta ottenuta è possibile estrarre il risultato nel formato opportuno (float).

Mostra codice

Secondo esempio


Interface Repository

Abbiamo descritto la programmazione di clienti DII nei casi in cui, pur non disponendo dello stub, è nota la firma dei metodi da invocare.

Nel caso più generale in cui non si dispone della firma dei metodi, occorre ottenere le descrizioni relative all’interfaccia dinamicamente.

Questa esigenza è supportata dal servizio di Interface Repository. Il servizio archivia le definizioni presenti in una specifica IDL e le rende disponibili tramite appositi oggetti di piattaforma. Le corrispondenze tra definizioni IDL e oggetti di sistema della IR è riassunta nella tabella.


Interface Repository – tipi per il servizio

La classe base per tutti gli oggetti registrati nell’IR è org.omg.CORBA.IRObject

La navigazione nella IR è supportata da due ulteriori interfacce di tipo org.omg.CORBA.Container e org.omg.CORBA.Container

Molti oggetti di tipo xxDef sono contenitori di ulteriori specifiche (esempio, ModuleDef contiene InterfaceDef); altri oggetti sono sia contenitori che contenuti (InterfaceDef è contenuta in ModuleDef e contiene AttributeDef), altri ancora sono soltanto contenuti (ConstantDef). Per tale motivo gli oggetti di tipo xxDef implementano, oltre all’interfaccia IRObject, l’interfaccia Container, oppure Contained, oppure entrambi.

Sfruttando questo insieme di caratteristiche è possibile navigare nella IR in maniera ordinata. L’ esempio seguente mostra un percorso di introspezione nella repository.

Mostra codice
  • Contenuti protetti da Creative Commons
  • Feed RSS
  • Condividi su FriendFeed
  • Condividi su Facebook
  • Segnala su Twitter
  • Condividi su LinkedIn
Progetto "Campus Virtuale" dell'Università degli Studi di Napoli Federico II, realizzato con il cofinanziamento dell'Unione europea. Asse V - Società dell'informazione - Obiettivo Operativo 5.1 e-Government ed e-Inclusion

Fatal error: Call to undefined function federicaDebug() in /usr/local/apache/htdocs/html/footer.php on line 93