Programmazione distribuita in Java. da materiale di Carlo Ghezzi e Alfredo Mo:a

Dimensione: px
Iniziare la visualizzazioe della pagina:

Download "Programmazione distribuita in Java. da materiale di Carlo Ghezzi e Alfredo Mo:a"

Transcript

1 Programmazione distribuita in Java da materiale di Carlo Ghezzi e Alfredo Mo:a

2 Obie<vo Poter allocare computazioni su nodi fisici diversi e consen@re il coordinamento tra le computazioni sui diversi nodi

3 Nodi fisici e nodi logici Occorre dis@nguere tra nodi fisici e logici Può essere opportuno proge:are ignorando all inizio il nodo fisico in cui un nodo logico sarà allocato Java consente addiri:ura di vedere tu:o a:raverso la nozione di ogge< e di invocazione di metodi, dove l invocazione può essere remota

4 Archite:ura client- server È il modo classico di proge:are applicazioni distribuite su rete Server offre un servizio centralizzato a:ende che altri (client) lo conta<no per fornire il proprio servizio Client si rivolge ad apposito/i server per o:enere servizi

5 Middleware Per programmare un sistema distribuito vengono servizi (di sistema) specifici, come estensione del sistema Il middleware viene posto tra il sistema e le applicazioni In Java il middleware fa parte del linguaggio, diversamente da altri middleware (es. CORBA)

6 Middleware

7 Socket in Java Client e server comunicano (pacche< TCP) a:raverso socket Package java.net, classi: Socket, ServerSocket DatagramSocket (UDP): non considera@ in questo corso socket client socket server Endpoint individua@ da: indirizzo IP numero di porta

8 Socket (dal tutorial Java) A socket is one endpoint of a two- way communica@on link between two programs running on the network A socket is bound to a port number so that the TCP layer can iden@fy the applica@on that data is des@ned to be sent to

9 Comunicazione client- server 2 1 3

10 A:esa connessione (lato server) Creare un istanza della classe java.net.serversocket specificando il numero di porta su cui rimanere in ascolto ServerSocket sc = new ServerSocket(4567); Chiamare il metodo accept() che fa in modo che il server rimanga in ascolto di una richiesta di connessione (la porta non deve essere già in uso) Socket s = sc.accept(); Quando il metodo completa la sua esecuzione la connessione col client è stabilita e viene res@tuita un istanza di java.net.socket connessa al client remoto

11 Aprire connessione (lato client) Aprire un socket specificando l indirizzo IP e numero di porta del server Socket sc = new Socket( , 4567); Il numero di porta è compreso fra 1 e Le porte inferiori a 1024 sono riservate a servizi standard All indirizzo e numero di porta specifica@ ci deve essere in ascolto un processo server Socket ss = serversocket.accept(); Se la connessione ha successo si usano (sia dal lato client che dal lato server) gli stream associa@ al socket per perme:ere la comunicazione tra client e server (e viceversa) Scanner in = new Scanner(sc.getInputStream()); PrintWriter out = new PrintWriter(sc.getOutputStream());

12 Chiusura connessioni Per chiudere un ServerSocket o un Socket si u@lizza il metodo close() Per ServerSocket, close() fa terminare la accept() con IOExcep@on Per Socket, close() fa terminare le operazioni di le:ura o scri:ura del socket con eccezioni che dipendono di reader/writer u@lizzato Sia ServerSocket sia Socket hanno un metodo isclosed() che res@tuisce vero se il socket è stato chiuso

13 EchoServer Si crei un server che acce:a connessioni TCP sulla porta 1337 Una volta acce:ata la connessione il server leggerà ciò che viene scri:o una riga alla volta e ripeterà nella stessa connessione ciò che è stato scri:o Se il server riceve una riga quit chiuderà la connessione e terminerà l esecuzione

