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 » 20.Ciclo di sviluppo di applicazioni CORBA


L’ORB

Struttura dell’ORB CORBA

Struttura dell'ORB CORBA


Interfacce dell’ORB

Interfacce lato cliente:

  • Statica (Static IDL Stub o Static Invocation Interface, SII)
  • Dinamica (Dynamic Invocation Interface, DII)

Interfacce lato servente:

  • Statica (Static IDL Skeleton o Static Skeleton Interface, SSI)
  • Dinamica (Dynamic Skeleton Interface, DSI)
  • Portable Object Adapter (POA)

Interfacce “comuni”

  • ORB Interface
  • Interface repository

Invocazione di servizi remoti

Modalità statica

Da impiegare quando è nota in fase di programmazione l’interfaccia IDL del servizio.

Per il cliente: interfaccia SII.

Per il servente: interfaccia SSI.

Stub e skeleton sono generati dalla compilazione IDL.

  • IDL language mappings in C++, Java, COBOL, …

Modalità dinamica

Da impiegare quando non è nota a tempo di compilazione l’interfaccia IDL del servizio.

Per il cliente: interfaccia DII.

Per il servente: interfaccia DSI.

Invocazione di servizi remoti

Cliente e servente sono sviluppati separatamente.
In linea di principio sono possibili tutte le quattro combinazioni

  • Richiesta SII (con stub) – servizio SSI (con skeleton);
  • Richiesta SII (con stub) – servizio DSI;
  • Richiesta DII – servizio SSI (con skeleton);
  • Richiesta DII – servizio DSI.

La modalità della richiesta è trasparente all’oggetto.

La modalità della risposta è trasparente al cliente.

In pratica: modalità statica per la maggior parte delle applicazioni

Modalità statica

Interazione cliente-oggetto tramite stub – ORB – skeleton

Interazione cliente-oggetto tramite stub – ORB - skeleton


Modalità dinamica

La costruzione della richiesta di servizio e la sua trasmissione all’ORB sono a cura del programmatore.

Meccanismo più potente ma più oneroso per il programmatore.

Richiede la conoscenza di alcuni meccanismi interni di funzionamento dell’ORB.

Da impiegare in applicazioni con particolari requisiti di flessibilità.

Confronto

\begin{tabular}{lp{0.5\columnwidth}}\toprule \textbf{MODLITA' STATICA}& \textbf{MODALITA' DINAMICA}\\Interfacce SII (lato cliente), SSI(servente)&Interfacce DII(lato cliente), DSI (servente)\\ Richiede la disponibilita' della specifica IDL del servizio in fase di programmazione& Usata quando non e' nota in fase di programmzione la specifica IDL del servizio\\ Usata nella maggioranza delle applicazioni&Usata in applicazioni che richiedono particolare flessibilita' \\ Stub e skeleton generati dal compilatore IDL& Costruzione della richiesta di servizio a cura del programmatore\\ Piu' facile da usare& Piu' complessa, e richiede extra codice \\ \bottomrule \end{tabular}

Interface Repository (IR)

Fornisce informazioni a tempo d’esecuzione sulle interfacce IDL implementate dagli oggetti.

Si presenta come un contenitore di oggetti che incapsulano definizioni IDL.

Utilizzata dal programmatore applicativo in maniera esplicita o implicita.

Esplicitamente, per:

  • costruzione dinamica delle richieste (via DII);
  • compilazione dinamica delle classi stub e skeleton.

Implicitamente (cioè dall’ORB), per:

  • controllo dei tipi contenuti in una richiesta;
  • controlli di correttezza in gerarchie IDL.

Portable Object Adapter (POA)

Interfaccia lato servente.

Isola l’oggetto dall’ORB.

Assegna un riferimento univoco (IOR) all’oggetto.

Gestisce il ciclo di vita dell’oggetto.

Fornisce l’astrazione di un servizio sempre disponibile, dalla creazione alla distruzione.

  • Maschera le operazioni di attivazione/sospensione del servizio.

Le prime versioni di CORBA erano basate sul BOA (Basic OA), ora superato.

  • Specifica in parte vaga -> implementazioni incompatibili.

Ciclo di sviluppo

Si articola nelle seguenti fasi:

  • definizione delle interfacce IDL degli oggetti;
  • compilazione delle interfacce;
  • sviluppo dell’applicazione cliente;
  • sviluppo degli oggetti serventi;
    • il programmatore ha la responsabilità di sviluppare il codice che implementa la cosiddetta business logic degli oggetti CORBA;
    • dal lato servente occorre anche sviluppare un’applicazione che faccia da programma principale per creare gli oggetti e registrarli sull’Object Adapter;
  • distribuzione e esecuzione dei componenti sui nodi del sistema di elaborazione.

