La presentazione è in caricamento. Aspetta per favore

La presentazione è in caricamento. Aspetta per favore

Ingegneria del software I

Presentazioni simili


Presentazione sul tema: "Ingegneria del software I"— Transcript della presentazione:

1 Ingegneria del software I
Seminario1:CORBA

2 Introduzione CORBA (Common Object Request Broker Architecture)
Definita da OMG (Object Management Group) Incapsulamento per la comunicazione tra applicazioni diverse

3 Architettura

4 Elementi IDL ORB GIOP (General Inter-ORB Protocol)
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, …

5 Interface Definition Language
Definisce operazioni utilizzabili su un oggetto. Ha proprio sistema di tipi Compilato verso linguaggi principali

6 Esempio Interfaccia oggetto conto corrente bancario Interface Conto {
attribute string numeroConto; void deposito(int long ammontare); void prelievo(int long ammontare); long saldo(); };

7 Tipi Primitivi in IDL Interi Float Booleani Caratteri Stringhe
Object Reference Any

8 (con lunghezze fisse o variabili)
Tipi Costruiti in IDL Struct Union Array, Sequences (con lunghezze fisse o variabili) Enum

9 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)

10 Stub Stub Interfaccia del client per richiedere servizi
Client invoca localmente lo Stub Lo Stub impacchetta (marshalling) i dati di invocazione del messaggio Il messaggio viene consegnato all’ORB L’ORB lo invia al server

11 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

12 Comunicazione locale

13 Object Adapter Si occupa di attivare gli oggetti
Il client mediante stub invoca metodo dell’ORB ORB notifica invocazione all’OA che attiva implementazione Implementazione si registra e si dichiara pronta OA passa invocazione allo skeleton che spacchetta i parametri e li fornisce all’Implementazione Implementazione esegue metodo, restituisce parametri al client mediante skeleton che gestisce anche eccezioni

14 Portable Object Adapter
Gestisce le risorse lato server Stabilisce politiche di memorizzazione e attivazione degli oggetti Gestisce persistenza

15 Interazione

16 Esempio interazione client-server
Scrittura interfaccia IDL Compilazione interfaccia Scrittura implementazione Scrittura del server 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

17 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

18 Implementazione oggetto Conto
public class ContoImpl extends 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;

19 Classe Server public class Server {
public static void main( String[] args ) // Inizializzazione ORB org.omg.CORBA.ORB orb = org.omg.CORBA.ORB.init(args, null); try // Creazione riferimento al POA org.omg.PortableServer.POA poa = org.omg.PortableServer.POAHelper.narrow(orb.resolve_initial_references("RootPOA")); // Attivazione oggetto nel POA org.omg.CORBA.Object o = poa.servant_to_reference(new ContoImpl("0393")); poa.the_POAManager.activate(); // Pubblicazione OR in un file PrintWriter ps = new PrintWriter(new FileOutputStream(new File( args[0] ))); ps.println( orb.object_to_string( o ) ); ps.close(); } catch ( Exception e ) { e.printStackTrace(); // Attivazione ORB orb.run();

20 Classe Client public class Client {
public static void main(String args[]) try // Inizializzazione dell’ORB org.omg.CORBA.ORB orb = org.omg.CORBA.ORB.init(args,null); // Dichiarazione della variabile per l’oggetto Conto contoBancario; // Reperimento dell’Object Reference da file BufferedReader 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’oggetto contoBancario.deposito(2000); contoBancario.prelievo(200); System.out.println("Il saldo del conto" + contoBancario.numeroConto() + "è: " + contoBancario.saldo()); } catch (Exception e) { e.printStackTrace();

21 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

22 Dynamic Invocation Interface
Codice interpretato per invocare operazioni su nuovi oggetti. Unica interfaccia per tutte le operazioni su tutte le istanze. Permette query asincrone.

23 Struttura dell'ORB

24 ORB interface Permette accesso ai servizi CORBA
Accesso all'Interface Repository Costruzione di DII Operazioni su Object Reference Operazioni su politiche Costruzione di valuetype

25 Esempi di servizi Naming service Trading 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

26 Comunicazione remota

27 IIOP GIOP: astratto rispetto al livello di trasporto
IIOP: mapping di GIOP su TCP/IP Specifica informazioni di indirizzamento dell’oggetto

28 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 { //PIDL struct Version { octet major; octet minor; }; struct ProfileBody_1_1 { Version iiop_version; string host; unsigned short port; sequence<octet> object_key; sequence<IOP::TaggedComponent> components;


Scaricare ppt "Ingegneria del software I"

Presentazioni simili


Annunci Google