Java e CORBA. Introduzione

Dimensione: px
Iniziare la visualizzazioe della pagina:

Download "Java e CORBA. Introduzione"

Transcript

1 2001 proprietà di MokaByte s.r.l. tutti i diritti riservati è vietata la riproduzione non autorizzata anche parziale Java e CORBA DI GIANLUCA MORELLO Introduzione Nell era di Internet e delle grandi Intranet aziendali, il modello computazionale dominante è chiaramente quello distribuito. Un tipico ambiente distribuito vede la presenza di mainframe, server Unix e macchine Windows e pone quindi seri problemi di interoperabilità tra piattaforme differenti, sistemi operativi differenti e linguaggi differenti. Lo scopo dichiarato delle specifiche CORBA è proprio quello di definire un infrastruttura standard per la comunicazione tra e con oggetti remoti ovunque distribuiti, indipendentemente dal linguaggio usato per implementarli e dalla piattaforma di esecuzione. È bene quindi notare che, a differenza di altre tecnologie distribuite quali RMI, Servlet o EJB, non si sta parlando di una tecnologia legata a una specifica piattaforma, ma di uno standard indipendente dal linguaggio adottato che consente a oggetti Java di comunicare con oggetti sviluppati in COBOL, C++ o altri linguaggi ancora. L acronimo CORBA sta per Common Object Request Broker Architecture e non rappresenta uno specifico prodotto, bensì un insieme di specifiche volte a definire un architettura completa e standardizzata di cui esistono varie implementazioni. Le specifiche sono prodotte da OMG, un consorzio che comprende più di 800 aziende e include i più illustri marchi dell industria informatica. L elemento fondamentale dell intera architettura è il canale di comunicazione degli oggetti nell ambiente distribuito, l Object Request Broker (ORB). Le specifiche CORBA 1.1 furono pubblicate da OMG nell autunno del 1991 e definivano un API e un linguaggio descrittivo per la definizione delle interfacce degli oggetti CORBA detto Interface Definition Language (IDL). Soltanto nel dicembre del 1994, con CORBA 2.0, vennero definiti i dettagli sulla comunicazione tra differenti implementazioni di ORB con l introduzione dei protocolli GIOP e IIOP. Sebbene CORBA possa essere utilizzato con la maggior parte dei linguaggi di programmazione, Java risulta il linguaggio privilegiato per implementare le sue specifiche in un ambiente eterogeneo in quanto permette agli oggetti CORBA di essere eseguiti indifferentemente su mainframe, network computer o telefono cellulare. 1

2 Nello sviluppo di applicazioni distribuite, Java e CORBA si completano a vicenda: CORBA affronta e risolve il problema della trasparenza della rete, Java quello della trasparenza dell implementazione rispetto alla piattaforma di esecuzione. Object Management Group L OMG è un consorzio no-profit interamente dedicato alla produzione di specifiche e di standard; vede la partecipazione sia dei grandi colossi dell informatica, sia di compagnie medie e piccole. L attività di OMG cominciò nel 1989 con soli otto membri tra cui Sun Microsystems, Philips, Hewlett-Packard e 3Com. Le specifiche più conosciute prodotte dal consorzio sono sicuramente UML e CORBA che comunque nella logica OMG, rappresentano strumenti strettamente cooperanti nella realizzazione di applicazioni Enterprise OO. Sin da principio il suo scopo è stato quello di produrre e mantenere una suite di specifiche di supporto per lo sviluppo di software distribuito in ambienti distribuiti, coprendo l intero ciclo di vita di un progetto: analisi, design, sviluppo, runtime e manutenzione. Per ridurre complessità e costi di realizzazione, il consorzio ha introdotto un framework per la realizzazione di applicazioni distribuite. Questo framework prende il nome di Object Management Architecture (OMA) ed è il centro di tutte le attività del consorzio; all interno di OMA convivono tutte le tecnologie OMG. Nell ottica OMG la definizione di un framework prescinde dall implementazione e si limita alla definizione dettagliata delle interfacce di tutti i componenti individuati in OMA. I componenti di OMA sono riportati di seguito. Object Request Broker (ORB) È l elemento fondamentale dell architettura. È il canale che fornisce l infrastruttura che permette agli oggetti di comunicare indipendentemente dal linguaggio e dalla piattaforma adottata. La comunicazione tra tutti i componenti OMA è sempre mediata e gestita dall ORB. Object Services Standardizzano la gestione e la manutenzione del ciclo di vita degli oggetti. Forniscono le interfacce base per la creazione e l accesso agli oggetti. Sono indipendenti dal singolo dominio applicativo e possono essere usati da più applicazioni distribuite. Common Facilities Comunemente conosciute come CORBAFacilities. Forniscono due tipologie di servizi, orizzontali e verticali. Quelli orizzontali sono funzionalità applicative comuni: gestione stampe, gestione documenti, database e posta elettronica. Quelli verticali sono invece destinati a una precisa tipologia di applicazioni. Domain Interfaces Possono combinare common facilities e object services. Forniscono funzionalità altamente specializzate per ristretti domini applicativi. 2

3 Application Objects È l insieme di tutti gli altri oggetti sviluppati per una specifica applicazione. Non è un area di standardizzazione OMG. Di questi componenti OMG fornisce una definizione formale sia delle interfacce (mediante IDL), sia della semantica. La definizione mediante interfacce lascia ampio spazio al mercato di componenti software di agire sotto le specifiche con differenti implementazioni e consente la massima interoperabilità tra componenti diversi di case differenti. I servizi CORBA I CORBAServices sono una collezione di servizi system-level descritti dettagliatamente con un interfaccia IDL; sono destinati a completare ed estendere le funzionalità fornite dall ORB. Forniscono un supporto che va a coprire lo spettro completo delle esigenze di una qualunque applicazione distribuita. Alcuni dei servizi standardizzati da OMG (ad esempio il Naming Service) sono diventati fondamentali nella programmazione CORBA e sono presenti in tutte le implementazioni. Altri servizi appaiono invece meno interessanti nella pratica comune, assumono un significato solo dinanzi a esigenze particolari e non sono presenti nella maggior parte delle implementazioni sul mercato. OMG ha pubblicato le specifiche di ben 15 servizi, qui riportati. Collection Service Fornisce meccanismi di creazione e utilizzo per le più comuni tipologie di collection. Concurrency Control Service Definisce un lock manager che fornisce meccanismi di gestione dei problemi di concorrenza nell accesso a oggetti agganciati all ORB. Event Service Fornisce un event channel che consente ai componenti interessati a uno specifico evento di ricevere una notifica, pur non conoscendo nulla del componente generatore. Externalization Service Definisce meccanismi di streaming per il trattamento di dati da e verso i componenti. Licensing Service Fornisce meccanismi di controllo e verifica di utilizzo di un componente. È pensato per l implementazione di politiche pago per quel che uso. Lyfe Cycle Service Definisce le operazioni necessarie a gestire il ciclo di vita di un componente sull ORB (creare, copiare e rimuovere). 3

4 Naming Service Consente a un componente di localizzare risorse (componenti o altro) mediante nome. Permette di interrogare sistemi di directory e naming già esistenti (NIS, NDS, X.500, DCE, LDAP). È il servizio più utilizzato. Persistence Service Fornisce mediante un unica interfaccia le funzionalità necessarie alla memorizzazione di un componente su più tipologie di server (ODBMS, RDBMS e file system). Properties Service Permette la definizione di proprietà legate allo stato di un componente. Query Service Fornisce meccanismi di interrogazione basati su un estensione di SQL chiamata Object Query Language. Relationship Service Permette di definire e verificare in modo dinamico varie tipologie di associazioni e relazioni tra componenti. Security Service Framework per la definizione e la gestione della sicurezza in ambiente distribuito. Copre ogni possibile aspetto: autenticazione, definizione di credenziali, gestione per delega, definizione di access control list e non-repudiation. Time Service Definisce un interfaccia di sincronizzazione tra componenti in ambiente distribuito. Trader Service Fornisce un meccanismo modello Yellow Pages per i componenti. Transaction Service Fornisce un meccanismo di two-phase commit sugli oggetti agganciati all ORB che supportano il rollback; definisce transazioni flat o innestate. Le basi CORBA CORBA e OMA in genere si fondano su alcuni principi di design: Separazione tra interfaccia e implementazione: un client è legato all interfaccia di un oggetto CORBA, non alla sua implementazione. Location transparency e access transparency: l utilizzo di un qualunque oggetto CORBA non presuppone alcuna conoscenza sulla sua effettiva localizzazione. Typed interfaces: ogni riferimento a un oggetto CORBA ha un tipo definito dalla sua interfaccia. 4

