42
Introduzione all’Architettura CORBA Tito Flagella - [email protected]

Introduzione all’Architettura CORBA · CORBA: funzionalità di base (2) • Un tipico sistema basato su CORBA è composto da un'insieme di programmi client che accedono a servizi

  • Upload
    others

  • View
    0

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Introduzione all’Architettura CORBA · CORBA: funzionalità di base (2) • Un tipico sistema basato su CORBA è composto da un'insieme di programmi client che accedono a servizi

Introduzione all’Architettura CORBA

Tito Flagella - [email protected]

Page 2: Introduzione all’Architettura CORBA · CORBA: funzionalità di base (2) • Un tipico sistema basato su CORBA è composto da un'insieme di programmi client che accedono a servizi

2

L’Interoperabilità

• Individuare paradigmi indipendenti dalla piattaformautili per risolvere un’ampia classe di problemi

• Nascondere il più possibile la complessità senzasacrificare le prestazioni

• Individuare uno strato di sviluppo omogeneorealizzato sui diversi sistemi eterogenei

Page 3: Introduzione all’Architettura CORBA · CORBA: funzionalità di base (2) • Un tipico sistema basato su CORBA è composto da un'insieme di programmi client che accedono a servizi

3

La Programmazione di sistemi eterogenei

• Scrivere programmi che comunicano via socket– Gestire l’eterogeneità a livello applicativo

• Scrivere programmi che comunicano via RPC– Anni ‘80

• Chiamare oggetti remoti come se fosserolocali– A partire dagli anni ’90

Page 4: Introduzione all’Architettura CORBA · CORBA: funzionalità di base (2) • Un tipico sistema basato su CORBA è composto da un'insieme di programmi client che accedono a servizi

4

Il paradigma RPC

Client

Server

ORB

Stub

Skeleton

Page 5: Introduzione all’Architettura CORBA · CORBA: funzionalità di base (2) • Un tipico sistema basato su CORBA è composto da un'insieme di programmi client che accedono a servizi

5

CORBA: uno standard per le Applicazioni Distribuite

• Curato da OMG, più di ottocento membri...• Prima versione adottata in ottobre 91• Prime implementazioni dal 93• Molte le implementazioni, anche free, per

qualunque linguaggio• Interoperabilità assicurata attraverso la

standardizzazione dei protocolli Inter Orb(GIOP, IIOP, etc...)

Page 6: Introduzione all’Architettura CORBA · CORBA: funzionalità di base (2) • Un tipico sistema basato su CORBA è composto da un'insieme di programmi client che accedono a servizi

6

Object Management Architecture

Page 7: Introduzione all’Architettura CORBA · CORBA: funzionalità di base (2) • Un tipico sistema basato su CORBA è composto da un'insieme di programmi client che accedono a servizi

7

CORBA: funzionalità di base (1)

• CORBA è un'ambiente utile per:– integrare applicazioni parzialmente già esistenti– costruire nuove applicazioni distribuite

Page 8: Introduzione all’Architettura CORBA · CORBA: funzionalità di base (2) • Un tipico sistema basato su CORBA è composto da un'insieme di programmi client che accedono a servizi

8

CORBA: funzionalità di base (3)

• Interfacce e Dati sono descritti in un apposito linguaggio indipendente dall’implementazione, detto Interface Definition Language (IDL)

• Lo standard CORBA include la definizione del binding da IDL ai linguaggi di implementazione, come C, C++, Java, COBOL, ....

Page 9: Introduzione all’Architettura CORBA · CORBA: funzionalità di base (2) • Un tipico sistema basato su CORBA è composto da un'insieme di programmi client che accedono a servizi

9

CORBA: funzionalità di base (2)

• Un tipico sistema basato su CORBA è composto da un'insieme di programmi clientche accedono a servizi distribuiti sulla rete

• Architettura peer-to-peer, non client-server– un client può definire servizi– le chiamate al servizio del client si chiamano

callback– sono spesso usate per la notifica asincrona del

