ingegneria del software i

28
1 Università La Sapienza Ingegneria del Software I Ingegneria del software I Seminario1:CORBA

Upload: ivrit

Post on 12-Jan-2016

32 views

Category:

Documents


0 download

DESCRIPTION

Ingegneria del software I. Seminario1: CORBA. Introduzione. CORBA (Common Object Request Broker Architecture) Definita da OMG (Object Management Group) Incapsulamento per la comunicazione tra applicazioni diverse. Architettura. Elementi. IDL ORB - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: Ingegneria del software I

1Università La Sapienza

Ingegneria del Software I

Ingegneria del software I

Seminario1:CORBA

Page 2: Ingegneria del software I

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

Page 3: Ingegneria del software I

3Università La Sapienza

Ingegneria del Software I

Architettura

Page 4: Ingegneria del software I

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, …

Page 5: Ingegneria del software I

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

Page 6: Ingegneria del software I

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();

};

Page 7: Ingegneria del software I

7Università La Sapienza

Ingegneria del Software I

Tipi Primitivi in IDL

• Interi• Float • Booleani• Caratteri• Stringhe• Object Reference• Any

Page 8: Ingegneria del software I

8Università La Sapienza

Ingegneria del Software I

Tipi Costruiti in IDL

• Struct• Union• Array, Sequences

(con lunghezze fisse o variabili)• Enum

Page 9: Ingegneria del software I

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)

Page 10: Ingegneria del software I

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

Page 11: Ingegneria del software I

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

Page 12: Ingegneria del software I

12Università La Sapienza

Ingegneria del Software I

Comunicazione locale

Page 13: Ingegneria del software I

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

Page 14: Ingegneria del software I

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

Page 15: Ingegneria del software I

15Università La Sapienza

Ingegneria del Software I

Interazione

Page 16: Ingegneria del software I

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

Page 17: Ingegneria del software I

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

Page 18: Ingegneria del software I

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;}}

Page 19: Ingegneria del software I

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();}}

Page 20: Ingegneria del software I

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();}}

Page 21: Ingegneria del software I

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

Page 22: Ingegneria del software I

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.

Page 23: Ingegneria del software I

23Università La Sapienza

Ingegneria del Software I

Struttura dell'ORB

Page 24: Ingegneria del software I

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

Page 25: Ingegneria del software I

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

Page 26: Ingegneria del software I

26Università La Sapienza

Ingegneria del Software I

Comunicazione remota

Page 27: Ingegneria del software I

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

Page 28: Ingegneria del software I

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;};};