14 EchoServer public class EchoServer { private int port; private ServerSocket serversocket; public EchoServer(int port) { this.port = port; public static void main(string[] args) { EchoServer server = new EchoServer(1337); try { server.startserver(); catch (IOException e) { System.err.println(e.getMessage());

15 public void startserver() throws IOException { // apro una porta TCP serversocket = new ServerSocket(port); System.out.println("Server socket ready on port: " + port); // resto in attesa di una connessione Socket socket = serversocket.accept(); System.out.println("Received client connection"); // apro gli stream di input e output per leggere e scrivere // nella connessione appena ricevuta Scanner in = new Scanner(socket.getInputStream()); PrintWriter out = new PrintWriter(socket.getOutputStream()); // leggo e scrivo nella connessione finche' non ricevo "quit" while (true) { String line = in.nextline(); if (line.equals("quit")) { break; else { out.println("received: " + line); out.flush(); // chiudo gli stream e il socket System.out.println("Closing sockets"); in.close(); out.close(); socket.close(); serversocket.close(); E fondatamentale richiamare flush() per assicurarsi di scaricare il buffer (il suo contenuto verrà effe<vamente spedito al des@natario)

16 LineClient Si crei un client che si colleghi, con protocollo TCP, alla porta 1337 dell indirizzo IP Una volta stabilita la connessione il client legge una riga alla volta dallo standard input e invia il testo digitato al server Il client inoltre stampa sullo standard output le risposte o:enute dal server Il client deve terminare quando il server chiude la connessione

17 LineClient public class LineClient { private String ip; private int port; public LineClient(String ip, int port) { this.ip = ip; this.port = port; public static void main(string[] args) { LineClient client = new LineClient(" ", 1337); try { client.startclient(); catch (IOException e) { System.err.println(e.getMessage());

18 public void startclient() throws IOException { Socket socket = new Socket(ip, port); System.out.println("Connection established"); Scanner socketin = new Scanner(socket.getInputStream()); PrintWriter socketout = new PrintWriter(socket.getOutputStream()); Scanner stdin = new Scanner(System.in); try { while (true) { String inputline = stdin.nextline(); socketout.println(inputline); socketout.flush(); String socketline = socketin.nextline(); System.out.println(socketLine); catch(nosuchelementexception e) { System.out.println("Connection closed"); finally { stdin.close(); socketin.close(); socketout.close(); socket.close();

19 Archite:ura del server Il server che abbiamo visto acce:a una sola connessione (da un solo client) Un server dovrebbe essere in grado di acce:are connessioni da diversi client e di dialogare con ques@ contemporaneamente Idea: server mul@- thread All interno del processo Server far eseguire l istruzione accept() in un nuovo thread In questo modo è possibile acce:are più client contemporaneamente

20 EchoServer thread la logica che la comunicazione con il client in una nuova classe ClientHandler che implementa Runnable La classe principale del server si occupa solo di istanziare il ServerSocket, eseguire la accept() e di creare i thread necessari per ges@re le connessioni acce:ate La classe ClientHandler si occupa di ges@re la comunicazione con il client associato al socket assegnato

21 public class MultiEchoServer { private int port; public MultiEchoServer(int port) { this.port = port; public void startserver() { ExecutorService executor = Executors.newCachedThreadPool(); ServerSocket serversocket; try { serversocket = new ServerSocket(port); catch (IOException e) { System.err.println(e.getMessage()); // porta non disponibile return; System.out.println("Server ready"); while (true) { try { Socket socket = serversocket.accept(); executor.submit(new EchoServerClientHandler(socket)); catch(ioexception e) { break; // entrerei qui se serversocket venisse chiuso executor.shutdown(); public static void main(string[] args) { MultiEchoServer echoserver = new MultiEchoServer(1337); echoserver.startserver(); EchoServer mul@- thread

22 public class EchoServerClientHandler implements Runnable { private Socket socket; public EchoServerClientHandler(Socket socket) { this.socket = socket; public void run() { try { Scanner in = new Scanner(socket.getInputStream()); PrintWriter out = new PrintWriter(socket.getOutputStream()); // leggo e scrivo nella connessione finche' non ricevo "quit" while (true) { String line = in.nextline(); if (line.equals("quit")) { break; else { out.println("received: " + line); out.flush(); // chiudo gli stream e il socket in.close(); out.close(); socket.close(); catch (IOException e) { System.err.println(e.getMessage()); EchoServer mul@- thread

23 Serializzazione

24 Le basi della serializzazione La serializzazione è un processo che trasforma un ogge:o in memoria in uno stream di byte La de- serializzazione è il processo inverso Ricostruisce un ogge:o Java da uno stream di byte e lo riporta nello stesso stato nel quale si trovava quando è stato serializzato

25 Le basi della serializzazione Solo le istanze delle classi possono essere serializzate primi@vi non possono essere serializza@ Affinché sia possibile serializzare un ogge:o, la sua classe o una delle sue superclassi deve implementare l interfaccia Serializable L interfaccia Serializable è un interfaccia vuota u@lizzata solo come metodo per marcare un ogge:o che può essere serializzato Per serializzare/de- serializzare un ogge:o basta scriverlo dentro un ObjectOutputStream/ObjectInputStream Per scrivere/leggere primi@vi u@lizzare i metodi della DataOutput/DataInput interface implementa@ da ObjectOutputStream/ObjectInputStream

26 Serializzazione Le basi della serializzazione FileOutputStream out = new FileOutputStream( save.ser ); ObjectOutputStream oos = new ObjectOutputStream( out ); oos.writeobject( new Date() ); oos.close(); De-Serializzazione FileInputStream in = new FileInputStream( save.ser ); ObjectInputStream ois = new ObjectInputStream( in ); Date d = (Date) ois.readobject(); ois.close();

27 Metodo di encoding Il metodo di encoding standard di Java Traduce i campi dell ogge:o in uno stream di byte Tipi primi@vi Ogge< non- transient e non- sta@c Per ques@ ul@mi si applica lo stesso processo di serializzazione non-transient obj2 transient obj3 serializable obj1 not serializable non-transient obj3

28 Metodo di encoding La serializzazione fallisce se almeno uno degli ogge< al grafo dei non- transient non è serializzabile E possibile intervenire su questo comportamento ridefinendo cer@ campi come transient oppure ridefinendo la procedura di serializzazione per un di ogge:o non-transient obj2 non-transient obj3 serializable obj1 not serializable non-transient obj3

29 Metodo di encoding Dato un OutputStream e un insieme di ogge< che devono essere serializza@ Java assegna un iden@fica@vo univoco ad ogni ogge:o Se l ogge:o è già stato serializzato (perché presente come riferimento in uno degli ogge< preceden@) non viene serializzato nuovamente Nell esempio che segue salvando obj1 e obj2 su uno stesso stream, obj3 verrà serializzato una sola volta Ma se serializziamo obj1 e obj2 su due stream diversi, allora quando leggeremo ci ritroveremo con due istanze diverse di obj3 obj1 obj2 obj1 obj2 obj3 obj3 obj3 bis

30 Serializzazione ed ereditarietà Se una classe serializzabile C ha una super- classe non- serializzabile S, le istanze di C possono comunque essere serializzate se S ha un costru:ore vuoto accessibile dalla so:oclasse Il costru:ore senza argomen@ di S viene invocato automa@camente durante la deserializzazione di C in modo da costruire la parte rela@va ad S nell ogge:o che s@amo deserializzando

31 Personalizzare la serializzazione Il processo di serializzazione e di deserializzazione può essere personalizzato in due modi: Implementando i metodi writeobject(objectoutputstream oos) e readobject(objectinputstream ois) devono essere dichiara@ come private verranno invoca@ da ObjectOutputStream e ObjectInputStream durante il processo di serializzazione/ deserializzazione mediante reflec@on Implementando l interfaccia Externalizable E quindi i metodi readexternal(objectinput in) e writeexternal(objectoutput out) per leggere e scrivere il proprio stato da/su uno stream

32 Esempio class SessionDTO implements Serializable { private static final long serialversionuid = 1L; private transient int data; // Stores session data //Session activation time (creation, deserialization) private transient long activationtime; public SessionDTO(int data) { this.data = data; this.activationtime = System.currentTimeMillis(); private void writeobject(objectoutputstream oos) throws IOException { oos.defaultwriteobject(); oos.writeint(data); System.out.println("session serialized"); private void readobject(objectinputstream ois) throws IOException, ClassNotFoundException { ois.defaultreadobject(); data = ois.readint(); activationtime = System.currentTimeMillis(); System.out.println("session deserialized"); public int getdata() { return data; public long getactivationtime() { return activationtime;

33 RMI Remote Method da materiale di Carlo Ghezzi e Alfredo Mo:a

34 L idea alla base di tu:a la programmazione distribuita è semplice Un client esegue una determinata richiesta Tale richiesta viaggia lungo la rete verso un determinato server Il server processa la richiesta e manda indietro la risposta al client per essere analizzata Con i socket però dobbiamo ges@re personalmente il formato dei messaggi e la ges@one della connessione Verso RMI

35 Verso RMI Quello che cerchiamo è un meccanismo con il quale il programmatore del client esegue una normale chiamata a metodo senza preoccuparsi che c è una rete di mezzo Per farlo la soluzione tecnologica è quella di installare un proxy sul client Il proxy appare al client come un normale ogge:o ma maschera tu:o il processo di u@lizzo della rete per eseguire il metodo sul server Allo stesso modo il programmatore che implementa il servizio non vuole preoccuparsi della ges@one della comunicazione con il client e per questo installa anche lui un proxy sul server Il proxy del server comunica con il proxy del client creando un livello di astrazione al programmatore che non vede la rete

36 Verso RMI

37 Le basi di RMI Ogge:o remoto Ogge:o i cui metodi possono essere invoca@ da una Java Virtual Machine diversa da quella in cui l ogge:o risiede Interfaccia Remota Interfaccia che dichiara quali sono i metodi che possono essere invoca@ da una diversa Java Virtual Machine Server Insieme di uno o più ogge< remo@ che, implementando una o più interfacce remote, offrono delle risorse (da@ e/o procedure) a macchine esterne distribuite sulla rete Remote Method Invoca@on (RMI) Invocazione di un metodo presente in una interfaccia remota implementata da un ogge:o remoto La sintassi di una invocazione remota è iden@ca a quella locale

38 Archite:ura interna Il client colloquia con un proxy locale del server, de:o stub lo stub rappresenta il server sul lato client implementa l'interfaccia del server è capace di fare forward di chiamate di metodi il client ha un riferimento locale all ogge:o stub Esiste anche un proxy del client sul lato server, de:o skeleton è una rappresentazione del client chiama i servizi del server sa come fare forward dei risulta@ lo skeleton ha un riferimento all'ogge:o

39 Archite:ura interna

40 RMI Registry Il registro RMI si occupa di fornire al client lo Stub richiesto In fase di registrazione il server potrà fornire un nome canonico per il proprio ogge:o remoto Il client potrà quindi o:enere lo stub il nome che gli è stato assegnato

41 Scaricare lo Stub Il registro RMI per spedire lo stub al client ha diverse opzioni Se il client e il server risiedono sulla stessa macchina è possibile indicare al client il path locale per lo stub Se il client e il server risiedono su macchine differen@ è necessario u@lizzare un server HTTP per perme:ere al registro di spedire lo stub

42 Riassumendo Lato client Viene richiesto a un registro RMI lo stub per l invocazione di un determinato ogge:o remoto I parametri in ingresso all invocazione remota vengono serializza@ (tale processo è chiamato marshalling) L invocazione remota viene inviata al server Lato server Il server localizza l ogge:o remoto che deve essere invocato Chiama il metodo desiderato passandogli i parametri ricevu@ dal client Ca:ura il valore di ritorno o le eventuali eccezioni Spedisce allo stub del client un pacche:o contenente i da@ ritorna@ dal metodo

43 Running Example Vogliamo realizzare un applicazione che un magazzino (Warehouse) Il magazzino un insieme di prodo< e ogni prodo:o è iden@ficato da: Una stringa che iden@fica il prodo:o Un prezzo

44 Interfaccia condivisa client- server L ogge:o remoto Warehouse definisce l interfaccia tra client e server Estende la Remote interface di Java Richiede la ges@one di eventuali RemoteExcep@on nel caso in cui ci fossero errori di rete

45 Interfaccia condivisa client- server import java.rmi.*; Interfaccia condivisa dal client e dal server. Entrambi sanno che si tra:a di un interfaccia remota public interface Warehouse extends Remote { double getprice(string description) throws RemoteException; I client saranno costre< a ges@re gli errori che possono sorgere durante l invocazione di un ogge:o remoto

46 Warehouse Server Il server implementa l interfaccia remota Estende la classe UnicastRemoteObject che rende l ogge:o accessibile da remoto

47 import java.rmi.*; import java.rmi.server.*; import java.util.*; Warehouse Server public class WarehouseImpl extends UnicastRemoteObject implements Warehouse { private Map<String, Double> prices; public WarehouseImpl() throws RemoteException { prices = new HashMap<String, Double>(); prices.put("blackwell Toaster", 24.95); prices.put("zapxpress Microwave Oven", 49.95); Rende l ogge:o accessibile da remoto public double getprice(string description) throws RemoteException { Double price = prices.get(description); return price == null? 0 : price; Definisco l implementazione lato server dell interfaccia definita precedentemente

48 Warehouse Server import java.rmi.*; import java.rmi.server.*; import java.util.*; Definisco l implementazione lato server dell interfaccia definita precedentemente public class WarehouseImpl implements Warehouse { public WarehouseImpl() throws RemoteException { prices = new HashMap<String, Double>(); prices.put("blackwell Toaster", 24.95); prices.put("zapxpress Microwave Oven", 49.95); UnicastRemoteObject.exportObject(this, 0); Rende l ogge:o accessibile da remoto (soluzione alterna@va) public double getprice(string description) throws RemoteException { Double price = prices.get(description); return price == null? 0 : price; private Map<String, Double> prices;

49 Pubblicare l ogge:o remoto (1) All avvio il server pubblica sul registro RMI l ogge:o remoto In questo modo il client potrà cercare gli ogge< remo@ disponibili e o:enere un riferimento Il registro RMI deve essere online prima di avviare il server (vedremo come lanciarlo) Di default il registro si trova in localhost sulla porta 1099 WarehouseImpl centralwarehouse = new WarehouseImpl(); Registry registry = LocateRegistry.getRegistry(); registry.bind("central_warehouse", centralwarehouse); S@amo facendo un binding tra il nome central_warehouse e l ogge:o remoto centralwarehouse

50 Pubblicare l ogge:o remoto (2) import java.rmi.*; import javax.naming.*; public class WarehouseServer { public static void main(string[] args) throws RemoteException, NamingException { System.out.println("Constructing server implementation..."); WarehouseImpl centralwarehouse = new WarehouseImpl(); System.out.println("Binding server implementation to registry..."); Registry registry= LocateRegistry.getRegistry(); registry.bind( central_warehouse", centralwarehouse); System.out.println("Waiting for invocations from clients...");

51 Note tecniche su bind() Per ragioni di sicurezza un applicazione può associare, deassociare o riassociare un ogge:o a un nome solo se l applicazione gira sullo stesso host del registro Questo evita che client malevoli cambino le informazioni del registro I client possono comunque fare un lookup degli ogge< String[] remoteobjects = registry.list();

52 Note tecniche sul registro Il registro è anch esso un ogge:o remoto Il metodo bind() all interfaccia remota implementata dal registro, infa< void bind(string name, Remote obj) throws RemoteException, AlreadyBoundException, AccessException; I parametri della chiamata dovranno essere serializza@/deserializza@ Il registro scaricherà a run@me la definizione dell interfaccia remota (nel nostro caso Warehouse) per serializzare l ogge:o che gli s@amo passando

53 Warehouse Client Lato client possiamo o:enere un riferimento al nostro stub con questo codice, purché: Il registro sia online L ogge:o remoto sia stato già pubblicato dal server String remoteobjectname = "central_warehouse"; Warehouse centralwarehouse = (Warehouse) registry.lookup(remoteobjectname); Notare il cas@ng a Warehouse Perché non usiamo WarehouseImpl? Client e Server hanno in comune solo Warehouse, l interfaccia remota Il client non sa nemmeno cosa sia WarehouseImpl

54 Warehouse Client import java.rmi.*; import java.util.*; import javax.naming.*; public class WarehouseClient { public static void main(string[] args) throws NamingException, RemoteException { Registry registry= LocateRegistry.getRegistry(); System.out.print("RMI registry bindings: "); String[] e = registry.list(); for (int i=0; i<e.legth; i++) System.out.println(e[i]); String remoteobjectname = "central_warehouse"; Warehouse centralwarehouse = (Warehouse) registry.lookup(remoteobjectname); String descr = "Blackwell Toaster"; double price = centralwarehouse.getprice(descr); System.out.println(descr + ": " + price);

55 Deployare l applicazione RMI Cosa ci serve per far par@re il tu:o Avviamo il server HTTP per perme:ere al registro RMI di recuperare la definizione delle nostre interfacce remote Avviamo il registro RMI Per perme:ere al client di trovare gli ogge< remo@ pubblica@ dal nostro server Avviamo il server All avvio il server registrerà l ogge:o remoto Warehouse Il registro RMI scarica la definizione dell interfaccia remota dal server HTTP Avviamo il client Per vedere finalmente l output della nostra applicazione

56 Se<ngs (1) Sulla macchina server avremo server/ WarehouseServer.class WarehouseImpl.class download/ Warehouse.class Sulla macchina client avremo client/ WarehouseClient.class

57 Se<ngs (2) In fase di bind il registro RMI ha quindi bisogno di accedere alla definizione delle interfacce remote I file.class solitamente vengono distribui@ con un normale web server Nel nostro esempio il server deve rendere disponibile il file WareHouse.class Scarichiamo quindi NanoHTTPD web server Un mini- server web la cui implementazione è contenuta tu:a in NanoHTTPD.java Dopo aver compilato il server dovremmo trovarci nella seguente situazione download/ Warehouse.class NanoHTTPD.class

58 Avviamo l HTTP Server Avviamo il server HTTP in localhost sulla porta 8080 Per verificare che tu:o funzioni proviamo ad accedere all indirizzo h:p://localhost:8080 via browser Tale indirizzo verrà poi u@lizzato dal server per dichiarare la loca@on della codebase rmi property (vedi slide Avviamo il server) $ java download/nanohttpd 8080

59 Avviamo il registro RMI Su Linux e Osx $ rmiregistry Su Windows $ start rmiregistry In generale è necessario che l eseguibile rmiregistry sia presente nel nostro path rmiregistry viene distribuito con Java, lo trovate quindi nella sua cartella di installazione

60 Avviamo il Server Andiamo nella directory del server e digi@amo $ java WarehouseServer Cosa vediamo? Constructing server implementation... Binding server implementation to registry... Exception in thread "main" javax.naming.communicationexception [Root exception is java.rmi.serverexception: RemoteException occurred in server thread; nested exception is: java.rmi.unmarshalexception: error unmarshalling arguments; nested exception is: java.lang.classnotfoundexception: Warehouse] at com.sun.jndi.rmi.registry.registrycontext.bind(registrycontext.java:143) at com.sun.jndi.toolkit.url.genericurlcontext.bind(genericurlcontext.java:226) at javax.naming.initialcontext.bind(initialcontext.java:419) at WarehouseServer.main(WarehouseServer.java:13)

61 Avviamo il Server Andiamo nella directory del server e digi@amo $ java -Djava.rmi.server.codebase= WarehouseServer L opzione - Djava.rmi.server.codebase server a specificare l URL dove si trovano I file.class che servono al registro RMI Quando eseguite questo comando date un occhiata al terminale dove sta girando NanoHTTPD Vedrete un messaggio che fa vedere la richiesta del registro RMI interessato al file WareHouse.class

62 Nota tecnica Dopo aver avviato il server la console resta in esecuzione Se guardiamo il codice del server questo potrebbe sembrarci strano Il programma ha solo creato un ogge:o WarehouseImpl e l ha registrato sul RMI registry La spiegazione è che quando creiamo un ogge:o UnicastRemoteObject viene creato un thread separato vivo il programma Questa funzione è necessaria per assolvere alla funzione di server

63 Avviamo il client Infine apriamo una quarta console, andiamo nella cartella contenente i file del client e digi@amo $ java WarehouseClient Questo completa la nostra prima applicazione RMI

64 Loggare la nostra applicazione Viste le immense difficoltà che un applicazione distribuita comporta può essere molto loggare la nostra applicazione Nel caso più semplice basta avviare il server con l opzione Djava.rmi.server.logCalls=true Tu:e le chiamate RMI ed eventuali eccezioni verranno salvate in System.err

65 Server HTTP un Se vogliamo deployare la nostra applicazione senza usare un server HTTP basta avviare il server con la seguente opzione Djava.rmi.server.codebase=file:/path/to/classDir/ Lo slash finale è importante Questa soluzione è o<male nei nostri di test dove il registro RMI e il client risiedono effe<vamente sulla stessa macchina del server

66 Passaggio di ogge< Un ogge:o non- remoto (passato come parametro, o res@tuito come risultato da un metodo remoto) è passato per copia Ovvero serializzato, scri:o nello stream, e ricaricato all altro estremo dello stream, ma come ogge:o differente Modificare quindi un ogge:o ricevuto mediante invocazione remota non ha alcun effe:o sull istanza originale di chi l ha inviato Un ogge:o remoto (già esportato, passato come parametro, o res@tuito come risultato da un metodo remoto) è passato mediante il suo stub Ogge< remo@ non esporta@ non verranno sos@tui@ dal loro stub corrispondente Un ogge:o remoto passato come parametro può solo implementare interfacce remote

67 Integrity Se due ad un ogge:o sono da una JVM ad un altra una singola chiamata remota, punteranno allo stesso ogge:o anche nella JVM ricevente All interno di una stessa chiamata remota il sistema RMI la integrity tra gli ogge< come parametro o come valori di ritorno obj1 obj2 Caso (1) remoteobject.remotemethodtwoparameters(obj1, obj2); obj3 Caso (2) remoteobject.remotemethodoneparameter(obj1); remoteobject.remotemethodoneparameter(obj2);

68 Concorrenza La specifica RMI prevede che il server possa eseguire le invocazioni dei metodi in modalità threaded I metodi espos@ a chiamate remote devono essere thread- safe Ges@re la concorrenza è a carico del programmatore

69 Dynamic Class Loading Mediante il Dynamic Class Loading in Java è possibile caricare a run@me la definizione di classi Java Questa cara:eris@ca è usata con RMI Il client può ricevere da parte del server delle classi sconosciute per le quali è necessario scaricare la definizione corrispondente (file.class) Vediamo con un esempio pra@co un caso d uso di questa tecnologia

70 Warehouse V2 Vogliamo modificare il nostro proge:o Warehouse affinché cerchi un determinato prodo:o sul server sulla base di una lista di keyword e non più semplicemente grazie alla descrizione del prodo:o Ecco l interfaccia remota aggiornata: import java.rmi.*; import java.util.*; public interface Warehouse extends Remote { double getprice(string description) throws RemoteException; Product getproduct(list<string> keywords) throws RemoteException;

71 Stru:ura proge:o Il proge:o è diviso in tre compila(on unit Server e Client dipendono entrambi dalla definizione delle interfacce condivise Warehouse è l interfaccia dell ogge:o remoto Product è richiesto da Warehouse server/ WarehouseServer.class WarehouseImpl.class Book.class <<dependency>> download/ Warehouse.class Product.class client/ WarehouseClient.class <<dependency>>

72 Workflow dell applicazione Il client una lista di stringhe per cercare un prodo:o Il prodo:o ritornato avrà un riferimento remoto alla Warehouse

73 La classe Product import java.io.*; public class Product implements Serializable { private String description; private double price; private Warehouse location; public Product(String description, double price) { this.description = description; this.price = price; public String getdescription() { return description; public double getprice(){ return price; public Warehouse getlocation() { return location; public void setlocation(warehouse location) { this.location = location; Questa classe sarà presente sia sul client che sul server Stabilisce cosa è un prodo:o e che funzionalità offre Non è un ogge:o remoto ma è serializzabile Il server dovrà inviare i prodo< al client

74 La classe Book public class Book extends Product { public Book(String title, String isbn, double price) { super(title, price); this.isbn = isbn; public String getdescription() { return super.getdescription() + " " + isbn; private String isbn;

75 WarehouseImpl public class WarehouseImpl extends UnicastRemoteObject implements Warehouse { private Map<String, Product> products; private Product backup; public WarehouseImpl(Product backup) throws RemoteException { products = new HashMap<String, Product>(); this.backup = backup; public void add(string keyword, Product product){ product.setlocation(this); products.put(keyword, product); public double getprice(string description) throws RemoteException { for (Product p : products.values()) if (p.getdescription().equals(description)) return p.getprice(); if (backup == null) return 0; else return backup.getprice(description); public Product getproduct(list<string> keywords) throws RemoteException { for (String keyword : keywords){ Product p = products.get(keyword); if (p!= null) return p; return backup;

76 WarehouseServer import java.rmi.*; import javax.naming.*; public class WarehouseServer { public static void main(string[] args) throws RemoteException, NamingException { System.out.println("Constructing server implementation..."); WarehouseImpl centralwarehouse = new WarehouseImpl( new Book( BackupBook", ", 66.99)); centralwarehouse.add("toaster", new Product("Blackwell Toaster", 23.95)); System.out.println("Binding server implementation to registry..."); Registry registry= LocateRegistry.getRegistry(); registry.bind( central_warehouse", centralwarehouse); System.out.println("Waiting for invocations from clients...");

77 WarehouseClient import java.rmi.*; import java.util.*; import javax.naming.*; import java.util.arraylist; public class WarehouseClient { public static void main(string[] args) throws NamingException, RemoteException { Context namingcontext = new InitialContext(); System.setProperty("java.security.policy", "client.policy"); System.setSecurityManager(new SecurityManager()); System.out.print("RMI registry bindings: "); Enumeration<NameClassPair> e = namingcontext.list("rmi://localhost/"); while (e.hasmoreelements()) System.out.println(e.nextElement().getName()); String url = "rmi://localhost/central_warehouse"; Warehouse centralwarehouse = (Warehouse) namingcontext.lookup(url); ArrayList<String> l=new ArrayList<String>(); l.add("toaster"); Product p=centralwarehouse.getproduct(l); System.out.println("Description: " + p.getdescription()); A run@me possiamo ricevere un book! Ma come fa il client a conoscerlo? Book è stato compilato solamente sul server

78 Dynamic Class Loading Il nostro server torna dei prodo< sulla base delle keyword che ha inviato il client Tu:avia se il prodo:o non è presente si è deciso di tornare un ogge:o di backup in questo caso un ogge:o Book che estende Product Ma il client non ha idea di cosa sia un Book Book non è stato inserito tra le dipendenze del Client Quando abbiamo compilato il client Book non era richiesto (vedi la stru:ura del proge:o)

79 Dynamic Class Loading Il server comunica l URL della codebase al client Mediante l a:ributo java.rmi.server.codebase Il client conta:a quindi il server h:p e scarica il file Book.class in modo da poter eseguire il suo codice Tu:o questo avviene in maniera trasparente

80 Dynamic Class Loading e Security Policy Il Dynamic Class Loading richiede la definizione di alcune policy di sicurezza eseguire un file.class scaricato dall esterno non è sicuramente il massimo Non approfondiremo la scri:ura di una policy Tale policy va indicata nel codice sorgente di chi esegue il caricamento di classi a run@me

81 WarehouseClient import java.rmi.*; import java.util.*; import javax.naming.*; import java.util.arraylist; public class WarehouseClient { public static void main(string[] args) throws NamingException, RemoteException { Context namingcontext = new InitialContext(); System.setProperty("java.security.policy", "client.policy"); System.setSecurityManager(new SecurityManager()); System.out.print("RMI registry bindings: "); Enumeration<NameClassPair> e = namingcontext.list("rmi://localhost/"); while (e.hasmoreelements()) System.out.println(e.nextElement().getName()); String url = "rmi://localhost/central_warehouse"; Warehouse centralwarehouse = (Warehouse) namingcontext.lookup(url); ArrayList<String> l=new ArrayList<String>(); l.add("toaster"); Product p=centralwarehouse.getproduct(l); System.out.println("Description: " + p.getdescription());

82 import java.rmi.*; import javax.naming.*; WarehouseServer public class WarehouseServer{ public static void main(string[] args) throws RemoteException, NamingException { System.setProperty("java.security.policy", "server.policy"); System.setSecurityManager(new SecurityManager()); System.out.println("Constructing server implementation..."); WarehouseImpl centralwarehouse = new WarehouseImpl( new Book( BackupBook", ", 66.99)); centralwarehouse.add("toaster", new Product("Blackwell Toaster", 23.95)); System.out.println("Binding server implementation to registry..."); Context namingcontext = new InitialContext(); namingcontext.bind("rmi:central_warehouse", centralwarehouse); System.out.println("Waiting for invocations from clients...");

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

Programmazione distribuita in Java. da materiale di Carlo Ghezzi e Alfredo Motta

Programmazione distribuita in Java. da materiale di Carlo Ghezzi e Alfredo Motta Programmazione distribuita in Java da materiale di Carlo Ghezzi e Alfredo Motta Obiettivo Poter allocare computazioni su nodi fisici diversi, in modo trasparente, e consentire il coordinamento tra le computazioni

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

Programmazione distribuita in Java. da materiale di Carlo Ghezzi e Alfredo Motta

Programmazione distribuita in Java. da materiale di Carlo Ghezzi e Alfredo Motta Programmazione distribuita in Java da materiale di Carlo Ghezzi e Alfredo Motta Obiettivo Poter allocare computazioni su machine diverse, in modo trasparente, e consentire il coordinamento tra esse Nodi

Dettagli

RMI Remote Method Invocation. da materiale di Carlo Ghezzi e Alfredo Motta

RMI Remote Method Invocation. da materiale di Carlo Ghezzi e Alfredo Motta RMI Remote Method Invocation da materiale di Carlo Ghezzi e Alfredo Motta L idea alla base di tutta la programmazione distribuita è semplice Un client esegue una determinata richiesta Tale richiesta viaggia

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

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

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

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

(VHUFLWD]LRQLGLEDVHVXOOH6RFNHWLQ-DYD 6RFNHWGLWLSRVWUHDP

(VHUFLWD]LRQLGLEDVHVXOOH6RFNHWLQ-DYD 6RFNHWGLWLSRVWUHDP (VHUFLWD]LRQLGLEDVHVXOOH6RFNHWLQ-DYD 6RFNHWGLWLSRVWUHDP D (FKR&OLHQWH6HUYHU Sviluppare un applicazione C/S in cui: il server attende una connessione da parte del client (su MDYDQHW6HUYHU6RFNHW), usa la

Dettagli

ProgettAzione tecnologie in movimento - V anno Unità 4 - Realizzare applicazioni per la comunicazione in rete

ProgettAzione tecnologie in movimento - V anno Unità 4 - Realizzare applicazioni per la comunicazione in rete ProgettAzione tecnologie in movimento - V anno Unità 4 - Realizzare applicazioni per la comunicazione in rete Compito in classe proposto Realizzare un applicazione C/S per trasferire al Client il contenuto

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

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

Chat. Si ha un server in ascolto sulla porta 4444. Quando un client richiede la connessione, il server risponde con: Connessione accettata.

Chat. Si ha un server in ascolto sulla porta 4444. Quando un client richiede la connessione, il server risponde con: Connessione accettata. Chat Si ha un server in ascolto sulla porta 4444 Quando un client richiede la connessione, il server risponde con: Connessione accettata. Nome: Il client deve rispondere con lo user name A questo punto

Dettagli

UnicastRemoteObject. Massimo Merro Programmazione di Rete 103 / 124

UnicastRemoteObject. Massimo Merro Programmazione di Rete 103 / 124 UnicastRemoteObject Java RMI fornisce diverse classi base per definire server remoti: UnicastRemoteObject < RemoteServer < RemoteObject dove A < B significa che A è una sottoclasse di B. UnicastRemotObject

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

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

Architettura Client-Server

Architettura Client-Server Architettura Client-Server 1. il client manda una richiesta al server 2. il server (in attesa) riceve la richiesta 3. il server esegue il servizio richiesto (generando un thread concorrente) 4. il server

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

Corso di Reti di Calcolatori L-A

Corso di Reti di Calcolatori L-A Università degli Studi di Bologna Facoltà di Ingegneria Corso di Reti di Calcolatori L-A Esercitazione 2 (svolta) Socket Java con connessione Luca Foschini Anno accademico 2009/2010 Esercitazione 2 1 Architettura

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

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

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

Telematica II 17. Esercitazione/Laboratorio 6

Telematica II 17. Esercitazione/Laboratorio 6 Multitasking e Multithreading Telematica II 17. Esercitazione/Laboratorio 6 Multitasking si riferisce all abilità di un computer di eseguire processi (jobs) multipli in maniera concorrente si ricorda che

Dettagli

Parte II: Reti di calcolatori Lezione 10

Parte II: Reti di calcolatori Lezione 10 Università di Roma Tor Vergata Corso di Laurea triennale in Informatica Sistemi operativi e reti A.A. 2013-14 Pietro Frasca Parte II: Reti di calcolatori Lezione 10 Giovedì 3-04-2014 1 Reti per la distribuzione

Dettagli

Servizi Remoti. Servizi Remoti. TeamPortal Servizi Remoti

Servizi Remoti. Servizi Remoti. TeamPortal Servizi Remoti 20120300 INDICE 1. Introduzione... 3 2. Consultazione... 4 2.1 Consultazione Server Fidati... 4 2.2 Consultazione Servizi Client... 5 2.3 Consultazione Stato richieste... 5 3. Amministrazione... 6 3.1

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

Registratori di Cassa

Registratori di Cassa modulo Registratori di Cassa Interfacciamento con Registratore di Cassa RCH Nucleo@light GDO BREVE GUIDA ( su logiche di funzionamento e modalità d uso ) www.impresa24.ilsole24ore.com 1 Sommario Introduzione...

Dettagli

Java e Serializzazione dalla A all'xml di Leonardo Puleggi

Java e Serializzazione dalla A all'xml di Leonardo Puleggi dalla A all'xml di Leonardo Puleggi Indice generale Introduzione2 Grafo di Riferimenti 4 Attributi Transient.. 6 Metodi writeobject e readobject... 7 Ereditarietà e Serializzazione...10 Serializzazione

Dettagli

10.1. Un indirizzo IP viene rappresentato in Java come un'istanza della classe InetAddress.

10.1. Un indirizzo IP viene rappresentato in Java come un'istanza della classe InetAddress. ESERCIZIARIO Risposte ai quesiti: 10.1. Un indirizzo IP viene rappresentato in Java come un'istanza della classe InetAddress. 10.2. Un numero intero in Java è compreso nell'intervallo ( 2 31 ) e (2 31

Dettagli

Programmazione a Oggetti Lezione 10. Ereditarieta

Programmazione a Oggetti Lezione 10. Ereditarieta Programmazione a Oggetti Lezione 10 Ereditarieta Sommario Come definire sottoclassi Costruttori Abstract Classes Final Ereditarietà: promemoria Strumento tipico dell OOP per riusare il codice e creare

Dettagli

Java: Compilatore e Interprete

Java: Compilatore e Interprete Java: Compilatore e Interprete Java Virtual Machine Il bytecode non è Linguaggio Macchina. Per diventarlo, deve subire un ulteriore trasformazione che viene operata dall interprete Java in modalità JIT

Dettagli

Laboratorio di Sistemi Distribuiti Leonardo Mariani

Laboratorio di Sistemi Distribuiti Leonardo Mariani Laboratorio di Sistemi Distribuiti Leonardo Mariani ELECTION ALGORITHMS In molti sistemi distribuiti un processo deve agire da (o svolgere un ruolo particolare) per gli altri processi. Spesso non è importante

Dettagli

1. RETI INFORMATICHE CORSO DI LAUREA IN INGEGNERIA INFORMATICA SPECIFICHE DI PROGETTO A.A. 2013/2014. 1.1 Lato client

1. RETI INFORMATICHE CORSO DI LAUREA IN INGEGNERIA INFORMATICA SPECIFICHE DI PROGETTO A.A. 2013/2014. 1.1 Lato client RETI INFORMATICHE - SPECIFICHE DI PROGETTO A.A. 2013/2014 1. RETI INFORMATICHE CORSO DI LAUREA IN INGEGNERIA INFORMATICA SPECIFICHE DI PROGETTO A.A. 2013/2014 Il progetto consiste nello sviluppo di un

Dettagli

19. LA PROGRAMMAZIONE LATO SERVER

19. LA PROGRAMMAZIONE LATO SERVER 19. LA PROGRAMMAZIONE LATO SERVER Introduciamo uno pseudocodice lato server che chiameremo Pserv che utilizzeremo come al solito per introdurre le problematiche da affrontare, indipendentemente dagli specifici

Dettagli

Tipi primitivi. Ad esempio, il codice seguente dichiara una variabile di tipo intero, le assegna il valore 5 e stampa a schermo il suo contenuto:

Tipi primitivi. Ad esempio, il codice seguente dichiara una variabile di tipo intero, le assegna il valore 5 e stampa a schermo il suo contenuto: Tipi primitivi Il linguaggio Java offre alcuni tipi di dato primitivi Una variabile di tipo primitivo può essere utilizzata direttamente. Non è un riferimento e non ha senso tentare di istanziarla mediante

Dettagli

Introduzione alle applicazioni di rete

Introduzione alle applicazioni di rete Introduzione alle applicazioni di rete Definizioni base Modelli client-server e peer-to-peer Socket API Scelta del tipo di servizio Indirizzamento dei processi Identificazione di un servizio Concorrenza

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

Parte II: Reti di calcolatori Lezione 12

Parte II: Reti di calcolatori Lezione 12 Università di Roma Tor Vergata Corso di Laurea triennale in Informatica Sistemi operativi e reti A.A. 2014-15 Parte II: Reti di calcolatori Lezione 12 Giovedì 16-04-2015 1 Confronto architetture C/S e

Dettagli

20 - Input/Output su File

20 - Input/Output su File 20 - Input/Output su File Programmazione e analisi di dati Modulo A: Programmazione in Java Paolo Milazzo Dipartimento di Informatica, Università di Pisa http://www.di.unipi.it/ milazzo milazzo di.unipi.it

Dettagli

LABORATORIO DI INFORMATICA 1 2014-2015. - parte 6 -

LABORATORIO DI INFORMATICA 1 2014-2015. - parte 6 - LABORATORIO DI INFORMATICA 1 2014-2015 - parte 6 - Lettura da File Obiettivo: leggere un file Per prima cosa dobbiamo creare un oggetto che rappresenti il file che vogliamo utilizzare (inserendo anche

Dettagli

Programmare in Java. Olga Scotti

Programmare in Java. Olga Scotti Programmare in Java Olga Scotti Linguaggi di programmazione linguaggio macchina assembler linguaggi ad alto livello Linguaggi ad alto livello istruzioni comprensibili linguaggio simile a quello naturale

Dettagli

GESTIONE DEI PROCESSI

GESTIONE DEI PROCESSI Sistemi Operativi GESTIONE DEI PROCESSI Processi Concetto di Processo Scheduling di Processi Operazioni su Processi Processi Cooperanti Concetto di Thread Modelli Multithread I thread in Java Concetto

Dettagli

Tecnologie Web L-A. Java e HTTP. Dario Bottazzi Tel. 051 2093541, E-Mail: dario.bottazzi@unibo.it, SkypeID: dariobottazzi. Java e TCP/IP in a Nutshell

Tecnologie Web L-A. Java e HTTP. Dario Bottazzi Tel. 051 2093541, E-Mail: dario.bottazzi@unibo.it, SkypeID: dariobottazzi. Java e TCP/IP in a Nutshell Tecnologie Web L-A Java e HTTP Dario Bottazzi Tel. 051 2093541, E-Mail: dario.bottazzi@unibo.it, SkypeID: dariobottazzi Java e TCP/IP in a Nutshell! java.net.inetaddress: rappresenta un indirizzo IP e

Dettagli

(VHUFLWD]LRQLGLEDVHVXOOH6RFNHWLQ-DYD 6RFNHWGLWLSRGDWDJUDP

(VHUFLWD]LRQLGLEDVHVXOOH6RFNHWLQ-DYD 6RFNHWGLWLSRGDWDJUDP (VHUFLWD]LRQLGLEDVHVXOOH6RFNHWLQ-DYD 6RFNHWGLWLSRGDWDJUDP D /LQH&OLHQWH6HUYHU Sviluppare un applicazione C/S in cui: i inviano al server pacchetti (vuoti) che vengono interpretati dal server come richiesta

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

La prima applicazione Java. Creazione di oggetti - 1. La prima applicazione Java: schema di esecuzione. Gianpaolo Cugola - Sistemi Informativi in Rete

La prima applicazione Java. Creazione di oggetti - 1. La prima applicazione Java: schema di esecuzione. Gianpaolo Cugola - Sistemi Informativi in Rete La prima applicazione Java Programma MyFirstApplication Il programma visualizza una finestra vuota sullo schermo. Importo il package delle classi usate nel seguito. Dichiaro la classe MyFirstApplication

Dettagli

Programmazione dei socket con TCP #2

Programmazione dei socket con TCP #2 I Il Server e il Client si scambiano messaggi attraverso la rete mediante un dell API (Application Programming Interface) Telematica II 10. Esercitazione/Laboratorio 3 Server ports Clients user space Socket

Dettagli

FPf per Windows 3.1. Guida all uso

FPf per Windows 3.1. Guida all uso FPf per Windows 3.1 Guida all uso 3 Configurazione di una rete locale Versione 1.0 del 18/05/2004 Guida 03 ver 02.doc Pagina 1 Scenario di riferimento In figura è mostrata una possibile soluzione di rete

Dettagli

Reti di Telecomunicazione Lezione 8

Reti di Telecomunicazione Lezione 8 Reti di Telecomunicazione Lezione 8 Marco Benini Corso di Laurea in Informatica marco.benini@uninsubria.it Livello di trasporto Programma della lezione relazione tra lo strato di trasporto e lo strato

Dettagli

Luca Mari, Sistemi informativi applicati (reti di calcolatori) appunti delle lezioni. Architetture client/server: applicazioni server

Luca Mari, Sistemi informativi applicati (reti di calcolatori) appunti delle lezioni. Architetture client/server: applicazioni server Versione 30.5.05 Sistemi informativi applicati (reti di calcolatori): appunti delle lezioni Architetture client/: applicazioni 1 La logica dei socket Abbiamo visto che un applicazione client si connette

Dettagli

Per chi ha la Virtual Machine: avviare Grass da terminale, andando su Applicazioni Accessori Terminale e scrivere grass

Per chi ha la Virtual Machine: avviare Grass da terminale, andando su Applicazioni Accessori Terminale e scrivere grass 0_Iniziare con GRASS Avvio di Grass e creazione della cartella del Database di GRASS Per chi ha la Virtual Machine: avviare Grass da terminale, andando su Applicazioni Accessori Terminale e scrivere grass

Dettagli

Il client deve stampare tutti gli eventuali errori che si possono verificare durante l esecuzione.

Il client deve stampare tutti gli eventuali errori che si possono verificare durante l esecuzione. RETI INFORMATICHE CORSO DI LAUREA IN INGEGNERIA INFORMATICA SPECIFICHE DI PROGETTO A.A. 2010/2011 Il progetto consiste nello sviluppo di un applicazione client/server. Sia il server che il client dovranno

Dettagli

DESIGN PATTERNS Parte 6. State Proxy

DESIGN PATTERNS Parte 6. State Proxy DESIGN PATTERNS Parte 6 State Proxy STATE Il Design Pattern State nasce dall'esigenza di poter gestire gli stati di una classe senza dover usare dei costrutti come gli Enum e quindi delle switch. Prendiamo

Dettagli

Università degli Studi di Modena e Reggio Emilia. Facoltà di Ingegneria Reggio Emilia CORSO DI TECNOLOGIE E APPLICAZIONI WEB. Http con java, URL

Università degli Studi di Modena e Reggio Emilia. Facoltà di Ingegneria Reggio Emilia CORSO DI TECNOLOGIE E APPLICAZIONI WEB. Http con java, URL Università degli Studi di Modena e Reggio Emilia Facoltà di Ingegneria Reggio Emilia CORSO DI TECNOLOGIE E APPLICAZIONI WEB Http con java, URL Ing. Marco Mamei Anno Accademico 2004-2005 M. Mamei - Tecnologie

Dettagli

progecad NLM Guida all uso Rel. 10.2

progecad NLM Guida all uso Rel. 10.2 progecad NLM Guida all uso Rel. 10.2 Indice Indice... 2 Introduzione... 3 Come Iniziare... 3 Installare progecad NLM Server... 3 Registrare progecad NLM Server... 3 Aggiungere e attivare le licenze...

Dettagli

Ingegneria del Software. Presentazione del pattern Proxy

Ingegneria del Software. Presentazione del pattern Proxy Ingegneria del Software Presentazione del pattern Proxy 1 Il pattern Proxy (1/6) Nome Proxy Synopsis Pattern molto generale che occorre in molti altri pattern, ma raramente nella sua forma pura. Il pattern

Dettagli

Prova Finale a.a. 2011/2012. Laboratorio 1: Introduzione a Java e Eclipse

Prova Finale a.a. 2011/2012. Laboratorio 1: Introduzione a Java e Eclipse Prova Finale a.a. 2011/2012 Laboratorio 1: Introduzione a Java e Eclipse 1 Java 6 Standard Edition Linguaggio Java (... (javac, Tool di sviluppo Librerie per l'interfaccia grafica Librerie di base Macchina

Dettagli

Corso Eclipse. Prerequisiti. 1 Introduzione

Corso Eclipse. Prerequisiti. 1 Introduzione Corso Eclipse 1 Introduzione 1 Prerequisiti Uso elementare del pc Esecuzione ricerche su Internet Esecuzione download Conoscenza elementare della programmazione 2 1 Cos è Eclipse Eclipse è un IDE (Integrated

Dettagli

Appunti di Informatica www.mimmocorrado.it 1

Appunti di Informatica www.mimmocorrado.it 1 Installare Java Il programma può essere scaricato dal seguente indirizzo: http://www.java.com/it/download/windows_ie.jsp?locale=it&host=www.java.com Per installare la JDK è necessario: 1. scaricare il

Dettagli

Tale attività non è descritta in questa dispensa

Tale attività non è descritta in questa dispensa Fondamenti di informatica Oggetti e Java ottobre 2014 1 Nota preliminare L installazione e l uso di Eclipse richiede di aver preliminarmente installato Java SE SDK Tale attività non è descritta in questa

Dettagli

Introduzione. Installare EMAS Logo Generator

Introduzione. Installare EMAS Logo Generator EMAS Logo Generator Indice Introduzione... 3 Installare EMAS Logo Generator... 3 Disinstallare EMAS Logo Generator... 4 Schermata iniziale... 5 Creare il Logo... 7 Impostazioni... 7 Colore...8 Lingua del

Dettagli

Cenni di programmazione distribuita in C++ Mauro Piccolo piccolo@di.unito.it

Cenni di programmazione distribuita in C++ Mauro Piccolo piccolo@di.unito.it Cenni di programmazione distribuita in C++ Mauro Piccolo piccolo@di.unito.it Socket Nei sistemi operativi moderni i servizi disponibili in rete si basano principalmente sul modello client/server. Tale

Dettagli

Corso di Reti di Calcolatori

Corso di Reti di Calcolatori Corso di Reti di Calcolatori UNICAL Facoltà di Ingegneria a.a. 2002/2003 Esercitazione sul networking in Java (3 a parte) e comandi di rete paolo.trunfio@deis.unical.it 1 Datagrammi Le applicazioni che

Dettagli

1) GESTIONE DELLE POSTAZIONI REMOTE

1) GESTIONE DELLE POSTAZIONI REMOTE IMPORTAZIONE ESPORTAZIONE DATI VIA FTP Per FTP ( FILE TRANSFER PROTOCOL) si intende il protocollo di internet che permette di trasferire documenti di qualsiasi tipo tra siti differenti. Per l utilizzo

Dettagli

MANUALE PARCELLA FACILE PLUS INDICE

MANUALE PARCELLA FACILE PLUS INDICE MANUALE PARCELLA FACILE PLUS INDICE Gestione Archivi 2 Configurazioni iniziali 3 Anagrafiche 4 Creazione prestazioni e distinta base 7 Documenti 9 Agenda lavori 12 Statistiche 13 GESTIONE ARCHIVI Nella

Dettagli

Modulo. Programmiamo in Pascal. Unità didattiche COSA IMPAREREMO...

Modulo. Programmiamo in Pascal. Unità didattiche COSA IMPAREREMO... Modulo A Programmiamo in Pascal Unità didattiche 1. Installiamo il Dev-Pascal 2. Il programma e le variabili 3. Input dei dati 4. Utilizziamo gli operatori matematici e commentiamo il codice COSA IMPAREREMO...

Dettagli

appunti delle lezioni Architetture client/server: applicazioni server

appunti delle lezioni Architetture client/server: applicazioni server Sistemi informativi applicati (reti di calcolatori): appunti delle lezioni Architetture /: applicazioni 1 La logica dei Abbiamo visto che un applicazione si connette e comunica con un applicazione mediante

Dettagli

Programmare con le Socket TCP in java. 2: Application Layer 1

Programmare con le Socket TCP in java. 2: Application Layer 1 Programmare con le Socket TCP in java 2: Application Layer 1 Il Client contatta il server Il Server: Il processo server è sempre attivo in attesa di connessioni (demone) Crea una socket per accettare la

Dettagli

Istruzioni di installazione di IBM SPSS Modeler Text Analytics (licenza per sito)

Istruzioni di installazione di IBM SPSS Modeler Text Analytics (licenza per sito) Istruzioni di installazione di IBM SPSS Modeler Text Analytics (licenza per sito) Le seguenti istruzioni sono relative all installazione di IBM SPSS Modeler Text Analytics versione 15 mediante un licenza

Dettagli

Manuale per la configurazione di AziendaSoft in rete

Manuale per la configurazione di AziendaSoft in rete Manuale per la configurazione di AziendaSoft in rete Data del manuale: 7/5/2013 Aggiornamento del manuale: 2.0 del 10/2/2014 Immagini tratte da Windows 7 Versione di AziendaSoft 7 Sommario 1. Premessa...

Dettagli

Istruzioni per l installazione del software per gli esami ICoNExam (Aggiornate al 15/01/2014)

Istruzioni per l installazione del software per gli esami ICoNExam (Aggiornate al 15/01/2014) Istruzioni per l installazione del software per gli esami ICoNExam (Aggiornate al 15/01/2014) Il software per gli esami ICON può essere eseguito su qualunque computer dotato di Java Virtual Machine aggiornata.

Dettagli

Manuale Utente MyFastPage

Manuale Utente MyFastPage Manuale MyFastPage Utente Elenco dei contenuti 1. Cosa è MyVoice Home?... 4 1.1. Introduzione... 5 2. Utilizzo del servizio... 6 2.1. Accesso... 6 2.2. Disconnessione... 7 2.3. Configurazione base Profilo

Dettagli

FOXWave 1.0.0 Gestione gare ARDF IZ1FAL Secco Marco Sezione ARI BIELLA

FOXWave 1.0.0 Gestione gare ARDF IZ1FAL Secco Marco Sezione ARI BIELLA FOXWave 1.0.0 Gestione gare ARDF IZ1FAL Secco Marco Sezione ARI BIELLA Redatto da IZ1FAL Secco Marco Pagina 1 di 15 INDICE 1 1- INSTALLAZIONE... 3 1-1 Scaricare i pacchetti aggiornati... 3 1-2 Startup

Dettagli

GUIDA ALLA PROGRAMMAZIONE GRAFICA IN C

GUIDA ALLA PROGRAMMAZIONE GRAFICA IN C GUIDA ALLA PROGRAMMAZIONE GRAFICA IN C.:luxx:. PREMESSE In questa guida non verranno trattati i costrutti di flusso, le funzioni, o comunque le caratteristiche del linguaggio, che si danno come presupposte.

Dettagli

Client - Server. Client Web: il BROWSER

Client - Server. Client Web: il BROWSER Client - Server Client Web: il BROWSER Il client Web è un applicazione software che svolge il ruolo di interfaccia fra l utente ed il WWW, mascherando la complessità di Internet. Funzioni principali Inviare

Dettagli

appunti delle lezioni Architetture client/server: applicazioni client

appunti delle lezioni Architetture client/server: applicazioni client Sistemi informativi applicati (reti di calcolatori): appunti delle lezioni Architetture client/server: applicazioni client 1 Architetture client/server: un esempio World wide web è un esempio particolarmente

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

2 Fortino Lugi. Figura Errore. Nel documento non esiste testo dello stile specificato.-3 -- Finestra attiva o nuovo documento

2 Fortino Lugi. Figura Errore. Nel documento non esiste testo dello stile specificato.-3 -- Finestra attiva o nuovo documento 1 Fortino Lugi STAMPA UNIONE OFFICE 2000 Vi sarà capitato sicuramente di ricevere lettere pubblicitarie indirizzate personalmente a voi; ovviamente quelle missive non sono state scritte a mano, ma utilizzando

Dettagli

Applicazioni distribuite

Applicazioni distribuite Applicazioni distribuite Maurizio Cozzetto 1 agosto 2009 Un pò di teoria Ricordiamo che un'applicazione distribuita è un'applicazione composta da più programmi (almeno 2) posti in esecuzione su macchine

Dettagli

Mac Application Manager 1.3 (SOLO PER TIGER)

Mac Application Manager 1.3 (SOLO PER TIGER) Mac Application Manager 1.3 (SOLO PER TIGER) MacApplicationManager ha lo scopo di raccogliere in maniera centralizzata le informazioni piu salienti dei nostri Mac in rete e di associare a ciascun Mac i

Dettagli

Programmare con le Socket

Programmare con le Socket Programmare con le Socket Corso Reti ed Applicazioni Lab Sockets pag. 1 Programmare con le Socket TCP Il Client deve contattare il server - Il processo server deve già essere attivo - Il server deve aver

Dettagli

GESGOLF SMS ONLINE. Manuale per l utente

GESGOLF SMS ONLINE. Manuale per l utente GESGOLF SMS ONLINE Manuale per l utente Procedura di registrazione 1 Accesso al servizio 3 Personalizzazione della propria base dati 4 Gestione dei contatti 6 Ricerca dei contatti 6 Modifica di un nominativo

Dettagli

Configuration Managment Configurare EC2 su AWS. Tutorial. Configuration Managment. Configurare il servizio EC2 su AWS. Pagina 1

Configuration Managment Configurare EC2 su AWS. Tutorial. Configuration Managment. Configurare il servizio EC2 su AWS. Pagina 1 Tutorial Configuration Managment Configurare il servizio EC2 su AWS Pagina 1 Sommario 1. INTRODUZIONE... 3 2. PROGRAMMI NECESSARI... 4 3. PANNELLO DI CONTROLLO... 5 4. CONFIGURARE E LANCIARE UN ISTANZA...

Dettagli

Compute engine generici in RMI

Compute engine generici in RMI Compute engine generici in RMI Esempio: Calcolo del prodotto scalare Un unico server offre il servizio di calcolo del prodotto scalare tra vettori di interi Un client richiede al server il calcolo del

Dettagli

Il web server Apache Lezione n. 3. Introduzione

Il web server Apache Lezione n. 3. Introduzione Procurarsi ed installare il web server Apache Introduzione In questa lezione cominciamo a fare un po di pratica facendo una serie di operazioni preliminari, necessarie per iniziare a lavorare. In particolar

Dettagli

INDICE. Accesso al Portale Pag. 2. Nuovo preventivo - Ricerca articoli. Pag. 4. Nuovo preventivo Ordine. Pag. 6. Modificare il preventivo. Pag.

INDICE. Accesso al Portale Pag. 2. Nuovo preventivo - Ricerca articoli. Pag. 4. Nuovo preventivo Ordine. Pag. 6. Modificare il preventivo. Pag. Gentile Cliente, benvenuto nel Portale on-line dell Elettrica. Attraverso il nostro Portale potrà: consultare la disponibilità dei prodotti nei nostri magazzini, fare ordini, consultare i suoi prezzi personalizzati,

Dettagli

Invio SMS. DM Board ICS Invio SMS

Invio SMS. DM Board ICS Invio SMS Invio SMS In questo programma proveremo ad inviare un SMS ad ogni pressione di uno dei 2 tasti della DM Board ICS. Per prima cosa creiamo un nuovo progetto premendo sul pulsante (Create new project): dove

Dettagli

La VPN con il FRITZ!Box - parte II. La VPN con il FRITZ!Box Parte II

La VPN con il FRITZ!Box - parte II. La VPN con il FRITZ!Box Parte II La VPN con il FRITZ!Box Parte II 1 Descrizione Come già descritto nella parte I della mini guida, Una VPN, Virtual Private Network, consiste in una sorta di tunnel in grado di collegare tra loro due o

Dettagli

Console di Amministrazione Centralizzata Guida Rapida

Console di Amministrazione Centralizzata Guida Rapida Console di Amministrazione Centralizzata Contenuti 1. Panoramica... 2 Licensing... 2 Panoramica... 2 2. Configurazione... 3 3. Utilizzo... 4 Gestione dei computer... 4 Visualizzazione dei computer... 4

Dettagli

Corsi di Reti di Calcolatori (Docente Luca Becchetti)

Corsi di Reti di Calcolatori (Docente Luca Becchetti) Corsi di Reti di Calcolatori (Docente Luca Becchetti) NOT : le soluzioni proposte sono volutamente sintetiche. Lo studente dovrebbe fare uno sforzo per risolvere i quesiti in modo autonomo, espandendo

Dettagli

A tal fine il presente documento si compone di tre distinte sezioni:

A tal fine il presente documento si compone di tre distinte sezioni: Guida on-line all adempimento Questa guida vuole essere un supporto per le pubbliche amministrazioni, nella compilazione e nella successiva pubblicazione dei dati riguardanti i dirigenti sui siti istituzionali

Dettagli

Corso di Reti di Calcolatori. Datagrammi

Corso di Reti di Calcolatori. Datagrammi Corso di Reti di Calcolatori UNICAL Facoltà di Ingegneria a.a. 2002/2003 Esercitazione sul networking in Java (3 a parte) e comandi di rete paolo.trunfio@deis.unical.it 1 Datagrammi Le applicazioni che

Dettagli

Java RMI (Remote Method Invocation)

Java RMI (Remote Method Invocation) Java RMI (Remote Method Invocation) Accesso ad oggetti remoti In Java non sono possibili riferimenti remoti RPC in JAVA Le RMI introducono la possibilità di richiedere esecuzione di metodi remoti in JAVA

Dettagli

Fondamenti di Informatica 1. Prof. B.Buttarazzi A.A. 2010/2011

Fondamenti di Informatica 1. Prof. B.Buttarazzi A.A. 2010/2011 Fondamenti di Informatica 1 Prof. B.Buttarazzi A.A. 2010/2011 Sommario Installazione SOFTWARE JDK ECLIPSE 03/03/2011 2 ALGORITMI E PROGRAMMI PROBLEMA ALGORITMO PROGRAMMA metodo risolutivo linguaggio di

Dettagli

I file di dati. Unità didattica D1 1

I file di dati. Unità didattica D1 1 I file di dati Unità didattica D1 1 1) I file sequenziali Utili per la memorizzazione di informazioni testuali Si tratta di strutture organizzate per righe e non per record Non sono adatte per grandi quantità

Dettagli

Reti di Telecomunicazione Lezione 6

Reti di Telecomunicazione Lezione 6 Reti di Telecomunicazione Lezione 6 Marco Benini Corso di Laurea in Informatica marco.benini@uninsubria.it Lo strato di applicazione protocolli Programma della lezione Applicazioni di rete client - server

Dettagli

Licenza per sito Manuale dell amministratore

Licenza per sito Manuale dell amministratore Licenza per sito Manuale dell amministratore Le seguenti istruzioni sono indirizzate agli amministratori di siti con un licenza per sito per IBM SPSS Modeler 15. Questa licenza consente di installare IBM

Dettagli

MODELLO CLIENT/SERVER. Gianluca Daino Dipartimento di Ingegneria dell Informazione Università degli Studi di Siena daino@unisi.it

MODELLO CLIENT/SERVER. Gianluca Daino Dipartimento di Ingegneria dell Informazione Università degli Studi di Siena daino@unisi.it MODELLO CLIENT/SERVER Gianluca Daino Dipartimento di Ingegneria dell Informazione Università degli Studi di Siena daino@unisi.it POSSIBILI STRUTTURE DEL SISTEMA INFORMATIVO La struttura di un sistema informativo

Dettagli

Il calendario di Windows Vista

Il calendario di Windows Vista Il calendario di Windows Vista Una delle novità introdotte in Windows Vista è il Calendario di Windows, un programma utilissimo per la gestione degli appuntamenti, delle ricorrenze e delle attività lavorative

Dettagli