Programmazione distribuita in Java. da materiale di Carlo Ghezzi e Alfredo Mo:a
|
|
- Daniele Berti
- 8 anni fa
- Visualizzazioni
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 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
DettagliProgrammazione 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
DettagliSocket & 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
DettagliProgrammazione 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
DettagliRMI 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
DettagliRegistri 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ò
DettagliRMI. 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
DettagliProgrammazione 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
DettagliMobilità 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 D (FKR&OLHQWH6HUYHU Sviluppare un applicazione C/S in cui: il server attende una connessione da parte del client (su MDYDQHW6HUYHU6RFNHW), usa la
DettagliProgettAzione 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
DettagliRMI 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:
DettagliProgrammazione 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
DettagliChat. 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
DettagliUnicastRemoteObject. 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
DettagliOrganizzazione 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
DettagliRMI: 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
DettagliArchitettura 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
DettagliLa 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.
DettagliCorso 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
DettagliJava 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
Dettagli7 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)
DettagliEsercitazione 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
DettagliTelematica 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
DettagliParte 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
DettagliServizi 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
DettagliRemote 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
DettagliRegistratori 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...
DettagliJava 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
Dettagli10.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
DettagliProgrammazione 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
DettagliJava: 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
DettagliLaboratorio 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
Dettagli1. 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
Dettagli19. 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
DettagliTipi 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
DettagliIntroduzione 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
DettagliJNDI. 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
DettagliParte 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
Dettagli20 - 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
DettagliLABORATORIO 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
DettagliProgrammare 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
DettagliGESTIONE 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
DettagliTecnologie 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 D /LQH&OLHQWH6HUYHU Sviluppare un applicazione C/S in cui: i inviano al server pacchetti (vuoti) che vengono interpretati dal server come richiesta
DettagliIntroduzione 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
DettagliLa 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
DettagliProgrammazione 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
DettagliFPf 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
DettagliReti 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
DettagliLuca 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
DettagliPer 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
DettagliIl 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
DettagliDESIGN 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
DettagliUniversità 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
Dettagliprogecad 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...
DettagliIngegneria 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
DettagliProva 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
DettagliCorso 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
DettagliAppunti 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
DettagliTale 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
DettagliIntroduzione. 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
DettagliCenni 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
DettagliCorso 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
Dettagli1) 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
DettagliMANUALE 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
DettagliModulo. 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...
Dettagliappunti 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
DettagliProgrammare 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
DettagliIstruzioni 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
DettagliManuale 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...
DettagliIstruzioni 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.
DettagliManuale 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
DettagliFOXWave 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
DettagliGUIDA 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.
DettagliClient - 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
Dettagliappunti 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
DettagliServers 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
Dettagli2 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
DettagliApplicazioni 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
DettagliMac 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
DettagliProgrammare 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
DettagliGESGOLF 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
DettagliConfiguration 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...
DettagliCompute 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
DettagliIl 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
DettagliINDICE. 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,
DettagliInvio 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
DettagliLa 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
DettagliConsole 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
DettagliCorsi 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
DettagliA 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
DettagliCorso 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
DettagliJava 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
DettagliFondamenti 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
DettagliI 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à
DettagliReti 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
DettagliLicenza 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
DettagliMODELLO 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
DettagliIl 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