5 Parlando di CORBA è particolarmente significativo il concetto di trasparenza, inteso sia come location transparency, sia come trasparenza del linguaggio di programmazione adottato. In pratica è trasparente al client la collocazione dell implementazione di un oggetto, locale o remota. La location transparency è garantita dalla mediazione dell ORB. Un riferimento a un oggetto remoto va inteso come un identificativo unico di una sua implementazione sulla rete. Architettura CORBA L architettura CORBA ruota intorno al concetto di Objects Request Broker. L ORB è il servizio che gestisce la comunicazione in uno scenario distribuito agendo da intermediario tra gli oggetti remoti: individua l oggetto sulla rete, comunica la richiesta all oggetto, attende il risultato e lo comunica indietro al client. Figura 1 Architettura CORBA. L ORB opera in modo tale da nascondere al client tutti i dettagli sulla localizzazione degli oggetti sulla rete e sul loro linguaggio d implementazione; è quindi l ORB a individuare l oggetto sulla rete e a effettuare le opportune traslazioni nel linguaggio d implementazione. Queste traslazioni sono possibili solo per quei linguaggi per i quali è stato definito un mapping con IDL (questa definizione è stata operata per i linguaggi più comuni). In fig. 1 si può osservare l architettura CORBA nel suo complesso: Object è l entità composta da identity, interface e implementation (servant nel gergo CORBA). Servant è l implementazione dell oggetto remoto. Implementa i metodi specificati dall interfaccia in un linguaggio di programmazione. Client è l entità che invoca i metodi (operation nel gergo CORBA) del servant. L infrastruttura dell ORB opera in modo tale da rendergli trasparenti i dettagli della comunicazione remota. ORB è l entità logica che fornisce i meccanismi per inviare le richieste da un client all oggetto remoto. Grazie al suo operato, che nasconde completamente i dettagli di comunicazione, le chiamate del client sono assimilabili a semplici invocazioni locali. 5

6 ORB Interface essendo un entità logica, l ORB può essere implementato in molti modi. Le specifiche CORBA definiscono l ORB mediante un interfaccia astratta, nascondendo completamente alle applicazioni i dettagli d implementazione. IDL stub e IDL skeleton: lo stub opera da collante tra client e ORB; lo skeleton ha la stessa funzione per il server. Stub e skeleton sono generati nel linguaggio adottato da un compilatore apposito che opera partendo da una definizione IDL. Dynamic Invocation Interface (DII) è l interfaccia che consente a un client di inviare dinamicamente una request a un oggetto remoto, senza conoscerne la definizione dell interfaccia e senza avere un legame con lo stub. Consente inoltre a un client di effettuare due tipi di chiamate a- sincrone: deferred synchronous (separa le operazioni di send e di receive) e oneway (solo send). Dynamic Skeleton Interface (DSI) è l analogo lato server del DII. Consente a un ORB di recapitare una request a un oggetto che non ha uno skeleton statico, ossia non è stato definito precisamente il tipo a tempo di compilazione. Il suo utilizzo è totalmente trasparente a un client. Object Adapter assiste l ORB nel recapitare le request a un oggetto e nelle operazioni di attivazione/disattivazione degli oggetti. Il suo compito principale è quello di legare l implementazione di un oggetto all ORB. Invocazione CORBA Utilizzando l ORB, un client può inviare una Request in modo trasparente a un oggetto CORBA che risieda sulla stessa macchina od ovunque sulla rete. Per raggiungere questo livello di astrazione, ogni oggetto remoto è dotato di uno stub e di uno skeleton; questi due elementi agiscono rispettivamente da collante tra client e ORB e tra ORB e oggetto CORBA. In maniera similare a quanto accade in RMI, lo stub effettua il marshalling dei dati, traslando i data types dal linguaggio di programmazione client-side a un generico formato CORBA; quest ultimo è convogliato via rete dal messaggio di Request. Il client invoca i metodi non sull oggetto remoto, bensì sul suo stub locale; l effettiva invocazione remota viene operata dallo stub. Come si vedrà più dettagliatamente in seguito, il meccanismo dello stub è una precisa implementazione del pattern Proxy. In maniera speculare a quanto effettuato dallo stub, l unmarshalling dei dati è eseguito sul server dallo skeleton; in questo caso il formato della Request viene traslato nel linguaggio di programmazione server-side. Come si è detto in precedenza, Stub e skeleton sono generati automaticamente da un compilatore a partire dalla definizione IDL dell oggetto CORBA. 6

7 Figura 2 Una richiesta da client a oggetto CORBA. Interfaccia e funzionalità di un ORB L interfaccia di un ORB è definita dalle specifiche CORBA. La maggior parte degli ORB forniscono alcune operazioni addizionali, ma esistono alcuni metodi che dovrebbero essere forniti da tutte le implementazioni. L inizializzazione dell ORB va effettuata invocando il metodo init static ORB init() static ORB init(applet app, Properties props) static ORB init(string[] args, Properties props) Il metodo senza parametri opera da singleton, restituendo un ORB di default con alcune limitazioni. Gli altri due metodi restituiscono un ORB con le proprietà specificate e sono pensati e- splicitamente per le Java application e le Applet. L array di stringhe e l oggetto Properties consentono di impostare alcune proprietà dell istanza di ORB restituita dal metodo init; l array viene usato per i parametri da linea di comando. Le proprietà standard ORBClass e ORBSingletonClass consentono ad esempio di specificare l utilizzo di un custom ORB differente da quello di default. Ogni implementazione fornisce anche proprietà aggiuntive; tutte le proprietà non riconosciute sono semplicemente ignorate. Altre funzionalità sicuramente offerte da un ORB sono le operazioni relative agli object reference. Ogni riferimento a un oggetto (Interoperable Object Reference, IOR) può essere convertito in stringa; è garantito anche il processo inverso. String object_to_string(object obj) Object string_to_object(string str) Prima che un oggetto remoto sia utilizzabile da un client, va attivato sull ORB. Come si vedrà in seguito esistono più tipologie di attivazione. Il modo più semplice in assoluto è dato dal metodo connect. void connect(object obj) void disconnect(object obj) Il metodo disconnect disattiva l oggetto consentendo al garbage collector di rimuoverlo. 7

8 In un contesto distribuito è necessario avere a disposizione meccanismi che consentano di scoprire quali oggetti CORBA sono disponibili e ottenere un riferimento ad essi. Anche in questo caso esistono più possibilità, la più semplice è fornita da due metodi dell ORB String[] list_initial_services() Object resolve_initial_references(string object_name) Il primo metodo elenca i servizi disponibili sull ORB, mentre il secondo restituisce un generico riferimento a un oggetto individuato per nome. Va precisato che un servizio è comunque un oggetto remoto e quindi recuperabile via resolve_initial_references. Interoperabilità tra ORB Le specifiche CORBA 1.1 si limitavano a dare le basi per la portabilità di oggetti applicativi e non garantivano affatto l interoperabilità tra differenti implementazioni di ORB. Le specifiche 2.0 colmarono questa significativa lacuna con la definizione di un protocollo (GIOP) espressamente pensato per interazioni ORB-to-ORB. Il General Inter-ORB Protocol specifica un insieme di formati di messaggi e di rappresentazioni dati comuni per la comunicazione tra ORB. I tipi di dato definiti da OMG sono mappati in un messaggio di rete flat (Common Data Representation, CDR). GIOP definisce un formato multi-orb di riferimento a un oggetto remoto, l Interoperable Object References (IORs). L informazione contenuta e specificata dalla struttura dello IOR assume significato indipendentemente dall implementazione dell ORB, consentendo a un invocazione di transitare da un ORB a un altro. Ogni ORB fornisce un metodo object_to_string che consente di ottenere una rappresentazione stringa dello IOR di un generico oggetto. Vista la diffusione di TCP/IP, comunemente viene usato l Internet Inter-ORB Protocol (IIOP) che specifica come i messaggi GIOP vengono scambiati su TCP/IP. IIOP è considerato il protocollo standard CORBA e quindi ogni ORB deve connettersi con l universo degli altri ORB traslando le request sul e dal backbone IIOP. Tools e implementazioni CORBA Per realizzare un applicazione che utilizzi il middleware definito da OMG, occorre in primo luogo disporre di un prodotto che ne fornisca un implementazione. La garanzia fornita è comunque quella di scrivere codice utilizzabile con differenti prodotti CORBA. Lo standard CORBA è dinamico e complesso. Di conseguenza, lo scenario dei prodotti attualmente disponibili è in continuo divenire e il livello di aderenza dei singoli prodotti alle specifiche non è quasi mai completo. In ogni caso è sempre possibile utilizzare CORBA in maniera tale da garantire un elevata portabilità. È necessario comunque prestare molta attenzione alla scelta dell ORB da utilizzare in quanto questi differiscono sia come prestazioni, sia come funzionalità fornite. Per una panoramica completa dei prodotti CORBA disponibili si veda prodotti CORBA in bibliografia. 8

