Strategie Di Distribuzione. Strategie Di Distribuzione. Dove Separare. Come Separare

Documenti analoghi
JAVA - I/O System. Il JAVA considera tutte i flussi da e verso l esterno, come stream di byte. Questi possono essere di ingresso o di uscita:

domenica 9 giugno 13 Serializzazione

Architetture di rete. 4. Le applicazioni di rete

Serializzazione Java. Serializzazione. Calendario esercitazioni e laboratori. Applicazioni della Serializzazione

Remote Method Invocation

Introduzione ORGANIZZAZIONE DEL LIBRO. Il libro è composto da 12 capitoli organizzati nelle tre parti seguenti:

Serializzazione Java. Serializzazione. Complicazioni 1/2. Complicazioni 2/2. Calendario esercitazioni e laboratori. Applicazioni della Serializzazione

Informazioni sull esame e Regole per lo svolgimento dei progetti

Programmazione Orientata agli Oggetti in Linguaggio Java

PROVA FINALE Ingegneria del software

Verso l architettura MVC-2 i JavaBeans

SETA Selection Tool del Sistema ARTIST

Tipi di Dati Astratti

Corso di Reti di Calcolatori T

18 - Classi parzialmente definite: Classi Astratte e Interfacce

17 - Classi parzialmente definite: Classi Astratte e Interfacce