cambio di dati sul server

Page 10: Introduzione all’Architettura CORBA · CORBA: funzionalità di base (2) • Un tipico sistema basato su CORBA è composto da un'insieme di programmi client che accedono a servizi

10

CORBA: funzionalità di base (4)

• Le chiamate per default sono bloccanti (stessa semantica dei linguaggi di programmazione)

• Possono però anche essere di tipo asincrono:– dichiarazioni oneway in IDL– uso di servizi specifici: event-service, notification

service, message service

Page 11: Introduzione all’Architettura CORBA · CORBA: funzionalità di base (2) • Un tipico sistema basato su CORBA è composto da un'insieme di programmi client che accedono a servizi

11

L’architettura dell’ORB

Page 12: Introduzione all’Architettura CORBA · CORBA: funzionalità di base (2) • Un tipico sistema basato su CORBA è composto da un'insieme di programmi client che accedono a servizi

12

L’architettura CORBA

Page 13: Introduzione all’Architettura CORBA · CORBA: funzionalità di base (2) • Un tipico sistema basato su CORBA è composto da un'insieme di programmi client che accedono a servizi

13

Architettura dell’ORB, lato client

• Un Client effettua una richiesta (statica o dinamica), utilizzando un "Object Reference" per individuare il servizio

• Il Client deve conoscere il tipo dei parametri• Nel caso statico usa lo stub, nel dinamico

l’Interface Repository (un servizio che consente la consultazione a run-time delle interfacce)

Page 14: Introduzione all’Architettura CORBA · CORBA: funzionalità di base (2) • Un tipico sistema basato su CORBA è composto da un'insieme di programmi client che accedono a servizi

14

Architettura dell’ORB, lato server

• Sul lato server, il codice dell'object implementation viene invocato dall’OA tramite una "up-call”:

– associata a uno skeleton statico generato dal compilatore idl (SSI)

– costruita dinamicamente, utilizzando l'InterfaceRepository (DSI)

Page 15: Introduzione all’Architettura CORBA · CORBA: funzionalità di base (2) • Un tipico sistema basato su CORBA è composto da un'insieme di programmi client che accedono a servizi

15

Trasparenza dei meccanismi dinamici

• La semantica dell'ORB per l'operazione statica o dinamica è esattamente la stessa

• Il server non ha modo di verificare se la richiesta sia stata statica o dinamica

• Il client non ha modo di verificare se il server stia usando SSI o DSI

Page 16: Introduzione all’Architettura CORBA · CORBA: funzionalità di base (2) • Un tipico sistema basato su CORBA è composto da un'insieme di programmi client che accedono a servizi

16

L’architettura dell’ORB, lato server

• L’Object Adapter tratta aspetti quali:– generazione e interpretazione dell'Object

Reference

– corrispondenza tra oggetto e processo che ne implementa il servizio

– invocazione dei metodi

– attivazione, disattivazione delle implementazioni

Page 17: Introduzione all’Architettura CORBA · CORBA: funzionalità di base (2) • Un tipico sistema basato su CORBA è composto da un'insieme di programmi client che accedono a servizi

17

Uso dello IOR tra client e server (1)

• Il sistema più elementare per stabilire una connessione diretta tra client e server è l'uso dello IOR

• Uno IOR, Interoperable Object Reference, costituisce un indirizzo univoco corrispondente ad un'oggetto CORBA

Page 18: Introduzione all’Architettura CORBA · CORBA: funzionalità di base (2) • Un tipico sistema basato su CORBA è composto da un'insieme di programmi client che accedono a servizi

18

Uso dello IOR tra client e server (2)

• Il server genera uno IOR per l'oggetto da rendere accessibile e lo comunica ai potenziali clienti tramite uno dei seguenti mezzi:– file system condiviso– pubblicazione su un server Web trasmissione

off-line – uso del Naming Service

Page 19: Introduzione all’Architettura CORBA · CORBA: funzionalità di base (2) • Un tipico sistema basato su CORBA è composto da un'insieme di programmi client che accedono a servizi

