Vai alla Home Page About me Courseware Federica Living Library Federica Federica Podstudio Virtual Campus 3D Le Miniguide all'orientamento Gli eBook di Federica La Corte in Rete
 
I corsi di Ingegneria
 
Il Corso Le lezioni del Corso La Cattedra
 
Materiali di approfondimento Risorse Web Il Podcast di questa lezione

Stefano Russo » 23.Programmazione di client CORBA


Meccanismi statici e dinamici

CORBA offre due interfacce di programmazione dal lato cliente:

  • un’interfaccia statica (static IDL stub, o anche Static Invocation Interface o SII);
  • un’interfaccia dinamica (Dynamic Invocation Interface o DII).

I due meccanismi si differenziano per i diversi livelli di semplicità e flessibilità.

La semplicità del meccanismo statico SII deriva dalla disponibilità della classe stub rappresentativa del servizio, generata tramite compilazione dell’IDL.

La flessibilità del meccanismo dinamico è legata alla possibilità di realizzare le richieste remote anche in mancanza della classe stub. La richiesta può essere generata anche in mancanza di informazioni sull’interfaccia del servizio (introspezione).

Meccanismi statici e dinamici

Per entrambi i meccanismi, il tramite di un’invocazione remota è un oggetto richiesta (Request), istanza della classe di libreria org.omg.CORBA.Request

La Request è affidata al trasporto dell’ORB Core.


SII, modello concettuale

Il meccanismo SII si basa sul pattern Proxy, caratterizzato dalla separazione tra l’interfaccia del servizio e le diverse implementazioni.

La specifica del servizio è realizzata attraverso la definizione di una interfaccia, che ne definisce le proprietà e le operazioni.


SII, modello concettuale

Il modello fa corrispondere all’interfaccia due implementazioni:

  • una classe che fornisce l’implementazione dei metodi (remoti);
  • una classe Proxy utilizzata dal client come rappresentazione locale del servizio remoto.

L’implementazione lato client dell’interfaccia è la classe stub.

Le istanze sono note in letteratura con il termini di “oggetti proxy”.


SII, modello concettuale

In realtà l’interazione è più complessa, e vede la presenza di ulteriori entità intermediarie nella comunicazione cliente-servente:

  • Proxy
  • Broker (ORB core)
  • Object Adapter
  • Skeleton

Dal punto di vista del client, le entità visibili sono il proxy e, al più, il broker.

Il broker realizza la comunicazione tra proxy e servizio reale.

Per il programmatore la struttura interna del proxy è irrilevante.

SII, modello di programmazione

Si basa:

  • sulle classi di libreria Object e ORB, del package org.omg.CORBA;
  • Sulle classi prodotte dalla compilazione IDL; tra queste, le classi di utilità dette Helper.

Si articola in quattro passi:

  1. inizializzazione della piattaforma;
  2. acquisizione del riferimento remoto, cioè creazione di un oggetto org.omg.CORBA.Object;
  3. creazione del proxy;
  4. uso (con gestione delle eccezioni di sistema).

SII, modello di programmazione

1. Inizializzazione della piattaforma

Metodo statico init() dell’ORB.

Restituisce un riferimento all’ORB, istanza della classe org.omg.CORBA.ORB.

Con l’inizializzazione:

  • il cliente ottiene un riferimento all’ORB;
  • l’ORB registra il cliente, predisponendosi all’intermediazione.

SII, modello di programmazione

2. Acquisizione del riferimento IOR all’oggetto remoto

Creazione di un oggetto org.omg.CORBA.Object. Vari modi:

  • ricerca tramite servizio dei nomi;
  • ricerca tramite servizio di trading;
  • se si conosce già l’IOR in formato stringa, esso va convertito in un oggetto Java, istanza della classe Object (mediante metodo string_to_object() della classe ORB).

3. Creazione del proxy

Si utilizza la Helper Class generata dalla compilazione IDL.

La classe Helper serve a creare un proxy per un oggetto remoto a partire dal suo riferimento (operazione detta narrowing).

SII, modello di programmazione

4. Uso dell’oggetto remoto

Invocazione di un metodo dell’oggetto remoto come se esso fosse locale, grazie al proxy.

Prevedere la gestione delle eccezioni di sistema.

L’invocazione di un metodo può comportare il sollevarsi di una eccezione di sistema, di tipo org.omg.CORBA.SystemException.

Le gestione di tali eccezioni non è obbligatoria in quanto non specificata nell’interfaccia del proxy, ma è opportuna per un corretto uso degli oggetti remoti.

Esempi di programmazione

Primo esempio- definizione IDL

Operazione IDL senza parametri formali e senza valori di ritorno
IDL

interface ServizioA{
void operazione();
};

Classi ed interfacce generate dal compilatore a supporto della programmazione dei clienti;

  • ServizioA (interfaccia Java per il servizio);
  • ServizioAHelper (classe stub per la creazione dei proxy).

Primo esempio- il cliente

Mostra codice

Esempi di programmazione

Secondo esempio- definizione IDL

Operazione IDL con parametro formale di tipo semplice scambiato in modalità input-output
IDL

interface ServizioB{
void operazione(inout string s);
}
;

Classi necessarie alla programmazione:

  • ServizioB (interfaccia per il servizio);
  • ServizioBHelper (per la generazione dei proxy);
  • StringHolder (classe di libreria per lo scambio di stringhe in output).

Secondo esempio- il cliente

Mostra codice

Esempi di programmazione

Terzo esempio – definizione IDL

Operazione con parametro formale strutturato scambiato in modalità inout
IDL

interface ServizioC{

struct StrutturaEsempio{

string campo1;
float campo2;

} ;

void operazione(inout StrutturaEsempio st);

};

Esempi di programmazione

Terzo esempio – classi ed interfacce generate

ServizioCHelper

  • Helper class per la produzione dei proxy

StrutturaEsempio

  • classe rappresentazione della struct IDL

StrutturaEsempioHelper

  • HelperClass per la struct

StrutturaEsempioHolder

  • contenitore per la struct

Terzo esempio – il cliente

Mostra codice

Esempi di programmazione

Quarto esempio – definizione IDL

Operazione che restituisce una struct d’utente
IDL

interface ServizioD{

struct StrutturaEsempio{

string campo1;
float campo2;

} ;

StrutturaEsempio operazione();

};

Quarto esempio – il cliente

Mostra codice

Esempi di programmazione

Quinto esempio – definizione IDL

Operazione con eccezione definita dall’utente
IDL

interface ServizioE {

exception EccezioneEsempio{
string motivoEccezione;
};

void operazione() raises(EccezioneEsempio);

};

Quinto esempio – il cliente

Mostra codice

Il programmatore non utilizza esplicitamente la classe EccezioneEsempioHelper; essa è utilizzata nel proxy per costruire l'eccezione restituita dall'oggetto servente.

Esempi di programmazione

Sesto esempio – definizione IDL

Operazione con valore di ritorno di tipo valuetype
IDL

module modulo{

valuetype OggettoPassatoPerValore {

string metodo();
public string attributo; };

interface ServizioF {

OggettoPassatoPerValore

operazione(); };

};

Sesto esempio – il cliente

Mostra codice

Esempi di programmazione

Settimo esempio – definizione IDL

Operazione con valore di ritorno di tipo any
IDL

interface ServizioG {

any operazione();

};

Settimo esempio – il cliente

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