Ciclo di sviluppo


Esempio

Linguaggio: Java

Piattaforma CORBA: Inprise Visibroker

Passo 1: Definizione dell’interfaccia IDL

//File: Message.idl - Interfaccia IDL
interface Message {
string getMessage();
};

Esempio

Passo 2: Compilazione dell’interfaccia IDL

c:\CORBA> idl2java –package message Message.idl

File generati

  • Message.java: contiene un’interfaccia Java corrispondente all’interfaccia IDL;
  • MessageOperations.java: contiene un’interfaccia Java che corrisponde alle sole operazioni e attributi definiti nell’interfaccia IDL Message;
  • _MessageStub.java: contiene la classe stub utilizzata dal cliente;
  • MessagePOA.java: contiene la classe skeleton utilizzata dal lato servente;
  • MessageHelper.java: contiene la classe di utilità Helper, che definisce alcuni servizi per lo sviluppo del cliente.

Esempio


Esempio

Passo 3: Sviluppo dell’applicazione cliente

  • Inizializzare l’ORB
  • Ottenere un object reference dell’oggetto CORBA
  • Invocarne il servizio
Classi e package da utilizzare

Classi e package da utilizzare


Esempio

//Cliente Java
import org.omg.orb.*; //Package di libreria
import message.*; //Package generato dalla compilazione IDL
public class Cliente {

public static void main(String[] args) {
//Inizializza l'ORB
ORB orb = ORB.init(args,null);
//Legge l'object reference dallo standard input
org.omg.CORBA.Object obj=orb.string_to_object(args[0]);
//Creazione dello stub
Message mess_proxy = MessageHelper.narrow(obj);
//Invocazione del servizio remoto
String messaggio=mess_proxy.getMessage();
System.out.println("Messaggio ricevuto dall\'oggetto

servente: "+messaggio); } }

Esempio

Passo 4: Sviluppo lato servente

  • Implementare l’oggetto servente (servant)
  • Realizzare un “programma principale” che crei l’oggetto e lo registri sul POA (server)
Classi e package da utilizzare

Classi e package da utilizzare


Esempio

Implementazione dell’oggetto servente (servant)

//Classe MessImpl
import org.omg.PortableServer.*; //Package di libreria CORBA
import message.*; //Package generato dalla compilazione IDL
public class MessImpl extends MessagePOA {

public String getMessage() {

//implementazione del metodo astratto della classe
//message.MessagePOA – a cura del programmatore
return ("Salve a tutti \n"); }
}

Esempio

Implementazione del server

import org.omg.PortableServer.*; //Package di libreria CORBA
public class Server {

public static void main(String[] args) {

try {

//Inizializza l'ORB
org.omg.CORBA.ORB orb =

org.omg.CORBA.ORB.init(args,null);

//Crea l'oggetto servant
MessImpl myservant = new MessImpl();
//Ottiene il riferimento al POA

POA rootPOA =
POAHelper.narrow(orb.resolve_initial_references("RootPOA"));

Esempio

Implementazione del server

//Registra l'oggetto nel POA

org.omg.CORBA.Object obj =
rootPOA.servant_to_reference(myservant);
//Attiva il POA
rootPOA.the_POAManager().activate();
//Stampa l'object reference sullo standard output
System.out.println(orb.object_to_string(obj));
//Mette l'applicazione servente in stato di attesa
orb.run();
} catch (Exception e) {

e.printStackTrace(); }

}

}

I materiali di supporto della lezione

Baker S., CORBA Distributed Objects Using Orbix, Addison-Wesley, 1997.

Brose G., Vogel A., Duddy K., Java Programming with CORBA – Advanced Techniques for Building Distributed Applications, 3rd edition, OMG Press, John Wiley & Sons, 2001.

Natarajan V., Reich S., Vasudevan B., Programming with VisiBroker – A Developer’s Guide to VisiBroker for Java, 2nd edition, John Wiley&Sons, 2000.

Orfali R., Harkey D., Client/Server Programming with Java and CORBA, 2nd edition, John Wiley & Sons, 1998.

Siegel J., CORBA 3 – Fundamentals and Programming, 2nd edition, OMG Press, John Wiley & Sons, 2000.

  • 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