19

Struttura dell’IOR (nel caso di IIOP)

Page 20: Introduzione all’Architettura CORBA · CORBA: funzionalità di base (2) • Un tipico sistema basato su CORBA è composto da un'insieme di programmi client che accedono a servizi

20

Il linguaggio IDL

• E’ l’astrazione usata in CORBA per separare le interfacce degli oggetti dalle loro implementazioni

• Parte dello Standard CORBA di OMG• Ne esistono numerose altre versioni• Standardizzato come standard ISO

Page 21: Introduzione all’Architettura CORBA · CORBA: funzionalità di base (2) • Un tipico sistema basato su CORBA è composto da un'insieme di programmi client che accedono a servizi

21

Il Linguaggio IDL (2)

• E` utilizzato per descrivere le interfacce degli oggetti e i tipi dei parametri

• IDL non e` un linguaggio di programmazione– non serve per implementare gli oggetti o per

realizzare client che accedano agli oggetti

• IDL e` volutamente semplice per essere facilmente mappabile a linguaggi di programmazione poco evoluti

Page 22: Introduzione all’Architettura CORBA · CORBA: funzionalità di base (2) • Un tipico sistema basato su CORBA è composto da un'insieme di programmi client che accedono a servizi

22

Le Interfacce IDL (1)

interface FrontOffice {

readonly attribute string name;

readonly attribute unsigned long numberOfSeats;

Price getPrice(in Place chosenPlace);

boolean bookSingleSeat(in Place chosenPlace, in string creditCard);

};

Page 23: Introduzione all’Architettura CORBA · CORBA: funzionalità di base (2) • Un tipico sistema basato su CORBA è composto da un'insieme di programmi client che accedono a servizi

23

Le Interfacce IDL (2)

• L'interfaccia IDL di un oggetto contiene tutte le informazioni utili per realizzare un client che lo usi

• Una tipica interfaccia contiene la specifica di:– le operazioni supportate dall'interfaccia

(compresa la specifica dei tipi dei parametri e del valore di ritorno)

– gli attributi dell'interfaccia

Page 24: Introduzione all’Architettura CORBA · CORBA: funzionalità di base (2) • Un tipico sistema basato su CORBA è composto da un'insieme di programmi client che accedono a servizi

24

Le Interfacce IDL (3)

• Ogni procedura specifica il nome, il tipo e la modalita` di trasmissione dei suoi parametri– Es: boolean checkIfOpen(in Date when, out Date

nextAvailableDate)

• La modalità di trasmissione può essere:– in: il parametro viaggia dal chiamante (client) al chiamato

(server)– out: il parametro viaggia dal server al client– inout: il parametro viaggia in entrambe le direzioni

Page 25: Introduzione all’Architettura CORBA · CORBA: funzionalità di base (2) • Un tipico sistema basato su CORBA è composto da un'insieme di programmi client che accedono a servizi

25

Alcune caratteristiche dell'IDL confrontate con il C++

• Tutte le definizioni IDL sono public• Non esiste il concetto di private o protected, che

riguardano l'implementazione più delle interfacce• Mancanza di costruttori o distruttori: sostituiti dalle

factory, oggetti capaci di creare altri tipi di oggetti• L'overloading dei nomi delle operazioni è illegale

– funzionalità utile ma difficile da tradurre in linguaggi che non la supportano

Page 26: Introduzione all’Architettura CORBA · CORBA: funzionalità di base (2) • Un tipico sistema basato su CORBA è composto da un'insieme di programmi client che accedono a servizi

26

Il compilatore IDL

• Il compilatore IDL traduce queste specifiche in API e definizione di tipi dipendenti dal linguaggio scelto

Page 27: Introduzione all’Architettura CORBA · CORBA: funzionalità di base (2) • Un tipico sistema basato su CORBA è composto da un'insieme di programmi client che accedono a servizi

27

I binding IDL