9 Gli esempi presenti in questo documento fanno esplicito riferimento a due implementazioni: Sun Java IDL e Inprise VisiBroker. L utilizzo di altri ORB con questi esempi potrebbe comportare modifiche. Java IDL attualmente è disponibile in due versioni decisamente differenti. L implementazione fornita con il JDK 1.2 è limitata e il compilatore IDL va scaricato a parte da Una migliore implementazione è presente invece nel Java 2 SDK a partire dalla versione 1.3. Inprise VisiBroker è probabilmente la migliore e più diffusa implementazione CORBA presente sul mercato; è disponibile in versione trial: si veda VisiBroker in bibliografia. Interface Definition Language CORBA fornisce una chiara separazione tra l interfaccia di un oggetto e la sua implementazione. In modo simile a quanto accade in RMI, il client non si deve occupare in modo diretto dei dettagli di implementazione, ma solo dell interfaccia implementata dall oggetto che intende utilizzare. In un middleware distribuito tutti gli oggetti, compresi quelli che lo compongono, sono trattati come interfacce. Questo è sia una valida scelta di design, sia un esigenza di distribuzione: un client tipicamente non conosce e non deve conoscere l implementazione di un oggetto destinato a essere eseguito su una macchina server. Questa considerazione ha una valenza ancora maggiore in un contesto tecnologico che consente ad esempio il dialogo tra oggetti Java e procedure Cobol che per natura probabilmente risiederanno addirittura su macchine ad architetture differenti. Poiché CORBA è trasparente rispetto al linguaggio, OMG ha definito nelle sue specifiche un nuovo linguaggio interamente descrittivo (IDL) destinato alla definizione delle interfacce degli oggetti CORBA. In momenti successivi sono stati definiti i differenti mapping tra i vari linguaggi di programmazione e IDL. È da notare che in molti dei linguaggi utilizzabili con CORBA non esiste il concetto di interfaccia (ad esempio COBOL e C). Un oggetto remoto quindi, indipendentemente dal fatto che sia applicativo o appartenente all infrastruttura (l ORB, i servizi, ecc.), per essere utilizzato in un middleware CORBA deve essere in primo luogo definito mediante IDL. Nel caso di un oggetto applicativo la definizione sarà a carico dello sviluppatore, nel caso di un oggetto di infrastruttura viene fornita da OMG. Ecco ad esempio parte della definizione IDL dell ORB: // IDL module CORBA { interface ORB { string object_to_string (in Object obj); Object string_to_object (in string str); Object resolve_initial_references (in ObjectId identifier) raises (InvalidName); // ecc... 9

10 ; ; Sintassi e caratteristiche La sintassi IDL è chiaramente C-like e di conseguenza è piuttosto simile anche alla sintassi Java. Sebbene sia un linguaggio descrittivo orientato agli oggetti, in modo simile al C++, IDL include la possibilità, non contemplata da Java, di definire strutture dati che non siano classi. I blocchi logici IDL sono racchiusi in parentesi graffe; a differenza di Java è necessario terminare sempre il blocco con un ; e anche il singolo statement è terminato da un ;. Con :: è possibile specificare la gerarchia delle classi (equivale al. Java, per esempio COR- BA::Object). Nelle specifiche si parla di IDL come di un linguaggio case-insensitive, ma esistono implementazioni che non rispettano questa direttiva. A proposito delle regole di naming, va notato che CORBA non nasce nel mondo Java e quindi i tool IDL e le interfacce definite da OMG non rispettano le regole di naming abituali in un contesto Java. In IDL è importante la sequenza delle definizioni dei vari elementi. Non è possibile utilizzare un elemento, sia esso una exception, una struttura dati o un interfaccia, se non è già stato definito o almeno dichiarato; esiste comunque un meccanismo di forward declaration. IDL non implementa l override e l overload, queste limitazioni sono legate al fatto che molti dei linguaggi supportati non forniscono queste caratteristiche. A differenza di quanto accade in Java, in un file IDL possono esistere molte interfacce pubbliche. IDL in pratica La definizione IDL di un oggetto permette di specificare solo gli aspetti relativi alla sua interfaccia. Si potranno quindi definire le signature dei metodi, le eccezioni che questi rilanciano, l appartenenza ai package, costanti e strutture dati manipolate dai metodi. Data la definizione IDL sarà necessario utilizzare un apposito compilatore fornito a corredo dell ORB. Dalla compilazione si otterranno un buon numero di file.java, fra cui stub, skeleton e altri contenenti codice di supporto per l aggancio all ORB. A partire dai file generati sarà possibile realizzare l opportuna implementazione Java. Si provi a definire ad esempio una semplice costante in IDL // IDL module basic { const float PI = ; ; Si compili il file IDL creato (nell esempio basic.idl). Per la sintassi e il significato dei flag usati si rimanda alla documentazione dell ORB. 10

11 idltojava -fno-cpp basic.idl (per l implementazione JDK 1.2) idlj fall basic.idl (per l implementazione J2SE 1.3) idl2java boa basic.idl (per l implementazione VisiBroker) Verrà creata una sottodirectory basic e un file PI.java // JAVA package basic; public interface PI { public final static float value = (float) ; La generazione del file operata dal compilatore IDL è basata sulle regole di mapping definite da OMG per il linguaggio Java. Mapping IDL Java La trasposizione da linguaggio IDL a linguaggio Java effettuata dal compilatore si basa sull insieme di regole definite da OMG che costituiscono il mapping tra i due linguaggi. Tipi base La definizione di regole di mapping tra IDL e un linguaggio di programmazione implica in primo luogo la definizione di corrispondenze tra i differenti tipi di base; a runtime questo può causare errori di conversione durante il marshalling dei dati. La gestione di questi errori a runtime è a carico del programmatore. Il problema si pone tipicamente per i tipi più ampi in Java che in IDL; ad esempio per i char che in Java, a differenza della maggior parte degli altri linguaggi, sono trattati come Unicode (16 bit) e non ASCII (8 bit). In IDL i tipi che trattano caratteri Unicode sono wchar e wstring. IDL Type Java type Exceptions boolean boolean char char CORBA::DATA_CONVERSION wchar char CORBA::DATA_CONVERSION octet byte string java.lang.string CORBA::MARSHAL CORBA::DATA_CONVERSION wstring java.lang.string CORBA::MARSHAL CORBA::DATA_CONVERSION short short unsigned short short long int unsigned long int long long long unsigned long long long float float double double fixed java.math.bigdecimal CORBA::DATA_CONVERSION 11

12 Alcuni dei tipi supportati da IDL non trovano corrispondenza in Java (ad esempio i tipi unsigned). TRUE e FALSE in IDL sono costanti e vengono mappate con i literal Java true e false. Particolare attenzione va prestata all utilizzo di null: CORBA non ha la nozione di null riferito alle stringhe o agli array. Un parametro stringa dovrà ad esempio essere trattato come una stringa vuota pena l eccezione org.omg.corba.badparam. In IDL ogni tipo, base o complesso, può essere associato a un nome mediante la parola chiave typedef; poiché in Java il concetto di alias per un tipo non esiste, nel codice generato verranno usati comunque i tipi primitivi che lo compongono. Module e interface Come forse si è notato nell esempio precedente la parola chiave module viene mappata esattamente sul package Java // IDL module basic {... // generated Java package basic; In IDL la keyword interface permette di specificare la vera e propria interfaccia dell oggetto remoto definendone dati membro e metodi (nel gergo CORBA attributi e operazioni). Il mapping di un interface è ottenuto con la generazione di un interfaccia e alcune classi Java. Definendo la semplice interfaccia IDL // IDL module basic { ; interface HelloWorld { string hello(); ; il compilatore creerà una directory basic e una serie di file Java (usando VisiBroker verranno generati anche altri file): _HelloWorldImplBase è lo skeleton, la classe base per la generazione dell oggetto remoto; fornisce i meccanismi di ricezione di una request dall ORB e quelli di risposta. _HelloWorldStub è lo stub, l implementazione client-side dell oggetto remoto; fornisce i meccanismi di conversione tra l invocazione del metodo e l invocazione via ORB dell oggetto remoto. HelloWorldOperations è l interfaccia Java che contiene le signature dei metodi. HelloWorld è l interfaccia Java dell oggetto remoto, specializza HelloWorldOperations. 12

