università la sapienza ingegneria del software i 1 ingegneria del software i seminario1:corba
Post on 01-May-2015
223 Views
Preview:
TRANSCRIPT
1Università La Sapienza
Ingegneria del Software I
Ingegneria del software I
Seminario1:CORBA
2Università La Sapienza
Ingegneria del Software I
Introduzione
• CORBA (Common Object Request Broker Architecture)
• Definita da OMG (Object Management Group)
• Incapsulamento per la comunicazione tra applicazioni diverse
3Università La Sapienza
Ingegneria del Software I
Architettura
4Università La Sapienza
Ingegneria del Software I
Elementi• IDL• ORB
– Nasconde locazione fisica oggetti interagenti– Permette: invocazione, attivazione, …– Interfacce ORB:
• Object Adapter• Dynamic Invocation Interface• Repository
• GIOP (General Inter-ORB Protocol)– Nasconde locazione fisica di oggetti in ORB diversi
• COS (CORBA Object Services)– Naming services, Transaction services, …
5Università La Sapienza
Ingegneria del Software I
Interface Definition Language
• Definisce operazioni utilizzabili su un oggetto.
• Ha proprio sistema di tipi• Compilato verso linguaggi
principali
6Università La Sapienza
Ingegneria del Software I
Esempio• Interfaccia oggetto conto corrente bancario
Interface Conto{attribute string numeroConto;
void deposito(int long ammontare);void prelievo(int long ammontare);long saldo();
};
7Università La Sapienza
Ingegneria del Software I
Tipi Primitivi in IDL
• Interi• Float • Booleani• Caratteri• Stringhe• Object Reference• Any
8Università La Sapienza
Ingegneria del Software I
Tipi Costruiti in IDL
• Struct• Union• Array, Sequences
(con lunghezze fisse o variabili)• Enum
9Università La Sapienza
Ingegneria del Software I
Compilazione IDL
• Compilatore riceve descrizione IDL e genera interfacce nel linguaggio di implementazione
• Specifiche Language Mapping (IDL-Linguaggio impl.)
• Genera:– Stub (lato client)– Skeleton (lato server)
10Università La Sapienza
Ingegneria del Software I
Stub
• Stub1. Interfaccia del client per richiedere
servizi2. Client invoca localmente lo Stub3. Lo Stub impacchetta (marshalling) i
dati di invocazione del messaggio4. Il messaggio viene consegnato
all’ORB5. L’ORB lo invia al server
11Università La Sapienza
Ingegneria del Software I
Skeleton
• Implementazione oggetto lato server• Scheletro dell’oggetto con sezioni parti
da implementare• Coopera con Object Adapter per
attivazione dell’oggetto• Riceve richiesta dall’Object Adapter,
estrae i dati (unmarshalling) e li passa all’implementazione dell’oggetto
12Università La Sapienza
Ingegneria del Software I
Comunicazione locale
13Università La Sapienza
Ingegneria del Software I
Object Adapter• Si occupa di attivare gli oggetti
1. Il client mediante stub invoca metodo dell’ORB
2. ORB notifica invocazione all’OA che attiva implementazione
3. Implementazione si registra e si dichiara pronta
4. OA passa invocazione allo skeleton che spacchetta i parametri e li fornisce all’Implementazione
5. Implementazione esegue metodo, restituisce parametri al client mediante skeleton che gestisce anche eccezioni
14Università La Sapienza
Ingegneria del Software I
Portable Object Adapter
• Gestisce le risorse lato server• Stabilisce politiche di memorizzazione
e attivazione degli oggetti• Gestisce persistenza
15Università La Sapienza
Ingegneria del Software I
Interazione
16Università La Sapienza
Ingegneria del Software I
Esempio interazione client-server
1. Scrittura interfaccia IDL2. Compilazione interfaccia3. Scrittura implementazione4. Scrittura del server5. Scrittura del client
Classi lato Client Classi lato Server Classi di supporto
_ContoStub.java ContoPOA.java ContoHelper.java
Conto.java ContoPOATie.java Conto Holder.java
ContoOperations.java
17Università La Sapienza
Ingegneria del Software I
Classi
• Le classi lato client e lato server formano rispettivamente Stub e Skeleton
• Le classi di supporto vengono utilizzate sia dal client che dal server sono proprie del mapping idl2java in questo caso– Helper: funzioni di utilità per le gestione
oggetti– Holder: gestione parametri in uscita, non
presente in java
18Università La Sapienza
Ingegneria del Software I
Implementazione oggetto Conto
public class ContoImplextends ContoPOA{private int _saldo;private String _numeroConto;public ContoImpl(String arg){_saldo = 0;_numeroConto = arg;}public void deposito(int amount){_saldo += amount;}public int prelievo(int amount){_saldo -= amount;return _saldo;}
public int saldo(){return _saldo;}String numeroConto(){return _numeroConto;}void numeroConto(String arg){_numeroConto = arg;}}
19Università La Sapienza
Ingegneria del Software I
Classe Serverpublic class Server{public static void main( String[]
args ){// Inizializzazione ORBorg.omg.CORBA.ORB orb =
org.omg.CORBA.ORB.init(args, null);
try{// Creazione riferimento al POAorg.omg.PortableServer.POA poa =org.omg.PortableServer.POAHelper.
narrow(orb.resolve_initial_references("RootPOA"));
// Attivazione oggetto nel POAorg.omg.CORBA.Object o =
poa.servant_to_reference(new ContoImpl("0393"));
poa.the_POAManager.activate();
// Pubblicazione OR in un filePrintWriter ps =new PrintWriter(new
FileOutputStream(new File( args[0] )));
ps.println( orb.object_to_string( o ) );
ps.close();}catch ( Exception e ){e.printStackTrace();}// Attivazione ORBorb.run();}}
20Università La Sapienza
Ingegneria del Software I
Classe Clientpublic class Client{public static void main(String
args[]){try{// Inizializzazione dell’ORBorg.omg.CORBA.ORB orb =
org.omg.CORBA.ORB.init(args,null);
// Dichiarazione della variabile per l’oggetto
Conto contoBancario;// Reperimento dell’Object
Reference da fileBufferedReader in = new
BufferedReader(new FileReader(args[0]));
String IORString = in.readline();
// Creazione riferimento remoto all’oggetto
contoBancario =ContoHelper.narrow(orb.string_to_
object(IORString));// Invocazione operazioni
sull’oggettocontoBancario.deposito(2000);contoBancario.prelievo(200);System.out.println("Il saldo del
conto" + contoBancario.numeroConto() +
"è: " + contoBancario.saldo());}catch (Exception e){e.printStackTrace();}}
21Università La Sapienza
Ingegneria del Software I
Dynamic Invocation Interface
• Nell'esempio: collegamento statico tra client e server, codice oggetto server conosciuto dal client a tempo di compilazione
• Per costruire collegamenti dinamici a oggetti non conosciuti a tempo di compilazione si usa DII
• QueryInterface
22Università La Sapienza
Ingegneria del Software I
Dynamic Invocation Interface
• Codice interpretato per invocare operazioni su nuovi oggetti.
• Unica interfaccia per tutte le operazioni su tutte le istanze.
• Permette query asincrone.
23Università La Sapienza
Ingegneria del Software I
Struttura dell'ORB
24Università La Sapienza
Ingegneria del Software I
ORB interface
• Permette accesso ai servizi CORBA• Accesso all'Interface Repository• Costruzione di DII• Operazioni su Object Reference• Operazioni su politiche• Costruzione di valuetype
25Università La Sapienza
Ingegneria del Software I
Esempi di servizi
• Naming service– Permette di mettere in relazione nomi
e riferimenti ad oggetti– Metodi per binding e resolve
• Trading service– Permette di ritrovare oggetti con
certe caratteristiche
26Università La Sapienza
Ingegneria del Software I
Comunicazione remota
27Università La Sapienza
Ingegneria del Software I
IIOP
• GIOP: astratto rispetto al livello di trasporto
• IIOP: mapping di GIOP su TCP/IP– Specifica informazioni di
indirizzamento dell’oggetto
28Università La Sapienza
Ingegneria del Software I
IOR• Object Reference
remota• IOR contiene
indirizzo IP e numero di porta su cui è in ascolto il server
• Specifica IDL di uno IOR
module IIOP { //PIDLstruct Version {octet major;octet minor;};struct ProfileBody_1_1 {Version iiop_version;string host;unsigned short port;sequence<octet>
object_key;sequence<IOP::TaggedCompon
ent> components;};};
top related