Conoscere l uso delle collezioni in Java. Conoscere il concetto di Generics (programmazione

Configurazione di una vs. Laboratorio di sistemi interattivi. Dal modello formale all implementazione

JDBC. Paolo Atzeni. 11 marzo Progettazione di applicazioni, una premessa

Applicazioni distribuite e sistemi ad oggetti distribuiti. RPC RMI - Web Services 1

Applicazioni distribuite e sistemi ad oggetti distribuiti

Introduzione a Internet e World Wide Web

Design Pattern Authenticator. Authenticator. Authenticator. Authenticator. User Authenticator AuthenticationInfo login() verify()

JDBC. Marco Tessarotto Programmazione dei Web Server Anno Accademico

EUROPEAN COMPUTER DRIVING LICENCE SYLLABUS VERSIONE 5.0

Tecnologie di Sviluppo per il Web

Corso Programmazione Java Standard

Agenti Mobili in Java RMI

Tecnologie e applicazioni web JSON Web Token (JWT)

Sessione. Stato Del Server. Stato Della Sessione. Design Pattern Client Session State. Un server stateful usa più risorse di un server stateless

Esercizio. Strutture Dati

Serializzazione. Programmazione in Ambienti Distribuiti A.A

LPR 2005/2006 Lezione 7. paradigma di interazione domanda/risposta remote procedure call RMI (Remote Method Invocation): API JAVA esercizio

Esercizi su Java RMI. Progetto di Cliente / Servitore e supporto. Possibile tabella mantenuta dal server

Compute engine generici in RMI

Programmazione a Oggetti Modulo B

Calcolatrice in Java: esempi di DP

Centralizzata Monolitica anni Reti Client Server anni Internet The network is the computer

TECN.PROG.SIST.INF. I Socket Roberta Gerboni

Programmazione M.A. Alberti. Comunicazione digitale AA 2009/ Classi in Java 1. Le classi in Java. Oggetti. Classi. Classi. Visibilità dei dati

A. Lorenzi, A. Rizzi Java. Programmazione ad oggetti e applicazioni Android Istituto Italiano Edizioni Atlas

Sistemi Distribuiti M Proposta di esercizio: Mapping Object-Relational attraverso Hibernate e JPA

Lab 3: TDD Calisthenics

Università degli Studi di Napoli Federico II

ESERCIZIO 1 ESERCIZIO 1

Ingegneria del software - Esame del 10 febbraio 2004 Soluzione. Esercizio 1 (media 6,93 decimi)

Service discovery nella API Java Bluetooth JSR-82

Persistenza e Serializzazione

Variabili e Metodi di classe Interfacce e Package Gestione di File in Java

Laboratorio di Progettazione di Sistemi Software Design Patterns

Variabili e Metodi di classe Interfacce e Package File in Java

A. Ferrari Object Oriented Design

Oggetti Distribuiti e Java RMI

Compute engine generici in RMI

MVC - Principio. MVC Model View Controller. MVC - Terminologia. MVC - Funzionamento. Richiesta. Controller. Model. Risposta. View

Lezione 5 Namespace e JavaDoc

Componenti di un sistema operativo

Fornisce una interfaccia unificata per un insieme di interfacce di un sottosistema, rendendo più facile l uso di quest ultimo.

Programmazione Orientata agli Oggetti in Linguaggio Java

Progettazione Object-Oriented

Corso sul linguaggio Java

XML e Java. Agenda. ITProject Consulting

Fondamenti di Informatica T-1

Programma didattico. Sviluppare Applicazioni Distribuite in ambiente. Spring MVC

Virtualizzazione parziale del livello Transport. ai fini della gestione della mobilità

Fondamenti di Informatica T1 Interfaccia Comparable Collezioni

object oriented design

Comunicazione tra Computer. Protocolli. Astrazione di Sottosistema di Comunicazione. Modello di un Sottosistema di Comunicazione

Programmazione è gestione di eventi

Astrazioni sui dati : Specifica di Tipi di Dato Astratti in Java

Lab 5: TDD Calisthenics

il tipo di parallelismo dipende dal grado di cooperazione

SQL per le applicazioni D B M G

Corso di Sviluppo di applicazioni Web

Laboratorio di Sistemi Distribuiti Leonardo Mariani

SAX e DOM. Analisi di un documento

SQL per le applicazioni D B M G

ODOO può essere installato su Linux, Windows e Macintosh, ma la piattaforma di riferimento indicata da Odoo sa è Linux Ubuntu.

2011 Politecnico di Torino 1

Fondamenti di Programmazione Prof.ssa Elisa Tiezzi. Programmazione orientata a oggetti

Lezione 9 Caratterizzazione di servizi web validi

ISTITUTO CERTIFICATO EN UNI ISO

ESERCIZI JAVA. Esercizi sulle Interfacce. Esercizio 1:

tipi di dato astratti

La Serializzazione in Java. L24_Serialization 1

Java: Definire Classi e Creare Oggetti

Programmazione Java Avanzata. MVC Model, View,, Controller. Ing. Gianluca Caminiti

Corso di Reti di Calcolatori T

Moduli Bluetooth 03 - connessione seriale via BT

Marco Tarini - Università dell'insubria A.A. 2016/17. Università degli Studi dell Insubria Dipartimento di Scienze Teoriche e Applicate

La fase di Progettazione

Lezione 15 programmazione in Java. Nicola Drago Dipartimento di Informatica Università di Verona

Java: un linguaggio per applicazioni di rete

Informatica. Dipartimento di Economia. Ing. Cristiano Gregnanin. 8 novembre Corso di laurea in Economia

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

Il problema è trovare un modo nel quale gli eventi dell oggetto di riferimento, siano comunicati a tutti gli altri interessati.

Applicazioni web. Sommario. Parte 4 http. http Metodi, intestazioni e codici di stato get post Parametri e cookie. Applicazioni web.

Transcript:

Strategie Di Distribuzione Le classi di un applicazione, es. Clienti, Ordini, Prodotti, etc. potrebbero essere distribuite, in modo che ciascun oggetto sia posizionato su un suo host Una chiamata di metodo da un processo su un host ad uno su un altro host è molto più lenta di una chiamata interna allo stesso processo Circa 20.000 ns contro 1 ns (in dipendenza di distanze e tecnologie) Poiché le chiamate remote sono lente, è meglio combinare in una chiamata remota varie operazioni (es. aggiornamento di tanti dati) L interfaccia per un oggetto remoto è differente rispetto a quella per un oggetto locale Un oggetto locale ha un interfaccia fine-grained, segue il principio generale OO di combinare piccole parti e rifinirle in vari modi per estendere la progettazione L interfaccia per un oggetto remoto è coarse-grained Strategie Di Distribuzione La programmazione diventa più difficile con interfacce coarsegrained Se la strategia di distribuzione è basata sulle classi, ci saranno tante chiamate remote, interfacce non appropriate (per cercare di limitare le tante chiamate), e un sistema difficile da modificare Come distribuire quindi efficacemente? Inserire le classi in un singolo processo e replicare il processo su più host. Localmente allo stesso processo si hanno interfacce fine-grained Minimizzare i confini della distribuzione e usare gli host per raggruppamenti di classi 1 2 Dove Separare Un sistema client e server, in cui i pc desktop condividono i dati presenti su un repository, suggerisce una separazione fra processi Una seconda separazione è possibile fra la parte server ed il database Le stored procedures, permettono di eseguire la parte server sul processo del database, ma non è pratico Un altra divisione può esserci fra il web server e l application server. In alcuni casi questi due sono in un singolo processo Package forniti da diversi fornitori potrebbero eseguire in processi diversi Infine, se si hanno buoni motivi si può separare la parte server dell applicazione in più processi Come Separare Quando si progetta un sistema software si devono limitare i confini di distribuzione il più possibile Per progettare un sistema distribuito usando oggetti fine-grained bisogna Usare oggetti fine-grained internamente allo stesso host Mettere oggetti coarse-grained ai confini della distribuzione, il cui solo scopo è fornire un interfaccia remota ad oggetti finegrained Gli oggetti coarse-grained agiscono da Facade per oggetti finegrained. I minimizzano le difficoltà create da interfacce coarse-grained Per trasferire coarse-grained object usare i 3 4

Intento: Fornisce una facciata coarse-grained su oggetti finegrained per migliorare l efficenza sulla rete Design Pattern AddressFacade +getaddressdata() +setaddressdata(street, city, zip) Address +getstreet() +getcity() +getzip() +setstreet(arg) +setcity(arg) +setzip(arg) 5 6 Problema Le chiamate inter-processo sono molto più costose delle chiamate interne al processo, persino sulla stessa macchina La lentezza è dovuta a: scambio dati, check di sicurezza, pacchetti che viaggiano fra switch, latenza di rete Oggetti remoti che presentano interfacce coarse-grained permettono di minimizzare le chiamate ma complicano gli oggetti L effetto sul codice è una minore chiarezza di implementazione (l intenzione della chiamata si perde, il codice si complica per ricevere o trasmettere più dati, etc.), e minore controllo Soluzione Un offre una facciata coarse-grained per oggetti fine-grained Nessuno degli oggetti fine-grained ha un interfaccia remota ed il non contiene logica di dominio Il traduce metodi coarse-grained in oggetti sottostanti fine-grained Il affronta la distribuzione separando responsabilità distinte in oggetti distinti (in accordo a OO) La programmazione diventa più difficile e la produttività rallenta 7 8

Come funziona La logica complessa è inserita in oggetti piccoli che sono progettati per collaborare all interno dello stesso processo. Per permettere un accesso remoto efficiente ad essi, si introduce un facade che agisce come interfaccia remota Tipicamente, un sostituisce i vari metodi get e set con un solo metodo get e un solo metodo set, chiamati bulk accessors Quando un client chiama un bulk setter, il facade legge i dati e chiama i singoli set sul vero oggetto Un può fare da facciata a più oggetti piccoli Un oggetto Address ha metodi fine-grained Un oggetto AddressFacade converte la chiamata getaddressdata() in chiamate fine-grained AppServer AddressFacade Address getaddressdata() getcity() getstate() getzip() 9 10 Per trasferire informazioni in grandi quantità occorre avere altri oggetti a supporto Se il tipo restituito da getaddressdata() è noto ad entrambi i lati della connessione ed è serializzabile, il metodo getaddressdata() crea una copia dell oggetto originale Se questo non si può fare, poiché gli oggetti non sono noti al client, o non si vuole inviare tutto l oggetto, si ricorre al Si progettano i in base alle necessità del client Si hanno pochi per un applicazione, ogni Remote Facade ha tanti metodi a servizio di varie versioni di client (remoti) Il espone un metodo che facilita il client, e più metodi del facade possono avviare lo stesso metodo interno Varie responsabilità possono essere aggiunte al I suoi metodi sono un punto dove poter avviare controlli di sicurezza. Una access control list può dire quali utenti possono fare chiamate su quali metodi Si possono applicare controlli di gestione per le transazioni. Un metodo del facade può avviare la transazione, fare il lavoro interno, quindi fare commit alla fine. Ogni chiamata è una indicazione di una transazione, poiché non si vuol lasciare la transazione aperta quando si ritorna al client (tempi lunghi e imprevisti dovuti alla rete) Il non dovrebbe contenere logica del dominio 11 12

Esempio Esempio Il package dto contiene Data Transfer Objects, che aiutano a trasmettere i dati al client tramite rete. Hanno metodi per l accesso ai dati e possono essere serializzati Il package remote contiene oggetti che passano i dati fra oggetti del dominio e s api interface Service dto client Classi presenti sul lato server interface Service ServiceImpl Service è l interfaccia del e la sua implementazione è ServiceImpl Sull host client vi sono i package: client, api e dto Sull host server vi sono i package: api, dto, remote e domain remote ServiceImpl domain 13 14 public class ServiceImpl implements Service { public get(string id) throws RemoteException { return new ().writedto(registry.find(id)); public String getxml(string id) throws RemoteException { dto = new ().writedto(registry.find(id)); return dto.toxmlstring(); public void create(string id, dto) throws RemoteException { new ().create(id, dto); public void create(string id, String xml) throws RemoteException { dto =.readxmlstring(xml); new ().create(id, dto); Design Pattern public void update(string id, dto) throws RemoteException { new ().update(id, dto); public void update(string id, String xml) throws RemoteException { dto =.readxmlstring(xml); new ().update(id, dto); 15 16

Intento: un oggetto trasporta dati fra processi per ridurre il numero di chiamate a metodo Problema Quando si lavora con una interfaccia remota, come, ciascuna chiamata è costosa. Per ridurre il numero di chiamate si trasferiscono più dati ad ogni chiamata Si possono usare tanti parametri, ma è scomodo, e il parametro di ritorno è un singolo valore Soluzione Creare un (DTO) che tiene tutti i dati della chiamata. Deve essere serializzabile per essere trasmesso. Si usa un oggetto assemblatore per trasferire dati fra il DTO e gli oggetti del dominio Come funziona Un DTO è un oggetto che ha vari campi e metodi getter e setter I campi del DTO sono dati primitivi, classi semplici (String, date), o altri DTO. La struttura fra DTO dovrebbe essere semplice Il DTO porta i dati che l oggetto remoto ha richiesto. In genere, il DTO contiene più di un singolo oggetto lato server In genere, gli oggetti del dominio sono connessi fra loro e impossibili da serializzare Il DTO è progettato per un particolare client, spesso corrisponde ai dati presenti nelle pagine web Ci possono essere più DTO corrispondenti a richieste diverse, e alle risposte, dipende dai dati in comune che passano (o richiedono) le diverse richieste 17 18 Oltre ai metodi di accesso, un è responsabile per la serializzazione di sé stesso in qualche formato Il formato dipende da chi è presente nei due lati della connessione, da cosa può viaggiare in rete, da quanto è facile serializzare Java ha il supporto per la serializzazione in binario Si può serializzare in XML Si può implementare il proprio meccanismo di serializzazione, a partire da una semplice descrizione del record. Si può usare la riflessione computazionale per gestire la serializzazione Una serializzazione in binario rende fragile la comunicazione: un aggiornamento del server (che aggiunge o toglie un campo al DTO) che non corrisponde ad un aggiornamento del client, provoca un errore di deserializzazione La serializzazione in XML può essere scritta in modo che le classi siano più tolleranti ai cambiamenti public class { private String title; private String artist; -title: String private String[] tracks; public String gettitle() { +gettitle(): String return title; +get(): +gets() public void settitle(string title) { this.title = title; public String get() { return artist; +gettitle():string public void set(string artist) { this.artist = artist; -title: String public String[] gets() { -artist: String return tracks; -tracks: String[] -name: String public void sets(string[] tracks) { +getname(): String this.tracks = tracks; public class { public writedto( subject) { result = new (); result.set(subject.get().getname()); result.settitle(subject.gettitle()); List<String> tracklist = new ArrayList<>(); for ( t : subject.gets()) tracklist.add(t.gettitle()); result.sets((string[]) tracklist.toarray()); return result; 19 20