13 HelloWorldHelper e HelloWorldHolder saranno spiegati più avanti. Insieme le interfacce HelloWorldOperations e HelloWorld definiscono l interfaccia dell oggetto CORBA; sono dette rispettivamente operations interface e signature interface. Il JDK 1.2 utilizza vecchie regole di mapping e non genera l interfaccia operation. La signature interface generata sarà // generated Java package basic; public interface HelloWorld extends HelloWorldOperations, org.omg.corba.object, org.omg.corba.portable.idlentity mentre l operations interface sarà package basic; public interface HelloWorldOperations { String hello (); Come si vedrà più avanti, le altre classi serviranno come base per l implementazione e l utilizzo dell oggetto remoto vero e proprio. Il linguaggio IDL supporta l ereditarietà multipla utilizzando la normale derivazione Java tra interfacce. // IDL module basic { ; interface ClasseBaseA { void metodoa(); ; interface ClasseBaseB { void metodob(); ; interface ClasseDerivataAB: ClasseBaseA, ClasseBaseB { ; ClasseDerivataAB deriva dalle altre due interfacce e avrà quindi una rappresentazione Java. // generated Java package basic; public interface ClasseDerivataAB extends ClasseDerivataABOperations, basic.classebasea, basic.classebaseb { un oggetto di questo tipo dovrà quindi fornire l implementazione dei due metodi (metodoa e metodob). 13

14 Attributi e metodi In IDL le signature dei vari metodi sono fornite in maniera simile a Java. Per comodità è possibile dare una definizione dei metodi accessori di un attributo (i classici get e set Java) utilizzando la keyword attribute con l eventuale modificatore readonly. // IDL module basic { ; interface Motocicletta { readonly attribute string colore; void cambiamarcia(in long marcia); ; Poiché l attributo colore è readonly, sarà generato solo il corrispondente metodo di lettura. // generated Java package basic; public interface MotociclettaOperations { String colore(); void cambiamarcia(int marcia); In IDL il passaggio di parametri a un metodo implica la dichiarazione del tipo di passaggio che si desidera adottare. Mentre in Java il passaggio per valore (tipi primitivi) o per riferimento (oggetti, array, ecc.) è implicitamente associato al tipo, in IDL è possibile specificarlo utilizzando nella signature le keyword in, out o inout. Come si può intuire un parametro out può essere modificato dal metodo invocato. Poiché in Java non tutti i parametri sono trattati per riferimento, esistono delle classi wrapper apposite dette Holder. Classi Holder Le classi Holder sono utilizzate per supportare il passaggio di parametri out e inout. Come si è visto in precedenza, dalla compilazione di un interfaccia IDL viene generata una corrispondente classe <NomeInterfaccia>Holder; l Holder è generato per ogni tipo utente. Nel package org.omg.corba sono forniti gli Holder per tutti i tipi primitivi. Ogni Holder fornisce un costruttore di default che inizializza il contenuto a false, 0, null o null unicode a seconda del tipo. Ecco per esempio l Holder del tipo base int: // JAVA final public class IntHolder implements org.omg.corba.portable.streamable { public int value; public IntHolder() { public IntHolder(int initial) {... public void _read(org.omg.corba.portable.inputstream is) {... 14

Santoro Umberto Roberto. Corba e Java

Santoro Umberto Roberto. Corba e Java Santoro Umberto Roberto Corba e Java Sommario Nell era di Internet e delle grandi Intranet aziendali, il modello computazionale dominante è chiaramente quello distribuito. Un tipico ambiente distribuito

Dettagli

CORBA. CORBA facilita lo sviluppo di sistemi distribuiti fornendo

CORBA. CORBA facilita lo sviluppo di sistemi distribuiti fornendo CORBA CORBA facilita lo sviluppo di sistemi distribuiti fornendo Una infrastruttura per far comunicare oggetti in un sistema distribuito Un set di servizi utili Un supporto che permette ad applicazioni

Dettagli

CORBA & DCOM. Gianpaolo Cugola cugola@elet.polimi.it http://www.elet.polimi.it/~cugola. La Object Management Architecture

CORBA & DCOM. Gianpaolo Cugola cugola@elet.polimi.it http://www.elet.polimi.it/~cugola. La Object Management Architecture CORBA & DCOM Gianpaolo Cugola cugola@elet.polimi.it http://www.elet.polimi.it/~cugola Sommario La Object Management Architecture CORBA La programmazione di applicazioni CORBA in Java CORBA vs. RMI DCOM

Dettagli

CORBA ( Common Object Request Broker Architecture ) Le specifiche più conosciute sono UML e CORBA

CORBA ( Common Object Request Broker Architecture ) Le specifiche più conosciute sono UML e CORBA CORBA ( Common Object Request Broker Architecture ) consiste in un insieme di specifiche promosse e curate da OMG (Object Management Group). L OMG è un consorzio internazionale no-profit di industrie nel

Dettagli

Corso di Reti di Calcolatori LS

Corso di Reti di Calcolatori LS Università degli Studi di Bologna Facoltà di Ingegneria Corso di Reti di Calcolatori LS CORBA - Implementazione Naming Service e Interface Repository Luca Foschini Anno accademico 2008/2009 Agenda CORBA

Dettagli

Programmazione CORBA in Java

Programmazione CORBA in Java Programmazione CORBA in Java Ing. Andrea Santoro http://www.dis.uniroma1.it/~santoroa santoro@dis.uniroma1.it (codice preparato dall ing. Alessandro Termini) Overview Naming Service Motivazioni Name Service

Dettagli

Programmazione CORBA in Java

Programmazione CORBA in Java Programmazione CORBA in Java Trasparenze dalle lezioni del corso di Reti di Calcolatori A.A. 2002/2003 Prof. Roberto Baldoni - Ing. Antonino Virgillito CORBA Specifica standard di middleware RPC ad oggetti

Dettagli

RMI. Java RMI RMI. G. Prencipe prencipe@di.unipi.it

RMI. Java RMI RMI. G. Prencipe prencipe@di.unipi.it Java Remote Method Invocation -- RMI G. Prencipe prencipe@di.unipi.it RMI RMI è una tecnologia JAVA che permette a una JVM di comunicare con un altra JVM per farle eseguire metodi È possibile che oggetti

Dettagli

-$9$ 6HUYOHW. Andrea BEI (andrea.bei@libero.it)