• Specificano come usare CORBA da ognuno dei linguaggi supportati– Esistono specifiche ufficiali per:

• C, C++, Smalltalk, COBOL, ADA e Java

– CORBA è comunque giè utilizzabile anche da:• Visual Basic, Modula3, Perl, TCL, Python, Dylan,

Oberon e Objective-C

• Enormi differenze nelle difficoltà di programmazione a seconda dei linguaggi usati

Page 28: Introduzione all’Architettura CORBA · CORBA: funzionalità di base (2) • Un tipico sistema basato su CORBA è composto da un'insieme di programmi client che accedono a servizi

28

Binding a C++

• In C/C++ ci si deve preoccupare di– allocazione/deallocazione degli oggetti (è

suggerito l’uso di smart pointer generati dal compilatore IDL)

– Uso di tipi CORBA per i tipi primitivi (int, long, …)

Page 29: Introduzione all’Architettura CORBA · CORBA: funzionalità di base (2) • Un tipico sistema basato su CORBA è composto da un'insieme di programmi client che accedono a servizi

29

Binding a Java

• In Java la programmazione è molto più elegante

• L’uso di CORBA diventa quasi completamente trasparente

• La mancanza dell’ereditarietà multipla complica l’implementazione dell’ereditarietà in IDL

Page 30: Introduzione all’Architettura CORBA · CORBA: funzionalità di base (2) • Un tipico sistema basato su CORBA è composto da un'insieme di programmi client che accedono a servizi

30

CORBA per le applicazioni Internet

WebBrowser

Internet Rete Servizi Pubblici Backend

Documenti

Web S

erver

http

CGI, ISAPI,NSAPI, Servlet, ASP

Oggetti CORBA

iiopiiop

DB ad Oggetti

Sistemi Legacy

WebBrowser

Orblet

SQL,jdbc,...

http

Inbound Firewall

Outbound Firewall

Utenza

DBApplet

Page 31: Introduzione all’Architettura CORBA · CORBA: funzionalità di base (2) • Un tipico sistema basato su CORBA è composto da un'insieme di programmi client che accedono a servizi

31

Sviluppo di un’applicazione CORBA

• Definire l’interfaccia della classe server• Realizzarla in idl• Compilare l’IDL per produrre stub e skeleton• Scrivere il codice del server e linkarlo con gli skeleton

del servizio• Creare un’istanza del server e collegarla all’ORB• Scrivere il codice del client e linkarlo con gli stub del

servizio

Page 32: Introduzione all’Architettura CORBA · CORBA: funzionalità di base (2) • Un tipico sistema basato su CORBA è composto da un'insieme di programmi client che accedono a servizi

32

L’esempio del Counter

• Problema: Creare un oggetto counter he esponga un metodo increment().

• Ogni chiamata a increment() aggiunge 1 al contatore interno dell’oggetto, e restituisce il nuovo valore del contatore.

Page 33: Introduzione all’Architettura CORBA · CORBA: funzionalità di base (2) • Un tipico sistema basato su CORBA è composto da un'insieme di programmi client che accedono a servizi

33

Il codice del Server

public class Counter {

private int sum;

public Counter () {

sum = 0;

}

public int increment () {

sum ++;

return sum;

}

}

Il codice del Client

public class CountTest {

public static void main (String args[]) {

Counter myCount = new Counter ();

for (int i=0; i<100; i++)

System.out.println (myCount.increment());

}

}

Step 1: Definire le Interfacce

Page 34: Introduzione all’Architettura CORBA · CORBA: funzionalità di base (2) • Un tipico sistema basato su CORBA è composto da un'insieme di programmi client che accedono a servizi

34

Step 2: Interfaccia IDL

module CounterPackage {

interface Counter {

long increment ();

};

};

Page 35: Introduzione all’Architettura CORBA · CORBA: funzionalità di base (2) • Un tipico sistema basato su CORBA è composto da un'insieme di programmi client che accedono a servizi

35

Step 2: scrivere l’IDL

