1 / 28

Ingegneria del software I

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

ivrit
Télécharger la présentation

Ingegneria del software I

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  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 • 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. 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

  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. 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; } } Implementazione oggetto Conto

  19. 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(); } } Classe Server

  20. 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(); } } Classe Client

  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 • 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. 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; }; }; IOR

More Related