Aspetti avanzati dell’uso di Java in ambienti distribuiti Liliana Ardissono Giovanna Petrone Argomenti • Comunicazione distribuita: RMI • Connessione al Web: Servlet e Web Server • Comunicazione con database relazionali: JDBC 01/03/00 Aspetti avanzati dell’uso di Java in ambienti distribuiti 2 1 Comunicazione distribuita Remote Method Invocation Java VM1 Port1 Port 2 Invocazione di metodi sull’oggetto remoto 01/03/00 Java VM2 Oggetto remoto Aspetti avanzati dell’uso di Java in ambienti distribuiti 3 Remote Method Invocation: Goals • Rendere trasparente l’invocazione remota di metodi su oggetti Java che risiedono su diverse Virtual machines (evoluzione di Remote Procedure Call, RPC) • offrire un modello distribuito che preservi maggiormente la semantica degli oggetti Java • rendere il piu’ semplice possibile la scrittura di applicazioni distribuite 01/03/00 Aspetti avanzati dell’uso di Java in ambienti distribuiti 4 2 Remote Method Architecture I Client RMI System Server Stubs Skeletons Remote Reference Layer Transport 01/03/00 Aspetti avanzati dell’uso di Java in ambienti distribuiti 5 Remote Method Architecture II • Il sistema RMI é costituito da tre livelli per supportare flessibilità nella comunicazione • Ogni livello ha le sue interfacce di comunicazione con relativi protocolli – stub/skeleton layer: canale di comunicazione tra clients e server – remote reference layer: supporto di diversi protocolli di invocazione tipo Unicast e Multicast – transport layer: supporta la comunicazione a basso livello, tipo TCP/IP 01/03/00 Aspetti avanzati dell’uso di Java in ambienti distribuiti 6 3 Remote Method Invocation I Simile all’invocazione di metodi locali • i parametri dei metodi possono essere oggetti • il polimorfismo e’ supportato: oggetti diversi possono rispondere a stessi messaggi ma • i client interagiscono con interfacce di oggetti (stub) non con la loro implementazione (che sta nella VM remota) • parametri passati per copia, non per referenza (passaggio per referenza solo dentro a una VM) 01/03/00 Aspetti avanzati dell’uso di Java in ambienti distribuiti 7 Remote Method Invocation II RMI System JVM1 JVM2 Obj1 Obj2 Stubs: interf. metodi Skeletons: rif. a metodi di Obj2 e parametri di Obj2 Processo Registry (yellow page service) Tcp/IP 01/03/00 Aspetti avanzati dell’uso di Java in ambienti distribuiti 8 4 Remote Method Invocation III • Un client (obj1) che invoca un metodo di un oggetto server remoto (obj2) utilizza – l’indirizzo dell’oggetto remoto per mandargli il messaggio – uno stub o proxy che specifica il metodo • La Java Virtual Machine del client (JVM1) – invia le richieste all’oggetto server attraverso il remote reference layer – serializza i parametri (marshall) utilizzando lo stub – deserializza il valore di ritorno (unmarshall) utilizzando lo stub 01/03/00 Aspetti avanzati dell’uso di Java in ambienti distribuiti 9 Remote Method Invocation IV • Il processo Registry riceve il messaggio (invocazione di metodo con parametri serializzati) e lo invia all’oggetto server in JVM2 • L’oggetto server utilizza – lo Skeleton per eseguire l’implementazione del metodo, deserializzando i parametri – lo Skeleton per serializzare il possibile valore di ritorno 01/03/00 Aspetti avanzati dell’uso di Java in ambienti distribuiti 10 5 Remote Method Invocation V RMI transport layer: • responsabile della connessione • ascolta le richieste in arrivo • passa i dati al reference layer • mantiene la tabella degli oggetti remoti nel particolare address space • Normalmente viene aperto un socket, se esiste un firewall l’RMI fornisce un meccanismo basato su HTTP 01/03/00 Aspetti avanzati dell’uso di Java in ambienti distribuiti 11 Esempio di RMI - I Metodo del client che invia un messaggio ad un oggetto remoto (DbUsrsInterface): public int addUserData (String[] data) { DbUsrsInterface obj; ….. Try { obj = (DbUsrsInterface)Naming.lookup(“rmi://130.192.233.241/dbServer”); idUser = obj.addUser(data); ……} catch (Exception e) {……} } 01/03/00 Aspetti avanzati dell’uso di Java in ambienti distribuiti 12 6 Esempio di RMI - II Interfaccia dell’ oggetto del server che riceve un messaggio ad un oggetto nel client: public interface DbUsrsInterface extends java.rmi.Remote { String addUser(String [] data); < altri metodi > } 01/03/00 Aspetti avanzati dell’uso di Java in ambienti distribuiti 13 Esempio di RMI - III public class DbUsrsImpl extends UnicastRemoteObject implements DbUsrsInterface Il metodo addUser e’ un normale metodo Java che viene realizzato nell’implementazione di questa interfaccia. public static void main (String[] args) { ….. Try { DbUsrsImpl obj = new DbUsrsImpl (“DbServer”); Naming.rebind (“rmi://130.192.233.241/DbServer”, obj); ……} } 01/03/00 Aspetti avanzati dell’uso di Java in ambienti distribuiti 14 7 Esempio di RMI - IV Creazione di un oggetto server su una macchina: • si compilano DbUsrsInterface DbUsrsImpl • si utilizza rmic per creare stub e skeleton • si lancia rmiregistry per registrare i metodi offerti dall’interfaccia • si lancia DbUsrsImpl nella virtual machine locale rendendolo server 01/03/00 Aspetti avanzati dell’uso di Java in ambienti distribuiti 15 RMI: conclusioni • CORBA: – distribuzione di programmi scritti in linguaggi eterogenei: interoperabile – IDL non supporta veri oggetti • DCOM: – tipo CORBA, platform-dependent (Windows) 01/03/00 Aspetti avanzati dell’uso di Java in ambienti distribuiti 16 8 Servlets e Web Server I Servlet: – estensioni del Java API – permettono di scrivere applicazioni indipendenti eseguite all’interno del Web server – possono servire richieste in parallelo – mantengono la sessione di lavoro con il singolo utente – efficienti e semplici da utilizzare rispetto ai programmi CGI 01/03/00 Aspetti avanzati dell’uso di Java in ambienti distribuiti 17 Servlet e Web Server II Web Server HTTP Client Browser HttppServletResponse HTTP HttpServletRequest Servlet 01/03/00 Aspetti avanzati dell’uso di Java in ambienti distribuiti 18 9 Servlets e Web Server III • Una servlet è una classe Java (estensione di HttpServlet). • Un Web Server può ospitare più servlet (con relativi alias) • Quando il processo Web Server viene lanciato, genera un thread Java che inizializza l’oggetto Servlet (metodo init) • Ogni servlet è un thread all’interno del Web Server 01/03/00 Aspetti avanzati dell’uso di Java in ambienti distribuiti 19 Servlets • Ogni volta che il Web Server riceve una richiesta per una servlet S: – identifica la servlet S – invoca il metodo service dell’oggetto Servlet S, per far eseguire le operazioni richieste • Il metodo service rappresenta l’interfaccia del secondo livello di applicazione. Al termine del metodo, S rimanda una risposta sotto forma di pagina HTML • Il Web server spedisce la pagina al browser chiamante 01/03/00 Aspetti avanzati dell’uso di Java in ambienti distribuiti 20 10 Richieste ES: http://silk.di.unito.it:8081/setaZone/negozio.SnMg r?action=userChoice&product=telephone • La classe HttpServletRequest offre i metodi per – determinare i parametri di una richiesta (action, product) – estrarre i valori speficati per i parametri nella richiesta (userChoice, telephone) • NB: si parsificano le richieste facilmente 01/03/00 Aspetti avanzati dell’uso di Java in ambienti distribuiti 21 Esempio di metodo service I Nel metodo service: • si estraggono i parametri della richiesta • si gestisce la richiesta (ev. invocando metodi di altri oggetti Java - applicazione) • si restituisce una risposta al Web server 01/03/00 Aspetti avanzati dell’uso di Java in ambienti distribuiti 22 11 Esempio di metodo service II public void service (HttpServletRequest req, HttpServletResponse resp) { …... PrintStream out = new PrintStream(resp.getOutputStream()); for (Enumeration e=req.getParameterNames(); e.hasMoreElements();) {String parName = (String)e.nextElement(); arg = req.getParameter(parName); hash.put(parName, arg); } String nextPage = dialogMgr.getPage(hash); //applicazione setCookie(resp, userId); out.println(nextPage); out.close(); } private void setCookie(HttpServletResponse resp, String userId) { Cookie cookie = new Cookie(s1, s2); …... resp.addCookie(cookie); } 01/03/00 Aspetti avanzati dell’uso di Java in ambienti distribuiti 23 Servlet e Web Server • Apache, Netscape, Microsoft o Oracle Web Server • le servlet erano inizialmente solo integrate nel Java Web Server della Sun 01/03/00 Aspetti avanzati dell’uso di Java in ambienti distribuiti 24 12 Internet 3-level Architecture Clients Web Server DB Server HTTP RMI/CORBA S1 HTTP JDBC HTTP 01/03/00 S2 Aspetti avanzati dell’uso di Java in ambienti distribuiti 25 Web Server e Servlets 3-level Architecture • Vantaggi: – I livelli devono essere il più indipendenti possibile – più facile manutenzione e riusabilità – il livello interfaccia (browser) non ha quasi costo di manutenzione • Svantaggi: – necessità di una rete veloce – aggiornamento nelle industrie – riutilizzo di sistemi esistenti 01/03/00 Aspetti avanzati dell’uso di Java in ambienti distribuiti 26 13 Es. Three-level architecture II level Solaris JDK 1.2 Apache Web Server Session Mgr Agents I level W e b S e r v e r Browser_i Browser _k Netscape, Ms Explorer Users DB Itemns DB NT JDK 1.2 ODBC driver III level 01/03/00 Aspetti avanzati dell’uso di Java in ambienti distribuiti 27 Da JDBC ad Access JDBC API Driver JDBC - ODBC ODBC di Microsoft Access Microsoft Access 01/03/00 Aspetti avanzati dell’uso di Java in ambienti distribuiti 28 14 JDBC • Interfaccia di programmazione Java per la connessione e l’uso di database • Permette di scrivere un’interfaccia SQL unica per i principali DB: Oracle, MS Access, Sybase, ... • Sfrutta la security di Java e quella del database attraverso lo specifico driver 01/03/00 Aspetti avanzati dell’uso di Java in ambienti distribuiti 29 Architettura di JDBC Applicazione Driver Manager DB Specific Driver Connection 01/03/00 DB Specific Driver Connection Statement Statement ResultSet ResultSet Aspetti avanzati dell’uso di Java in ambienti distribuiti 30 15 Connessione al Web: Servlet e Web Server Sistemi monolitici (mainframe e terminali) Sistemi client-server (PC e workstation) 3-level architecture (Browsers, Web Server con servlets, DataBase) 01/03/00 Aspetti avanzati dell’uso di Java in ambienti distribuiti 31 CANTIERE MULTIMEDIALE TELECOM SERVIZI TELEMATICI ADATTATIVI http://www.di.unito.it/~seta 16 The System Architecture Usrs DB Mgr Stereotype KB UM-i Prod Taxonomy Personal Agent UMC Dialog Context Extractor Extr Context-i Users DB Session Mgr Dialog Mgr Cart Bag Mgr Items DBMgr 01/03/00 W e b S e r v e r Items DB Aspetti avanzati dell’uso di Java in ambienti distribuiti 33 KQML-like messages Users DB tell ask-1 ItemsDB 01/03/00 te as ll k1 ask-all tell W e b tell tell Session Mgr tell tell Items DBMgr Dialog Mgr tell delete insert ask-1 tell ask-all Extractor ask-1 tell Personalization Agent ask-1 UMC tell insert Usrs DB Mgr S e r v e r Bag Mgr Aspetti avanzati dell’uso di Java in ambienti distribuiti 34 17