• Mapping tra tipi Java e IDLJava IDLboolean booleanchar charString stringint longlong long longfloat float

module CounterPackage {

interface Counter {long increment ();

};

}

Page 36: Introduzione all’Architettura CORBA · CORBA: funzionalità di base (2) • Un tipico sistema basato su CORBA è composto da un'insieme di programmi client che accedono a servizi

36

Step 3: Compilazione IDL

%> idlj -oldImplBase -fserver count.idlGenera skeleton da linkare al server

Counter.java_CounterImplBase.javaCounterOperations.java

%> idlj -fclient login.idlGenera stub da linkare al client

_CounterStub.javaCounterHolder.javaCounterHelper.java

Page 37: Introduzione all’Architettura CORBA · CORBA: funzionalità di base (2) • Un tipico sistema basato su CORBA è composto da un'insieme di programmi client che accedono a servizi

37

Step 3: Compilazione IDL (2)

package _CounterPackage;/*** _CounterPackage/Counter.java .* Generated by the IDL-to-Java compiler (portable), version "3.2"* from counter.idl* Wednesday, May 3, 2006 7:49:32 AM CEST*/

public interface Counter extends CounterOperations,org.omg.CORBA.Object, org.omg.CORBA.portable.IDLEntity

{} // interface Counter

Page 38: Introduzione all’Architettura CORBA · CORBA: funzionalità di base (2) • Un tipico sistema basato su CORBA è composto da un'insieme di programmi client che accedono a servizi

38

Step 4: Implementare il Servant

• Identica alla versione sequenziale ma estende lo skeleton

import _CounterPackage.*;

public class Counter extends _CounterImplBase {

private int sum;

public Counter () {

sum = 0;

}

public int increment () {

sum ++;

return sum;

}

}

Page 39: Introduzione all’Architettura CORBA · CORBA: funzionalità di base (2) • Un tipico sistema basato su CORBA è composto da un'insieme di programmi client che accedono a servizi

39

Step 5: Creare l’istanza del Server

– Inizializzare l’ORB– Creare un’istanza dell’oggetto server (servant)– Fare il bind dell’oggetto all’ORB– Ottenere e pubblicare l’IOR per quest’oggetto

Page 40: Introduzione all’Architettura CORBA · CORBA: funzionalità di base (2) • Un tipico sistema basato su CORBA è composto da un'insieme di programmi client che accedono a servizi

40

import org.omg.CORBA.*;

import java.io.*;

public class CounterServer {

public static void main (String args[]) throws Exception {

ORB orb = ORB.init (args, null); // Initialise ORB.

Counter aCounter = new Counter (); // Create new counter.

orb.connect (aCounter); // Register counter with ORB.

String stringobjectref = orb.object_to_string(aCounter);

PrintWriter fout = new PrintWriter (new

FileWriter("ior.txt"),true);

fout.println (stringobjectref);

System.out.println (stringobjectref); // Orb ref.

java.lang.Object sync = new java.lang.Object ();

synchronized (sync) {

sync.wait();

}

}

}

Il codice del Server

Page 41: Introduzione all’Architettura CORBA · CORBA: funzionalità di base (2) • Un tipico sistema basato su CORBA è composto da un'insieme di programmi client che accedono a servizi

41

Step 6: Implementazione del Client

• Inizializzazione dell’ORB• Accesso all’ORB per creare un proxy/stub per

l’accesso all’oggetto remoto• Invocare il metodo sullo stub

Page 42: Introduzione all’Architettura CORBA · CORBA: funzionalità di base (2) • Un tipico sistema basato su CORBA è composto da un'insieme di programmi client che accedono a servizi

42

import _CounterPackage.*;

import org.omg.CORBA.*;

public class CountTest {

public static void main (String args[]) {

ORB orb = ORB.init (args,null);

_CounterPackage.Counter myCount =

CounterHelper.narrow (orb.string_to_object(args[0]));

for (int i=0; i<100; i++)

System.out.println (myCount.increment());

}

}

Il Codice del Client