Sono la rappresentazione di sistema dei riferimenti IOR.
I metodi possono essere raggruppati in tre categorie:
Racchiudono le informazioni per l’invocazione di un metodo remoto.
Il ciclo di vita di un oggetto Request attraversa le fasi di:
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();
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.
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:
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:
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.
Passi
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 codiceSia: 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 codiceAbbiamo 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.
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 codice2. La modellazione a oggetti e il linguaggio UML (richiami)
3. Generalità su Java e la programmazione ad oggetti
6. Regole di traduzione da UML a Java/C++
7. Programmazione multi-thread
8. Sincronizzazione tra thread
9. Programmazione client-server con socket TCP/IP (Java networkin...
10. Programmazione di applicazioni client-server: il Pattern Proxy...
12. Design Patterns
13. Pattern architetturali - Esempi
14. Design pattern creazionali. Esempi
15. Design pattern strutturali. Esempi
16. Introduzione alle tecnologie middleware
17. Modelli di middleware: RPC, MOM, TP, TS