J0 1 Marco Ronchetti - Basi di Dati Web e Distribuite – Laurea Specialistica in Informatica – Università di Trento.

Slides:



Advertisements
Similar presentations
CS Network Programming CS 3331 Fall CS 3331 Outline Socket programming Remote method invocation (RMI)
Advertisements

Message Passing Vs Distributed Objects
Distributed Objects Remote Method Invokation: Conceptual model.
J0 1 Marco Ronchetti - Basi di Dati Web e Distribuite – Laurea Specialitica in Informatica – Università di Trento.
J0 1 Marco Ronchetti - Web architectures – Laurea Specialistica in Informatica – Università di Trento Java XML parsing.
J0 1 Marco Ronchetti - Basi di Dati Web e Distribuite – Laurea Specialitica in Informatica – Università di Trento.
J0 1 Marco Ronchetti - Basi di Dati Web e Distribuite – Laurea Specialitica in Informatica – Università di Trento.
J0 1 Marco Ronchetti - Basi di Dati Web e Distribuite – Laurea Specialistica in Informatica – Università di Trento.
J0 1 Marco Ronchetti - Basi di Dati Web e Distribuite – Laurea Specialitica in Informatica – Università di Trento.
J0 1 Marco Ronchetti - Basi di Dati Web e Distribuite – Laurea Specialitica in Informatica – Università di Trento.
J0 1 Marco Ronchetti - Basi di Dati Web e Distribuite – Laurea Specialistica in Informatica – Università di Trento.
J0 1 Marco Ronchetti - Basi di Dati Web e Distribuite – Laurea Specialistica in Informatica – Università di Trento.
J0 1 Marco Ronchetti - Basi di Dati Web e Distribuite – Laurea Specialitica in Informatica – Università di Trento.
J0 1 Marco Ronchetti - Basi di Dati Web e Distribuite – Laurea Specialistica in Informatica – Università di Trento.
J0 1 Marco Ronchetti - Basi di Dati Web e Distribuite – Laurea Specialistica in Informatica – Università di Trento.
J0 1 Marco Ronchetti - Basi di Dati Web e Distribuite – Laurea Specialitica in Informatica – Università di Trento.
Corso di Formazione Sodalia Enterprise Java Beans Distributed Objects Remote Method Invokation.
Prof. Dr.-Ing. habil. B. Steinbach - Informatik / Softwaretechnologie und Programmierungstechnik - Institut für Informatik virtuelle Maschine Verteilte.
12 Copyright © 2005, Oracle. All rights reserved. Implementing Business Tasks with Session EJBs.
Local vs. distributed Objects Differences between local and distributed objects in: –References (to objects) –Activation/Deactivation –Migration –Persistence.
Remote Method Invocation (RMI) and Distributed Observers in Java
Remote method invocation. Introduction First introduced in JDK 1.1. Allows distributed Java programs to work with each others by behaving as if they are.
1 Java Remote Method Invocation java.rmi.* java.rmi.registry.* java.rmi.server.*
RMI Varun SainiYing Chen. What is RMI? RMI is the action of invoking a method of a remote interface on a remote object. It is used to develop applications.
15-May-15 RMI Remote Method Invocation. 2 “The network is the computer” Consider the following program organization: If the network is the computer, we.
Java Remote Object Invocation (RMI) Overview of RMI Java RMI allowed programmer to execute remote function class using the same semantics as local functions.
Remote Method Invocation
Changing the way of designing distributed applications Communication oriented design: FIRST design the communication protocol for the distributed system.
Remote Method Invocation Chin-Chih Chang. Java Remote Object Invocation In Java, the object is serialized before being passed as a parameter to an RMI.
Changing the the way of designing distributed applications Communication design orientation: The design of the protocol goes first and then the development.
Introduction to Remote Method Invocation (RMI)
Java Remote Object Invocation (RMI) Overview of RMI Java RMI allowed programmer to execute remote function class using the same semantics as local functions.
How Does Remote Method Invocation Work? –Systems that use RMI for communication typically are divided into two categories: clients and servers. A server.
Java RMI RMI = Remote Method Invocation. Allows Java programs to invoke methods of remote objects. Only between Java programs. Several versions (JDK-1.1,
1 Java Programming II Java Network II (Distributed Objects in Java)
CS 584 Lecture 18 l Assignment » Glenda assignment extended to the Java RMI Deadline » No Java RMI Assignment l Test » Friday, Saturday, Monday.
+ A Short Java RMI Tutorial Usman Saleem
LAB 1CSIS04021 Briefing on Assignment One & RMI Programming February 13, 2007.
1 Java RMI G53ACC Chris Greenhalgh. 2 Contents l Java RMI overview l A Java RMI example –Overview –Walk-through l Implementation notes –Argument passing.
Spring/2002 Distributed Software Engineering C:\unocourses\4350\slides\DefiningThreads 1 RMI.
RMI Continued IS Outline  Review of RMI  Programming example.
RMI remote method invocation. Traditional network programming The client program sends data to the server in some intermediary format and the server has.
RMI Remote Method Invocation Distributed Object-based System and RPC Together 2-Jun-16.
Java Remote Object Invocation (RMI) Overview of RMI Java RMI allowed programmer to execute remote function class using the same semantics as local functions.
Example: RMI Program How to write it.
 Remote Method Invocation  A true distributed computing application interface for Java, written to provide easy access to objects existing on remote.
Fall 2007cs4251 Distributed Computing Umar Kalim Dept. of Communication Systems Engineering 17/10/2007.
Java Remote Method Invocation (RMI) Overview of RMI Java RMI allowed programmer to execute remote function class using the same semantics as local functions.
 Java RMI Distributed Systems IT332. Outline  Introduction to RMI  RMI Architecture  RMI Programming and a Sample Example:  Server-Side RMI programming.
Remote Method Invocation A Client Server Approach.
UMBC Distributed Computing with Objects RMI/Corba CMSC 432 Shon Vick.
Java RMI. RMI Any object whose methods can be invoked from another Java VM is called a remote object.
Khoa CNTT 1/37 PHẠM VĂN TÍNH   Java RMI (Remote Method Invocation)
1 Lecture 15 Remote Method Invocation Instructors: Fu-Chiung Cheng ( 鄭福炯 ) Associate Professor Computer Science & Engineering Tatung Institute of Technology.
Distributed programming in Java Faculty:Nguyen Ngoc Tu Session 5 - RMI.
CSC 480 Software Engineering Lab 6 – RMI Nov 8, 2002.
Netprog Java RMI1 Remote Method Invocation.
RMI1 Remote Method Invocation Adapted from “Core Java 2” by Cay Horstmann.
Remote Method Invocation
Remote Method Invocation
Java RMI (more) CS-328 Internet Programming.
Creating a Distributed System with RMI
Creating a Distributed System with RMI
Remote Method Invocation
Creating a Distributed System with RMI
CS 584 Lecture 18 Assignment Glenda assignment extended to the Java RMI Deadline No Java RMI Assignment Test Friday, Saturday, Monday.
Java Remote Method Invocation
Remote Method Invokation: Conceptual model
Creating a Distributed System with RMI
Java Chapter 5 (Estifanos Tilahun Mihret--Tech with Estif)
Presentation transcript:

J0 1 Marco Ronchetti - Basi di Dati Web e Distribuite – Laurea Specialistica in Informatica – Università di Trento Java Networking Remote Method Invokation

J0 2 Marco Ronchetti - Basi di Dati Web e Distribuite – Laurea Specialistica in Informatica – Università di Trento Object 1Object 2 invoke method respond Object Oriented Paradigm

J0 3 Marco Ronchetti - Basi di Dati Web e Distribuite – Laurea Specialistica in Informatica – Università di Trento Object 1Object 2 invoke method respond Client Host/Process Server Host/Process Distributed Object Oriented Paradigm

J0 4 Marco Ronchetti - Basi di Dati Web e Distribuite – Laurea Specialistica in Informatica – Università di Trento Object 1Object 2 socket interaction Local – Client Host/Process Remote - Server Host/Process Post Office Distributed Object Oriented: implementation

J0 5 Marco Ronchetti - Basi di Dati Web e Distribuite – Laurea Specialistica in Informatica – Università di Trento Object 1Object 2 magic Local – Client Host/Process Remote- Server Host/Process Ghost of Object 2 (stub) Skeleton of Object 2 Distributed Object Oriented: RMI paradigm

J0 6 Marco Ronchetti - Basi di Dati Web e Distribuite – Laurea Specialistica in Informatica – Università di Trento CLIENT & SERVER: iCalendar (interface) import java.rmi.*; public interface iCalendar extends Remote { java.util.Date getDate () throws RemoteException; } 1. Define the common interface

J0 7 Marco Ronchetti - Basi di Dati Web e Distribuite – Laurea Specialistica in Informatica – Università di Trento SERVER: CalendarImpl import java.util.Date; import java.rmi.*; import java.rmi.registry.*; import java.rmi.server.*; public class CalendarImpl extends UnicastRemoteObject implements iCalendar { public CalendarImpl() throws RemoteException {} public Date getDate () throws RemoteException { return new Date(); } public static void main(String args[]) { CalendarImpl cal; try { LocateRegistry.createRegistry(1099); cal = new CalendarImpl(); Naming.bind("rmi:///CalendarImpl", cal); System.out.println("Ready for RMI's"); } catch (Exception e) {e.printStackTrace()} } 2. Implement the service

J0 8 Marco Ronchetti - Basi di Dati Web e Distribuite – Laurea Specialistica in Informatica – Università di Trento SERVER: CalendarImpl import java.util.Date; import java.rmi.*; import java.rmi.registry.*; import java.rmi.server.*; public class CalendarImpl extends UnicastRemoteObject implements iCalendar { public CalendarImpl() throws RemoteException {} public Date getDate () throws RemoteException { return new Date(); } public static void main(String args[]) { CalendarImpl cal; try { LocateRegistry.createRegistry(1099); cal = new CalendarImpl(); Naming.bind("rmi:///CalendarImpl", cal); System.out.println("Ready for RMI's"); } catch (Exception e) {e.printStackTrace()} } 3. Create Registry

J0 9 Marco Ronchetti - Basi di Dati Web e Distribuite – Laurea Specialistica in Informatica – Università di Trento SERVER: CalendarImpl import java.util.Date; import java.rmi.*; import java.rmi.registry.*; import java.rmi.server.*; public class CalendarImpl extends UnicastRemoteObject implements iCalendar { public CalendarImpl() throws RemoteException {} public Date getDate () throws RemoteException { return new Date(); } public static void main(String args[]) { CalendarImpl cal; try { LocateRegistry.createRegistry(1099); cal = new CalendarImpl(); Naming.bind("rmi:///CalendarImpl", cal); System.out.println("Ready for RMI's"); } catch (Exception e) {e.printStackTrace()} } 4. Register yourself

J0 10 Marco Ronchetti - Basi di Dati Web e Distribuite – Laurea Specialistica in Informatica – Università di Trento CLIENT: CalendarUser import java.util.Date; import java.rmi.*; public class CalendarUser { public static void main(String args[]) { long t1=0,t2=0; Date date; iCalendar remoteCal; try { remoteCal = (iCalendar) Naming.lookup("rmi://HOST/CalendarImpl"); t1 = remoteCal.getDate().getTime(); t2 = remoteCal.getDate().getTime(); } catch (Exception e) {e.printStackTrace();} System.out.println("This RMI call took " + (t2-t1) + milliseconds ); } 6. Use Service

J0 11 Marco Ronchetti - Basi di Dati Web e Distribuite – Laurea Specialistica in Informatica – Università di Trento Preparing and executing SERVER C:dir CalendarImpl.java iCalendar.java C:javac CalendarImpl.java C:rmic CalendarImpl C:dir CalendarImpl.java iCalendar.java CalendarImpl.class iCalendar.class CalendarImpl_Stub.class CalendarImpl_Skel.class C:java CalendarImpl CLIENT C:dir CalendarUser.java iCalendar.java C:javac CalendarUser.java C:dir CalendarUser.java iCalendar.java CalendarImpl_Stub.class C:java CalendarUser copy

J0 12 Marco Ronchetti - Basi di Dati Web e Distribuite – Laurea Specialistica in Informatica – Università di Trento Preparing and executing NOTE: in Java 2 the skeleton may not exist (its functionality is absorbed by the class file). In order to use the Java 2 solution, one must specify the switch –v1.2 C:rmic –v1.2 CalendarImpl

J0 13 Marco Ronchetti - Basi di Dati Web e Distribuite – Laurea Specialistica in Informatica – Università di Trento Parameter passing Java Standard: void f(int x) : Parameter x is passed by copy void g(Object k) : Parameter k and return value are passed by reference Java RMI: void h(Object k) : Parameter k is passed by copy! UNLESS k is a REMOTE OBJECT (in which case it is passed as a REMOTE REFERENCE, i.e. its stub is copied if needed)

J0 14 Marco Ronchetti - Basi di Dati Web e Distribuite – Laurea Specialistica in Informatica – Università di Trento Alternativa 1 – accensione del registro Invece di scrivere nel codice del server LocateRegistry.createRegistry(1099); è possibile far partire a mano il registro da shell: C: rmiregistry 1099 (port number is optional) Nota: in Java 2 occorre un parametro addizionale: C: rmiregistry –J-Djava.security.policy=registerit.policy dove registerit.policy è un file contenente: grant {permission java.security.AllPermission} o una restrizione dei permessi. Il file è in genere in %USER_HOME%/.java.policy

J0 15 Marco Ronchetti - Basi di Dati Web e Distribuite – Laurea Specialistica in Informatica – Università di Trento Alternativa 2 – caricamento dinamico dello stub Invece di dover copiare a mano lo stub dal Server al client, si puo caricare lo stub automaticamente a runtime?

J0 16 Marco Ronchetti - Basi di Dati Web e Distribuite – Laurea Specialistica in Informatica – Università di Trento This client expects a URL in the marshalling stream for the remote object. It will load the stub class for the remote object from the URL in the marshalling stream. Before you can load classes from a non-local source, you need to set a security manager. Note, as an alternative to using the RMISecurityManager, you can create your ownsecurity manager. import java.util.Date; import java.rmi.*; public class CalendarUser { public static void main(String args[]) { long t1=0,t2=0; Date date; iCalendar remoteCal; System.setSecurityManager(new RMISecurityManager()); try { remoteCal = (iCalendar) Naming.lookup("rmi:/HOST//CalendarImpl"); t1 = remoteCal.getDate().getTime(); t2 = remoteCal.getDate().getTime(); } catch (Exception e) {e.printStackTrace();} System.out.println("This RMI call took " + (t2-t1) + milliseconds ); } CLIENT: CalendarUser - Caric.dinamic o

J0 17 Marco Ronchetti - Basi di Dati Web e Distribuite – Laurea Specialistica in Informatica – Università di Trento SERVER: CalendarImpl – Caricamento dinamico import java.util.Date; import java.rmi.*; import java.rmi.registry.*; import java.rmi.server.*; public class CalendarImpl extends UnicastRemoteObject implements iCalendar { public CalendarImpl() throws RemoteException {} public Date getDate () throws RemoteException { return new Date(); } public static void main(String args[]) { CalendarImpl cal; System.setSecurityManager(new RMISecurityManager()); System.getProperties().put( "java.rmi.server.codebase", " try { LocateRegistry.createRegistry(1099); cal = new CalendarImpl(); Naming.bind("rmi:///CalendarImpl", cal); System.out.println("Ready for RMI's"); } catch (Exception e) {e.printStackTrace()} } La prima parte resta invariata

J0 18 Marco Ronchetti - Basi di Dati Web e Distribuite – Laurea Specialistica in Informatica – Università di Trento Caricamento dinamico (in locale) di una classe remota Diverso paradigma: caricare a runtime una classe residente su una macchina remota, crearne una istanza locale ed eseguirla.

J0 19 Marco Ronchetti - Basi di Dati Web e Distribuite – Laurea Specialistica in Informatica – Università di Trento Caricamento dinamico di una classe remota Object 1 Class 2 1. Get class Client Host Server Host Class 2 Object 2 2. Create instance 3. Invoke method

J0 20 Marco Ronchetti - Basi di Dati Web e Distribuite – Laurea Specialistica in Informatica – Università di Trento La classe remota caricabile dinamicamente import java.awt.*; public class NetworkApp implements Executable { Frame f; public NetworkApp(Frame f) { this.f = f; }; public void exec() { Label l = new Label("Latest version of your application.", Label.CENTER); f.add("Center",l); f.pack(); f.repaint(); } public interface Executable { public void exec(); }

J0 21 Marco Ronchetti - Basi di Dati Web e Distribuite – Laurea Specialistica in Informatica – Università di Trento import java.awt.*; import java.awt.event.*; import java.net.URL; import java.rmi.RMISecurityManager; import java.rmi.server.RMIClassLoader; import java.lang.reflect.*; public class ExecutableLoader { public static void main(String args[]) { System.setSecurityManager(new RMISecurityManager() { public void checkPermission(Permission p){} });; Frame cf = new Frame("NetworkApp"); cf.show(); try { URL url = new URL(" Class cl = RMIClassLoader.loadClass(url,"NetworkApp"); Class argTypes[] = {Class.forName("java.awt.Frame")}; Object argArray[] = {cf}; Constructor cntr = cl.getConstructor(argTypes); Executable client = (Executable)cntr.newInstance(argArray); client.exec(); } catch (Exception e) {e.printStackTrace();} } Caricatore dinamico