-$9$ 6HUYOHW. Andrea BEI (andrea.bei@libero.it) -$9$ 6HUYOHW Andrea BEI (andrea.bei@libero.it) Servlet: definizione 8Q6HUYOHWqXQPRGXORVFULWWRLQ-$9$FKHHVWHQGHOH IXQ]LRQDOLWjGLXQVHUYHUUHTXHVWUHVSRQVHRULHQWHG:(% VHUYHU es: servlet per l inserimento in

Dettagli

Programmazione di sistemi distribuiti

Programmazione di sistemi distribuiti Programmazione di sistemi distribuiti I Sistemi Distribuiti, per loro natura, prevedono che computazioni differenti possano essere eseguite su VM differenti, possibilmente su host differenti, comunicanti

Dettagli

Java Remote Method Invocation

Java Remote Method Invocation Java Remote Method Invocation Programmazione in Rete e Laboratorio Comunicazione distribuita Port1 Java VM1 Java VM2 Port 2 Matteo Baldoni Dipartimento di Informatica Universita` degli Studi di Torino

Dettagli

Linguaggio Java. Robusto. Orientato agli oggetti. Protegge e gestisce dagli errori. Non permette costrutti pericolosi

Linguaggio Java. Robusto. Orientato agli oggetti. Protegge e gestisce dagli errori. Non permette costrutti pericolosi Linguaggio Java Robusto Non permette costrutti pericolosi Eredità Multipla Gestione della Memoria Orientato agli oggetti Ogni cosa ha un tipo Ogni tipo è un oggetto (quasi) Protegge e gestisce dagli errori

Dettagli

Distributed Object Computing

Distributed Object Computing Evoluzione Architetturale Distributed omputing entralizzata Monolitica anni 60-70 Reti locali di P anni 80 Reti lient Server anni 80-90 Internet The network is the computer Paolo Falcarin Sistemi Informativi

Dettagli

Introduzione a Java Remote Method Invocation (RMI)

Introduzione a Java Remote Method Invocation (RMI) Introduzione a Java Remote Method Invocation (RMI) SAPIENZA Università di Roma Corso di Architetture Software Orientate ai Servizi E risuona il mio barbarico yawp sopra i tetti del mondo ( I sound my barbaric

Dettagli

Activation In sintesi: è inutile avere attivi degli oggetti se non vengono utilizzati

Activation In sintesi: è inutile avere attivi degli oggetti se non vengono utilizzati Activation In generale i Sistemi ad oggetti distribuiti sono progettati per lavorare con oggetti persistenti. Dato che questi sistemi saranno composti da migliaia (forse milioni) di tali oggetti, sarebbe

Dettagli

Sistemi Distribuiti. Anno Accademico 2005-06 Prof. Flavio De Paoli. Il modello ad oggetti

Sistemi Distribuiti. Anno Accademico 2005-06 Prof. Flavio De Paoli. Il modello ad oggetti Sistemi Distribuiti Anno Accademico 2005-06 Prof. Flavio De Paoli 1 Il modello ad oggetti 2 Distributed Objects 2-16 Common organization of a remote object with client-side proxy. 3 Caratteristiche Oggetti

Dettagli

Comunicazione fra oggetti distribuiti

Comunicazione fra oggetti distribuiti Comunicazione fra oggetti distribuiti RMI RPC invocazione di metodo remoto - gli oggetti remoti ricevono le RMI interfaccia remota meccanismo per la comunicazione cliente servente come primitiva di un

Dettagli

Programmazione distribuita

Programmazione distribuita Programmazione distribuita 1 Architettura client-server È il modo classico di progettare applicazioni distribuite su rete Server offre un servizio "centralizzato" attende che altri (client) lo contattino

Dettagli

Servers Activatable. Massimo Merro Programmazione di Rete 166 / 193

Servers Activatable. Massimo Merro Programmazione di Rete 166 / 193 Servers Activatable Nelle lezioni precedenti abbiamo detto che una referenza remota ad un server di tipo UnicastRemoteObject rimane valida finchè il server è in esecuzione. Quando il server termina, o

Dettagli

Internet, Security & Information Technologies

Internet, Security & Information Technologies Internet, Security & Information Technologies I sistemi distribuiti: lo standard CORBA Sommario Il Middleware Introduzione ai sistemi distribuiti e al concetto di middleware CORBA: concetti generali Introduzione

Dettagli

RMI Remote Method Invocation

RMI Remote Method Invocation RMI Remote Method Invocation [Pagina intenzionalmente vuota] (1 12 2004) slide 4:1/18 (p.106) Un applicazione RMI è un applicazione distribuita ad oggetti. Applicazione RMI tipica, strutturata in: server:

Dettagli

JNDI. Massimo Merro Programmazione di Rete 214 / 229

JNDI. Massimo Merro Programmazione di Rete 214 / 229 JNDI Abbiamo già visto come i registri RMI espletino un servizio di Naming attraverso cui vengono associati nomi simbolici a referenze a server remoti. Esistono comunque altri servizi di naming: COS (Common

Dettagli

Web Services con Axis Delia Di Giorgio Anna Celada 1 marzo 2005

Web Services con Axis Delia Di Giorgio Anna Celada 1 marzo 2005 Sommario Web Services con Axis Delia Di Giorgio Anna Celada 1 marzo 2005 Introduzione.................................................................................. 1 SOAP........................................................................................

Dettagli

CdL MAGISTRALE in INFORMATICA

CdL MAGISTRALE in INFORMATICA 05/11/14 CdL MAGISTRALE in INFORMATICA A.A. 2014-2015 corso di SISTEMI DISTRIBUITI 7. I processi : il naming Prof. S.Pizzutilo Il naming dei processi Nome = stringa di bit o di caratteri utilizzata per

Dettagli

RMI: metodi equals e hashcode

RMI: metodi equals e hashcode RMI: metodi equals e hashcode Per verificare se due oggetti remoti contengono gli stessi dati, la chiamata indirizzata al metodo equals() avrebbe bisogno di contattare i server dove si trovano gli oggetti

Dettagli

Architetture a oggetti distribuiti

Architetture a oggetti distribuiti Luca Cabibbo Architetture Software Architetture a oggetti distribuiti Dispensa ASW 420 ottobre 2014 Tutti sanno che una certa cosa è impossibile da realizzare, finché arriva uno sprovveduto che non lo

Dettagli

Sviluppo Applicazioni Mobile Lezione 11. Dr. Paolo Casoto, Ph.D - 2012

Sviluppo Applicazioni Mobile Lezione 11. Dr. Paolo Casoto, Ph.D - 2012 + Sviluppo Applicazioni Mobile Lezione 11 + Credits I lucidi di questa lezione sono stati preparati da: Professor Stefano Mizzaro Professor Paolo Coppola e sono stati modificati e completati dal Dr. Paolo

Dettagli

Esercitazione di Sistemi Distribuiti: Java RMI

Esercitazione di Sistemi Distribuiti: Java RMI Esercitazione di Sistemi Distribuiti: Java RMI Anno Accademico 2007-08 Marco Comerio comerio@disco.unimib.it Richiami Teorici Oggetti distribuiti 2-16 Usuale organizzazione di un oggetto remoto con un

Dettagli

Programmazione di rete in Java

Programmazione di rete in Java Programmazione di rete in Java Reti di calcolatori Una rete di calcolatori è un sistema che permette la condivisione di dati informativi e risorse (sia hardware sia software) tra diversi calcolatori. Lo

Dettagli

Quando si sa chiaramente come si deve comportare l applicazione si può analizzare una possibile soluzione applicativa.

Quando si sa chiaramente come si deve comportare l applicazione si può analizzare una possibile soluzione applicativa. Introduzione alla tecnologia JMX 1 Viene analizzata l architettura sottostante le Java Managment Extensions (JMX) mostrandone un utilizzo applicativo e analizzando altri possibili scenari d uso di Ivan

Dettagli

Organizzazione della lezione. Lezione 18 Remote Method Invocation - 6. (con callback) L accesso al registry per il rebind()

Organizzazione della lezione. Lezione 18 Remote Method Invocation - 6. (con callback) L accesso al registry per il rebind() Organizzazione della lezione Lezione 18 Remote Method Invocation - 6 Vittorio Scarano Corso di Programmazione Distribuita (2003-2004) Laurea di I livello in Informatica Università degli Studi di Salerno

Dettagli

Applicazioni web. Parte 5 Socket

Applicazioni web. Parte 5 Socket Agent and Object Technology Lab Dipartimento di Ingegneria dell Informazione Università degli Studi di Parma Applicazioni web Parte 5 Michele Tomaiuolo tomamic@ce.unipr.it Protocolli Internet I computer

Dettagli

QUEUE : considerazioni. QUEUE : considerazioni. QUEUE : esempio. QUEUE : esempio

QUEUE : considerazioni. QUEUE : considerazioni. QUEUE : esempio. QUEUE : esempio QUEUE : considerazioni QUEUE : considerazioni Si è realizzata una struttura dati complessa utilizzandone una primitiva, l array. Il pregio di tale implementazione è il basso costo computazionale, mentre

Dettagli

Progettazione: Tecnologie e ambienti di sviluppo

Progettazione: Tecnologie e ambienti di sviluppo Contratto per l acquisizione di servizi di Assistenza specialistica per la gestione e l evoluzione del patrimonio software della Regione Basilicata. Repertorio n. 11016 del 25/09/2009 Progettazione: Tecnologie

Dettagli

ALLEGATO C STANDARD TECNICI DELLA BORSA CONTINUA NAZIONALE DEL LAVORO

ALLEGATO C STANDARD TECNICI DELLA BORSA CONTINUA NAZIONALE DEL LAVORO ALLEGATO C STANDARD TECNICI DELLA BORSA CONTINUA NAZIONALE DEL LAVORO Standard tecnici Gli standard tecnici di riferimento adottati sono conformi alle specifiche e alle raccomandazioni emanate dai principali

Dettagli

Registri RMI. Massimo Merro Univ. Verona Programmazione di Rete 90 / 247

Registri RMI. Massimo Merro Univ. Verona Programmazione di Rete 90 / 247 Registri RMI Per poter interagire con un server remoto, un client deve essere in possesso di una sua referenza remota (ovvero un oggetto stub). Un servizio di Naming è una risorsa centralizzata che può

Dettagli

Introduzione al linguaggio Java: Servlet e JSP

Introduzione al linguaggio Java: Servlet e JSP Introduzione al linguaggio Java: Servlet e JSP Corso di Gestione della Conoscenza d Impresa A. A. 2006/2007 Dipartimento di Informatica Università degli Studi di Bari 1 Servlet e JSP: il contesto Un applicazione

Dettagli

Corso Base. Liceo Norberto Rosa Bussoleno Prof. Angelo GIORGIO

Corso Base. Liceo Norberto Rosa Bussoleno Prof. Angelo GIORGIO Corso Base Liceo Norberto Rosa Bussoleno Prof. Angelo GIORGIO Java Java è un Linguaggio di Programmazione orientato agli oggetti. Un Linguaggio di Programmazione è un linguaggio ad alto livello, dotato

Dettagli

8. Sistemi Distribuiti e Middleware

8. Sistemi Distribuiti e Middleware 8. Sistemi Distribuiti e Middleware Andrea Polini Ingegneria del Software Corso di Laurea in Informatica (Ingegneria del Software) 8. Sistemi distribuiti e Middleware 1 / 32 Sommario 1 Sistemi distribuiti

Dettagli

I metodi statici -1. Variabili statiche Vogliamo assegnare a ciascuncontoun numeroidentificativo diverso. I metodi statici -2

I metodi statici -1. Variabili statiche Vogliamo assegnare a ciascuncontoun numeroidentificativo diverso. I metodi statici -2 I metodi statici -1 I metodi statici non hanno il parametro implicito il metodo sqrt di Math I metodi statici vengono detti anche metodi di classe perche` non operano su una particolare istanza della classe

Dettagli

Analisi, progettazione e implementazione di un repository di componenti distribuite in Java basato su JNDI.

Analisi, progettazione e implementazione di un repository di componenti distribuite in Java basato su JNDI. UNIVERSITÀ DEGLI STUDI DI ROMA LA SAPIENZA TESI DI LAUREA IN SCIENZE DELL INFORMAZIONE Analisi, progettazione e implementazione di un repository di componenti distribuite in Java basato su JNDI. Relatore:

Dettagli

Mobilità di Codice. Massimo Merro Programmazione di Rete 128 / 144

Mobilità di Codice. Massimo Merro Programmazione di Rete 128 / 144 Mobilità di Codice Abbiamo già visto come un dato host possa trasmettere un oggetto (serializzabile) ad un altro host. Quest ultimo potrà eseguire l oggetto pur non possedendo il bytecode della classe

Dettagli

Socket & RMI Ingegneria del Software - San Pietro

Socket & RMI Ingegneria del Software - San Pietro Socket & RMI Ingegneria del Software - San Pietro Socket È possibile trattare la comunicazione di rete allo stesso modo con cui è possibile trattare la lettura da file. La classe Socket rappresenta la

Dettagli

PROGRAMMA CORSO Analista Programmatore JAVA - ORACLE

PROGRAMMA CORSO Analista Programmatore JAVA - ORACLE PROGRAMMA CORSO Analista Programmatore JAVA - ORACLE 1. JAVA 1.1 Introduzione a Java Introduzione Cosa è Java 1.2 Sintassi e programmazione strutturata variabili e metodi tipi di dati, array operatori

Dettagli

Linguaggio C. Fondamenti. Struttura di un programma.

Linguaggio C. Fondamenti. Struttura di un programma. Linguaggio C Fondamenti. Struttura di un programma. 1 La storia del Linguaggio C La nascita del linguaggio C fu dovuta all esigenza di disporre di un Linguaggio ad alto livello adatto alla realizzazione

Dettagli

Gli EJB offrono vari vantaggi allo sviluppatore di una applicazione

Gli EJB offrono vari vantaggi allo sviluppatore di una applicazione Gli EJB offrono vari vantaggi allo sviluppatore di una applicazione Un ambiente di esecuzione che gestisce o naming di oggetti, sicurezza, concorrenza, transazioni, persistenza, distribuzione oggetti (location

Dettagli

Corso di Laurea in Informatica e Comunicazione Digitale. a.a. 2006-2007. Interazione Uomo-Macchina. Introduzione a Java.

Corso di Laurea in Informatica e Comunicazione Digitale. a.a. 2006-2007. Interazione Uomo-Macchina. Introduzione a Java. Corso di Laurea in Informatica e Comunicazione Digitale a.a. 2006-2007 Interazione Uomo-Macchina Introduzione a Java Seconda Parte Irene Mazzotta Giovanni Cozzolongo Vincenzo Silvetri 1 Richiami: Java

Dettagli

Programmazione ad oggetti

Programmazione ad oggetti DAIS Univ. Ca' Foscari Venezia Programmazione ad oggetti Samuel Rota Bulò Informazioni generali Docente: Samuel Rota Bulò @email: srotabul@dais.unive.it Homepage: http://www.dais.unive.it/~srotabul/ ooprogramming2012.html

Dettagli

Java RMI: Esempio Completo di un Applicazione Distribuita

Java RMI: Esempio Completo di un Applicazione Distribuita Java RMI: Esempio Completo di un Applicazione Distribuita Il Problema Produttore/Consumatore in Ambiente Distribuito* *a cura del Prof. L. Nigro, Università della Calabria Java RMI (Remote Method Invocation)

Dettagli

Il linguaggio Java. Oggetto remoto. Remote Method Invocation (RMI) Oggetto remoto: oggetto i cui metodi possono essere invocati attraverso la rete

Il linguaggio Java. Oggetto remoto. Remote Method Invocation (RMI) Oggetto remoto: oggetto i cui metodi possono essere invocati attraverso la rete Il linguaggio Java Remote Method Invocation (RMI) Oggetto remoto Oggetto remoto: oggetto i cui metodi possono essere invocati attraverso la rete Client Server 2 Schema di principio oggetto client oggetto

Dettagli

Broker. [POSA1] Pattern-Oriented Software Architecture, 1996

Broker. [POSA1] Pattern-Oriented Software Architecture, 1996 Luca Cabibbo Architetture Software Dispensa ASW 420 ottobre 2014 Tutti sanno che una certa cosa è impossibile da realizzare, finché arriva uno sprovveduto che non lo sa e la inventa. Albert Einstein 1

Dettagli

Oggetto: MASTER DI ALTA FORMAZIONE PROFESSIONALE IN PROGRAMMATORE JAVA PARTECIPAZIONE GRATUITA

Oggetto: MASTER DI ALTA FORMAZIONE PROFESSIONALE IN PROGRAMMATORE JAVA PARTECIPAZIONE GRATUITA Oggetto: MASTER DI ALTA FORMAZIONE PROFESSIONALE IN PROGRAMMATORE JAVA PARTECIPAZIONE GRATUITA Salerno Formazione, società operante nel settore della didattica, della formazione professionale e certificata

Dettagli

R. Focardi 2002 Laboratorio di Ingegneria del Software Slide 1. Applicazioni = programmi stand-alone

R. Focardi 2002 Laboratorio di Ingegneria del Software Slide 1. Applicazioni = programmi stand-alone Il linguaggio Java Nato nel maggio 95 (James Gosling & al.) Orientato ad oggetti, basato sulle classi, concorrente Fortemente tipato: distinzione chiara tra errori statici ed errori dinamici Ad alto livello:

Dettagli

CORSO DI PROGRAMMAZIONE JAVA

CORSO DI PROGRAMMAZIONE JAVA CORSO DI PROGRAMMAZIONE JAVA Corso di Programmazione Java Standard Edition ( MODULO A) OBIETTIVI ll corso ha come obiettivo quello di introdurre la programmazione a oggetti (OOP) e di fornire solide basi

Dettagli

Il.NET Framework. By Dario Maggiari. L architettura del.net Framework è riassunta, nel complesso, nella figura seguente:

Il.NET Framework. By Dario Maggiari. L architettura del.net Framework è riassunta, nel complesso, nella figura seguente: Il.NET Framework By Dario Maggiari L architettura del.net Framework è riassunta, nel complesso, nella figura seguente: Il cuore del.net Framework è costituito dal CLR (Common Language Runtime) che, secondo

Dettagli

Introduzione alla programmazione in C

Introduzione alla programmazione in C Introduzione alla programmazione in C Testi Consigliati: A. Kelley & I. Pohl C didattica e programmazione B.W. Kernighan & D. M. Ritchie Linguaggio C P. Tosoratti Introduzione all informatica Materiale

Dettagli

12 - Introduzione alla Programmazione Orientata agli Oggetti (Object Oriented Programming OOP)

12 - Introduzione alla Programmazione Orientata agli Oggetti (Object Oriented Programming OOP) 12 - Introduzione alla Programmazione Orientata agli Oggetti (Object Oriented Programming OOP) Programmazione e analisi di dati Modulo A: Programmazione in Java Paolo Milazzo Dipartimento di Informatica,

Dettagli

UNIVERSITA DI FIRENZE Facoltà di Ingegneria. Persistenza Applicazioni Enterprise Uso dei modelli

UNIVERSITA DI FIRENZE Facoltà di Ingegneria. Persistenza Applicazioni Enterprise Uso dei modelli UNIVERSITA DI FIRENZE Facoltà di Ingegneria Persistenza Applicazioni Enterprise Uso dei modelli 1 IL problema della persistenza APPLICAZIONE (programmi) (oggetti) DATI PERSISTENTI (file, record) (basi

Dettagli

PROGETTO DI UN MIDDLEWARE PER L ACCESSO REMOTO A UN REPOSITORY

PROGETTO DI UN MIDDLEWARE PER L ACCESSO REMOTO A UN REPOSITORY Giampiero Allamprese 0000260193 PROGETTO DI UN MIDDLEWARE PER L ACCESSO REMOTO A UN REPOSITORY Reti di Calcolatori LS prof. Antonio Corradi A.A. 2007/2008 ABSTRACT L obiettivo di questo progetto è la realizzazione

Dettagli

Remote Method Invocation (RMI)

Remote Method Invocation (RMI) (RMI) Remote Method Invocation (RMI) in Java. Walter Cazzola Dipartimento di Informatica e Comunicazione Università à degli Studi di Milano. e-mail: cazzola@disi disi.unige.it Walter Cazzola Java: Remote

Dettagli

Organizzazione della lezione. 15. Java Remote Method Invocation (3) Lo schema del Factory Design Pattern - 1. Factory design pattern

Organizzazione della lezione. 15. Java Remote Method Invocation (3) Lo schema del Factory Design Pattern - 1. Factory design pattern Organizzazione della lezione 15. Java Remote Method Invocation (3) Vittorio Scarano Corso di Programmazione Distribuita Laurea di I livello in Informatica Università degli Studi di Salerno Il design pattern

Dettagli

SCD. Sistemi distribuiti: gestione dei nomi. Denominazione di entità 1. Denominazione di entità 2. Esempio

SCD. Sistemi distribuiti: gestione dei nomi. Denominazione di entità 1. Denominazione di entità 2. Esempio Denominazione di entità 1 Gestione dei nomi Anno accademico 2012/13 Sistemi Concorrenti e Distribuiti SCD Le entità di un sistema distribuito devono avere denotazioni che le rendano note Per riferimento,

Dettagli

Programmazione in Java Parte I: Fondamenti

Programmazione in Java Parte I: Fondamenti Programmazione in Java Parte I: Fondamenti Lezione 1 Dott. Marco Faella Riferimenti Testi consigliati: Progettazione del software e design pattern in Java di C.S. Horstmann Apogeo Gli esempi di codice

Dettagli

Obiettivo della lezione. Eterogeneità insita nei sistemi distribuiti. La domanda:

Obiettivo della lezione. Eterogeneità insita nei sistemi distribuiti. La domanda: Lezione 7 Eterogeneità Vittorio Scarano Corso di Sistemi Distribuiti (3-4) Laurea Specialistica in Informatica Università degli Studi di Salerno Obiettivo della lezione Eterogeneità insita nei sistemi

Dettagli

BPEL: Business Process Execution Language

BPEL: Business Process Execution Language Ingegneria dei processi aziendali BPEL: Business Process Execution Language Ghilardi Dario 753708 Manenti Andrea 755454 Docente: Prof. Ernesto Damiani BPEL - definizione Business Process Execution Language

Dettagli

Nascita di Java. Che cos e Java? Caratteristiche di Java. Java: linguaggio a oggetti

Nascita di Java. Che cos e Java? Caratteristiche di Java. Java: linguaggio a oggetti Nascita di Java L uscita di Java, verso la metà degli anni novanta, fu accolta con molto entusiasmo dalla comunità dei programmatori e dei provider di servizi internet perché permetteva agli utenti del

Dettagli

INDICE. Indice. Introduzione

INDICE. Indice. Introduzione V Indice Introduzione XIII Capitolo 1 La programmazione multithread 1 1.1 Cosa sono i thread 2 Utilizzare i thread per dare una possibilità ad altri task 9 Avvio ed esecuzione dei thread 10 Esecuzione

Dettagli

SISTEMI OPERATIVI DISTRIBUITI

SISTEMI OPERATIVI DISTRIBUITI SISTEMI OPERATIVI DISTRIBUITI E FILE SYSTEM DISTRIBUITI 12.1 Sistemi Distribuiti Sistemi operativi di rete Sistemi operativi distribuiti Robustezza File system distribuiti Naming e Trasparenza Caching

Dettagli

INTRODUZIONE INTRODUZIONE JAVA JAVA

INTRODUZIONE INTRODUZIONE JAVA JAVA INTRODUZIONE INTRODUZIONE Lo sviluppo di applicazioni complesse porta a costruire moduli software sempre più potenti e versatili, che possano essere riutilizzati in numerosi progetti I linguaggi ad oggetti

Dettagli

Programmazione AA 2012 2013

Programmazione AA 2012 2013 Programmazione ad Oggetti AA 2012 2013 Contenuti del corso Modulo A Tecniche di programmazione Docente: Prof. Michele Bugliesi Modulo B Tecniche di progetto Docente: Prof. Alessandro Roncato Contenuti

Dettagli

Manuale SDK di OpenSPCoop2 i. Manuale SDK di OpenSPCoop2

Manuale SDK di OpenSPCoop2 i. Manuale SDK di OpenSPCoop2 i Manuale SDK di OpenSPCoop2 ii Copyright 2005-2013 Link.it srl iii Indice 1 Introduzione 1 2 La Personalizzazione del Protocollo di Cooperazione 1 3 Il Software Development Kit 2 3.1 Gestione dei payload.................................................

Dettagli

Programmazione server-side: Java Servlet

Programmazione server-side: Java Servlet Programmazione server-side: Java Servlet Corso di Applicazioni Telematiche A.A. 2006-07 Lezione n.11 parte II Prof. Roberto Canonico Università degli Studi di Napoli Federico II Facoltà di Ingegneria Cos

Dettagli

Introduzione ai connettori

Introduzione ai connettori Luca Cabibbo Architetture Software Dispensa ASW 810 ottobre 2014 Le relazioni tra elementi sono ciò che dà valore aggiunto ai sistemi. Eberhardt Rechtin 1 -Fonti [Shaw] Mary Shaw, Procedure Calls are the

Dettagli

Specifica i tipi di oggetti a creare, utilizzando un istanza prototipo, e crea nuove istanze tramite la copia di questo prototipo.

Specifica i tipi di oggetti a creare, utilizzando un istanza prototipo, e crea nuove istanze tramite la copia di questo prototipo. Prototype 28 4. Prototype (GoF pag. 117) 4.1. Descrizione 4.2. Esempio Specifica i tipi di oggetti a creare, utilizzando un istanza prototipo, e crea nuove istanze tramite la copia di questo prototipo.

Dettagli

TFA 42 Sistemi e Reti di Calcolatori per la Didattica

TFA 42 Sistemi e Reti di Calcolatori per la Didattica Università degli Studi di Pisa 42 Sistemi e Reti di Calcolatori per la Didattica 29/03/2013 Laura Ricci Laura Ricci 1 DNS: DOMAIN NAME SYSTEM Persone: molti identificativi: o # CF, nome, # passaporto Host

Dettagli

Gestione delle eccezioni in Java

Gestione delle eccezioni in Java Gestione delle eccezioni in Java - Introduzione al concetto di eccezioni E possibile definire un eccezione come un situazione imprevista che il flusso di un applicazione può incontrare. È possibile gestire

Dettagli

UNIVERSITA DI FIRENZE Facoltà di Ingegneria. Persistenza Applicazioni Enterprise Uso dei modelli

UNIVERSITA DI FIRENZE Facoltà di Ingegneria. Persistenza Applicazioni Enterprise Uso dei modelli UNIVERSITA DI FIRENZE Facoltà di Ingegneria Persistenza Applicazioni Enterprise Uso dei modelli 1 IL problema della persistenza APPLICAZIONE (programmi) (oggetti) DATI PERSISTENTI (file, record) (basi

Dettagli

7 Esercitazione (svolta): Callback. Polling. Java RMI: callback. Server. Server. Client. Client. due possibilità:

7 Esercitazione (svolta): Callback. Polling. Java RMI: callback. Server. Server. Client. Client. due possibilità: 7 Esercitazione (svolta): due possibilità: Java RMI: callback Molte applicazioni richiedono un meccanismo publish/subscribe I partecipanti (client) necessitano di notifiche da parte del coordinatore (server)

Dettagli

Java: Compilazione e Traduzione. Fondamenti di Informatica L-B Esercitazione n 3 Introduzione a JAVA. C: Editing, compilazione, esecuzione

Java: Compilazione e Traduzione. Fondamenti di Informatica L-B Esercitazione n 3 Introduzione a JAVA. C: Editing, compilazione, esecuzione Fondamenti di Informatica L-B Esercitazione n 3 Introduzione a JAVA A.A. 2007/08 Tutor: Barbara Pettazzoni barbara.pettazzoni@studio.unibo.it Java: Compilazione e Traduzione Editing, compilazione, esecuzione

Dettagli

Operazioni di scrittura e lettura con periferici in linguaggio Java

Operazioni di scrittura e lettura con periferici in linguaggio Java Operazioni di scrittura e lettura con periferici in linguaggio Java Flussi logici (stream) di output Operazione di scrittura a monitor con uso di stream (flusso logico) di output RAM System.out.println

Dettagli

JDBC versione base. Le classi/interfacce principali di JDBC

JDBC versione base. Le classi/interfacce principali di JDBC JDBC versione base Java Database Connectivity è il package Java per l accesso a database relazionali il package contiene interfacce e classi astratte uno dei pregi è la completa indipendenza del codice

Dettagli

Le variabili. Olga Scotti

Le variabili. Olga Scotti Le variabili Olga Scotti Cos è una variabile Le variabili, in un linguaggio di programmazione, sono dei contenitori. Possono essere riempiti con un valore che poi può essere riletto oppure sostituito.

Dettagli

Naming nei Sistemi Distribuiti

Naming nei Sistemi Distribuiti Naming nei Sistemi Distribuiti Naming (1) La risoluzione dei nomi permette ad un processo di accedere ad una entità in un sistema distribuito. Un sistema di naming è necessario per avere un modello comune

Dettagli

Naming nei Sistemi Distribuiti

Naming nei Sistemi Distribuiti Naming nei Sistemi Distribuiti Naming (1) La risoluzione dei nomi permette ad un processo di accedere ad una entità in un sistema distribuito. Un sistema di naming è necessario per avere un modello comune

Dettagli

Internet Socket e RMI

Internet Socket e RMI Internet Socket e RMI Programmazione in Rete e Laboratorio Architettura / Un servizio presso un computer-server è identificato dai seguenti valori: IP (32 bit, presto 128 bit) (16 bit) Servizi telnet TCP

Dettagli

Seminario di Sistemi Distribuiti: RPC su SOAP

Seminario di Sistemi Distribuiti: RPC su SOAP Corso di Sistemi Distribuiti Prof. S. Balsamo Seminario di Sistemi Distribuiti: RPC su SOAP [ 777775] 1 INTRODUZIONE 3 2 RPC 3 3 SOAP (SIMPLE OBJECT ACCESS PROTOCOL) 3 4 UTILIZZO DI SOAP COME PROTOCOLLO

Dettagli

Framework. Impianti Informatici. Web application - tecnologie

Framework. Impianti Informatici. Web application - tecnologie Framework Web application - tecnologie Web Application: tecnologie 2 Java-based (J2EE) Sviluppata inizialmente da Sun Cross-platform e open source Gestire direttamente le funzionalità dell applicazione

Dettagli

MIDDLEWARE e CORBA. Corso di Architetture Distribuite e Servizi di Rete. Antonio Corradi & Paolo Bellavista MIDDLEWARE

MIDDLEWARE e CORBA. Corso di Architetture Distribuite e Servizi di Rete. Antonio Corradi & Paolo Bellavista MIDDLEWARE Università degli Studi di Bologna MASTER integratori di Sistema MIDDLEWARE e CORBA Corso di Architetture Distribuite e Servizi di Rete Antonio Corradi & Paolo Bellavista Middleware e CORBA 1 MIDDLEWARE

Dettagli

Appunti dei corsi di Programmazione di Rete Sistemi di elaborazione: Reti II

Appunti dei corsi di Programmazione di Rete Sistemi di elaborazione: Reti II Appunti dei corsi di Programmazione di Rete Sistemi di elaborazione: Reti II PROF. G. BONGIOVANNI 0) INTRODUZIONE AL LINGUAGGIO JAVA PER PROGRAMMATORI C++...2 0.1) Caratteristiche principali... 2 0.1.1)

Dettagli

Tipi di Dato Ricorsivi

Tipi di Dato Ricorsivi Tipi di Dato Ricorsivi Luca Abeni September 2, 2015 1 Tipi di Dato Vari linguaggi di programmazione permettono all utente di definire nuovi tipi di dato definendo per ogni nuovo tipo l insieme dei suoi

Dettagli

Eredità in C++ Corso di Linguaggi di Programmazione ad Oggetti 1. a cura di Giancarlo Cherchi

Eredità in C++ Corso di Linguaggi di Programmazione ad Oggetti 1. a cura di Giancarlo Cherchi Eredità in C++ Corso di Linguaggi di Programmazione ad Oggetti 1 a cura di Giancarlo Cherchi 1 Introduzione Il meccanismo dell eredità consente di sfruttare delle relazioni tipo/sottotipo, ereditando attributi

Dettagli

Applicazioni Web a tre livelli

Applicazioni Web a tre livelli Applicazioni Web a tre livelli Filippo Bosi Imola Informatica srl fbosi@imolinfo.it Abstract: In questa presentazione vengono illustrati, attraverso una serie di esempi di codice, concetti e nozioni pratiche

Dettagli

Oggetti Lezione 3. aspetti generali e definizione di classi I

Oggetti Lezione 3. aspetti generali e definizione di classi I Programmazione a Oggetti Lezione 3 Il linguaggio Java: aspetti generali e definizione di classi I Sommario Storia e Motivazioni Definizione di Classi Campi e Metodi Istanziazione di oggetti Introduzione

Dettagli

Candidato: Luca Russo Docente: Prof. Raffaele Montella. 27 Marzo 2013

Candidato: Luca Russo Docente: Prof. Raffaele Montella. 27 Marzo 2013 e di e di Candidato: Luca Russo Docente: Corso di laurea in Informatica Applicata Facoltá di Scienze e Tecnologie Programmazione su Reti 27 Marzo 2013 Traccia d esame Sviluppare multitier con disaccoppiamento

Dettagli

Mappare il DB senza XML. Introduzione alle annotation di Hibernate3

Mappare il DB senza XML. Introduzione alle annotation di Hibernate3 Introduzione alle annotation di Hibernate3 a cura di Lucio Benfante Hibernate Hibernate è un framework che realizza un object/relational mapping (ORM) fra oggetti Java e strutture di un database relazionale

Dettagli

La velocità di una carovana

La velocità di una carovana Programmazione A.A. 2002-03 I linguaggio Java ( Lezione X, Parte I ) Il primo programma Prof. Giovanni Gallo Dr. Gianluca Cincotti Dipartimento di Matematica e Informatica Università di Catania e-mail

Dettagli

IL LINGUAGGIO JAVA: CARATTERISTICHE

IL LINGUAGGIO JAVA: CARATTERISTICHE CHE COS È JAVA È un linguaggio (e relativo ambiente di programmazione) definito dalla Sun Microsystems per permettere lo sviluppo di applicazioni sicure, performanti e robuste su piattaforme multiple,

Dettagli

APPENDICE A Servlet e Java Server Page

APPENDICE A Servlet e Java Server Page APPENDICE A Servlet e Java Server Page A.1 Cosa è una Servlet e come funziona Una servlet è un particolare tipo di applicazione Java, in grado di essere eseguita all'interno di un web server e di estenderne

Dettagli

La gestione dell input/output da tastiera La gestione dell input/output da file La gestione delle eccezioni

La gestione dell input/output da tastiera La gestione dell input/output da file La gestione delle eccezioni La gestione dell input/output da tastiera La gestione dell input/output da file La gestione delle eccezioni Autore: Prof. Agostino Sorbara ITIS "M. M. Milano" Autore: Prof. Agostino Sorbara ITIS "M. M.

Dettagli