ICS 123 Java RMI ICS 123 Richard N. Taylor and Eric M. Dashofy* UC Irvine * with the usual thanks to David Rosenblum.

Slides:



Advertisements
Similar presentations
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.
Advertisements

Remote Method Invocation CS587x Lecture Department of Computer Science Iowa State University.
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.
Advanced Programming Rabie A. Ramadan Lecture 4. A Simple Use of Java Remote Method Invocation (RMI) 2.
Java Remote Method Invocation (RMI) In Java we implement object systems: O1O2 O3 thread 1thread 2 execution scheme JVM 1JVM 2 distribution scheme.
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
FONG CHAN SING (143334) WONG YEW JOON (143388). JAVA RMI is a distributive system programming interface introduced in JDK 1.1. A library that allows an.
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.
DISTRIBUTED FILE SYSTEM USING RMI
1 HANDOUT 14 Remote Method Invocation (RMI) BY GEORGE KOUTSOGIANNAKIS THIS DOCUMENT CAN NOT BE REPRODUCED OR DISTRIBUTED WITHOUT TH E WRITTEN PERMISSION.
EEC-681/781 Distributed Computing Systems Lecture 5 Wenbing Zhao Department of Electrical and Computer Engineering Cleveland State University
CSE331: Introduction to Networks and Security Lecture 11 Fall 2002.
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.
Practical Issues of RPCCS-4513, D-Term Remote Procedure Call Practical Issues CS-4513 Distributed Computing Systems (Slides include materials from.
Java RMI RMI = Remote Method Invocation. Allows Java programs to invoke methods of remote objects. Only between Java programs. Several versions (JDK-1.1,
Internet Software Development Remote Method Invocation Paul Krause.
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
15 - RMI. Java RMI Architecture Example Deployment RMI is a part of J2SE (standard edition), but is used by J2EE) A J2EE server is not nessesary for using.
LAB 1CSIS04021 Briefing on Assignment One & RMI Programming February 13, 2007.
Java RMI: Remote Method Invocation January 2000 Nancy McCracken Syracuse University.
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 RMI is the java API that facilitate distributed computing by allowing remote method calls. A remote method call represents a method invocation between.
Java Remote Method Invocation RMI. Idea If objects communicate with each other on one JVM why not do the same on several JVM’s? If objects communicate.
Remote Method Invocation onlineTraining/rmi/RMI.html.
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.
 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.
1 Java Remote Method Invocation java.rmi.* java.rmi.registry.* java.rmi.server.*
Remote Method Invocation Instructors: Fu-Chiung Cheng ( 鄭福炯 ) Associate Professor Computer Science & Engineering Tatung University.
 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.
Remote Method Invocation RMI architecture stubs and skeletons for remote services RMI server and client in Java Creating an RMI Application step-by- step.
Java RMI. RMI Any object whose methods can be invoked from another Java VM is called a remote object.
1 RMI Russell Johnston Communications II. 2 What is RMI? Remote Method Invocation.
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.
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.
Liang, Introduction to Java Programming, Fifth Edition, (c) 2005 Pearson Education, Inc. All rights reserved Chapter 29 Remote Method.
January 26, Ann Wollrath Copyright 1999 Sun Microsystems, Inc., all rights reserved. Java ™ RMI Overview Ann Wollrath Senior Staff Engineer Sun Microsystems,
Java Distributed Computing
Java Remote Method Invocation (RMI)
Broker in practice: Middleware
Remote Method Invocation
What is RMI? Remote Method Invocation
Remote Method Invocation
Creating a Distributed System with RMI
Chapter 40 Remote Method Invocation
Creating a Distributed System with RMI
Remote method invocation (RMI)
Creating a Distributed System with RMI
Chapter 46 Remote Method Invocation
Chapter 46 Remote Method Invocation
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
Creating a Distributed System with RMI
Java Chapter 5 (Estifanos Tilahun Mihret--Tech with Estif)
Presentation transcript:

ICS 123 Java RMI ICS 123 Richard N. Taylor and Eric M. Dashofy* UC Irvine * with the usual thanks to David Rosenblum

ICS Topic 14 Java RMI What Is Java RMI? A distributed interoperability technology for Java –Packages java.rmi, java.rmi.server and java.rmi.registry –Tools rmic and rmiregistry Java’s answer to CORBA –Java is the interface definition language –Key limitation: both client and server must be written in Java Part of Enterprise JavaBeans –Along with JDBC (Java DataBase Connectivity), Java Security, Java Messaging Services, Java Transactions Services, Java IDL, other APIs –like CORBA’s common object services Detailed documentation is available at Java RMI = Java Remote Method Invocation

ICS Topic 14 Java RMI Client/Server Programming with Java RMI (I)  Define an extension of interface java.rmi.Remote –Declare the methods the remote object exports –Declare each such method to throw java.rmi.RemoteException  Define a subclass of java.rmi.server.UnicastRemoteObject that also implements the extension of java.rmi.Remote defined in step 1  Write a server program that creates an instance of the class defined in step 2 –Use synchronized wherever necessary to make server thread-safe –The server program must register the instance with a registry service –Default registry server is started by running rmiregistry

ICS Topic 14 Java RMI Client/Server Programming with Java RMI (II)  Compile server program with javac, and then use rmic to generate stub and skeleton classes for the remote object –Stub and skeleton take care of all networking –Limitation of rmic: the remote object class cannot be nested  Write a client program that uses the remote object –The client uses class Naming to obtain a reference to the remote object, using the interface name from step 1 (not the class name) –The client invokes methods on the remote object through this reference  Run the server and then run the client

ICS Topic 14 Java RMI Client/Server Execution with Java RMI (I) Client Server Client’s machine Server’s machine Registry Server

ICS Topic 14 Java RMI Client/Server Execution with Java RMI (II) Client Server Remote Object Client’s machine Server’s machine Registry Server

ICS Topic 14 Java RMI Client/Server Execution with Java RMI (III) Client Server Remote Object Naming.rebind(…) skeleton Client’s machine Server’s machine Registry Server

ICS Topic 14 Java RMI Client/Server Execution with Java RMI (IV) Client Server Remote Object Naming.lookup(…) skeleton stub Client’s machine Server’s machine Registry Server

ICS Topic 14 Java RMI Client/Server Execution with Java RMI (V) Client Server Remote Object skeleton stub Remote Method Invocation Client’s machine Server’s machine Registry Server

ICS Topic 14 Java RMI Default RMI Registry Server on machine.com registers object with local RMI registry using some string name Naming.rebind(“remoteObj”, referenceToRemoteObj) Client refers to objects with URL –Local client: rmi:///remoteObj –Remote client: rmi://machine.com/remoteObj –If client code contains Naming.lookup(“rmi://” + objName) »objName would be “/remoteObj” for local object »objName would be “machine.com/remoteObj” for remote object Registry is bound to port 1099 by default –Accepts optional port number as argument –Non-default port number must then be added to URL

ICS Topic 14 Java RMI Example: Air Traffic Control Air traffic control is divided into several sectors Each sector is managed by a different controller Airplanes check in with a controller and then periodically send the controller position reports The controller analyzes position reports and tells an airplane when its position is too close to other planes

ICS Topic 14 Java RMI Air Traffic Control: ATC Exception package ATC; public class ATCException extends Exception { public ATCException(String msg) { super(msg); } } For server-specific exceptions Different from RemoteException, which is thrown as a result of RMI failure

ICS Topic 14 Java RMI Air Traffic Control: Position Report Data package ATC; public class PositionReport implements java.io.Serializable { public int Latitude; public int Longitude; public int Heading; public int Airspeed; public PositionReport(int la, int lo, int h, int a) { Latitude = la; Longitude = lo; Heading = h; Airspeed = a; } } Java objects can be passed in RMIs, as long as they are serializable –Usually accomplished with an implementation of (empty) interface Serializable –Stub and skeleton take care of serialization/deserialization

ICS Topic 14 Java RMI Air Traffic Control: Remote Controller’s Interface package ATC; import java.rmi.*; public interface ControllerInterface extends Remote { public void CheckIn(int flight) throws RemoteException; public void CurrentPosition(int flight, PositionReport pos) throws RemoteException, ATCException; }

ICS Topic 14 Java RMI Air Traffic Control: Remote Controller Class (I) package ATC; import java.net.*; // for InetAddress import java.rmi.*; import java.rmi.server.*; public class Controller extends UnicastRemoteObject implements ControllerInterface { protected String myName; public Controller(String port, String name) throws RemoteException { super(); try { myName = " // " + InetAddress.getLocalHost().getHostName() + " : " + port + " / " + name; Naming.rebind(myName, this); } catch (Exception ex) { System.err.println( " Exception " + ex); } } … }

ICS Topic 14 Java RMI Air Traffic Control: Remote Controller Class (II) public class Controller extends UnicastRemoteObject implements ControllerInterface { … public void CheckIn(int flight) throws RemoteException { record existence of new flight } public void CurrentPosition(int flight, PositionReport pos) throws RemoteException, ATCException { if (pos.latitude 90 || pos.longitude 180 || pos.heading 360 || pos.airspeed 700) throw new ATCException("flight " + String.valueOf(flight) + ": invalid position"); else if ( flight is too close to other airplanes ) throw new ATCException("flight " + String.valueOf(flight) + ": dangerous position"); } }

ICS Topic 14 Java RMI Air Traffic Control: ATC Server package ATC; import java.rmi.*; public class ATCServer { public static void main(String[] args) { try { Controller c = new Controller(args[0], args[1]); } catch (Exception ex) { System.err.println("Exception " + ex); System.err.println("usage: java ATCServer port# controllerName"); } } }

ICS Topic 14 Java RMI Air Traffic Control: Airplane Client (I) package ATC; import java.rmi.*; public class Airplane { protected int myFlightNumber; protected String myController; protected PositionReport myPosition = new PositionReport(34, -118, 180, 350); public static void main(String[] args) { try { myFlightNumber = Integer.parseInt(args[0]); myController = args[1]; ControllerInterface c = // The interface, not the class! (ControllerInterface)Naming.lookup("rmi://" + myController); c.CheckIn(myFlightNumber); … } … } }

ICS Topic 14 Java RMI Air Traffic Control: Airplane Client (II) public class Airplane { … public static void main(String[] args) { try { … for (;;) { c.CurrentPosition(myFlightNumber, myPosition); java.lang.Thread.sleep(200); update position } } catch (RemoteException ex) { System.err.println("RemoteException " + ex); } catch (ATCException ex) { System.err.println("ATCException " + ex); } catch (Exception ex) { System.err.println("Exception " + ex); System.err.println("usage: java Airplane flight# controllerName"); } } }

ICS Topic 14 Java RMI Air Traffic Control: GNUmakefile CLASSFILES=ATC/ATCException.class \ ATC/ATCServer.class \ ATC/Airplane.class \ ATC/Controller.class \ ATC/ControllerInterface.class \ ATC/PositionReport.class REMOTECLASS=ATC/Controller.class RMIFILES=ATC/Controller_Skel.class \ ATC/Controller_Stub.class.SUFFIXES:.java.class all: $(CLASSFILES) $(RMIFILES) $(RMIFILES) : $(REMOTECLASS) rmic ATC.Controller mv -f *.class ATC.java.class : javac $<

ICS Topic 14 Java RMI Compiling the Example elysees 1332> ls ATC/ GNUmakefile elysees 1333> ls ATC ATCException.java Controller.java ATCServer.java ControllerInterface.java Airplane.java PositionReport.java elysees 1334> gmake all +elysees+ javac ATC/ATCException.java +elysees+ javac ATC/ATCServer.java +elysees+ javac ATC/Airplane.java +elysees+ rmic ATC.Controller +elysees+ mv -f Controller_Skel.class Controller_Stub.class ATC elysees 1335> ls ATC ATCException.class Controller.java ATCException.java ControllerInterface.class ATCServer.class ControllerInterface.java ATCServer.java Controller_Skel.class Airplane.class Controller_Stub.class Airplane.java PositionReport.class Controller.class PositionReport.java elysees 1336>

ICS Topic 14 Java RMI Running the Example: Local Client and Server Server on elysees (using the default registry port number): Client on elysees: elysees 1355> java ATC.Airplane 100 /LosAngeles ATCException ATC.ATCException: flight 100: invalid position elysees 1356> java ATC.Airplane 100 elysees.ics.uci.edu/LosAngeles ATCException ATC.ATCException: flight 100: invalid position elysees 1357> elysees 1352> rmiregistry & [1] 5398 elysees 1353> java ATC.ATCServer 1099 LosAngeles & [2] 5407 elysees 1354>

ICS Topic 14 Java RMI Running the Example: Remote Client and Server Server on elysees (using a non-default registry port number): Client on octavian: octavian 1356> java ATC.Airplane 100 /LosAngeles RemoteException java.rmi.ConnectException: Connection refused to host: [octavian.ics.uci.edu:1099]; nested exception is: java.net.ConnectException: Connection refused octavian 1357> java ATC.Airplane 100 elysees.ics.uci.edu/LosAngeles RemoteException java.rmi.ConnectException: Connection refused to host: [elysees.ics.uci.edu:1099]; nested exception is: java.net.ConnectException: Connection refused octavian 1358> java ATC.Airplane 100 elysees.ics.uci.edu:1033/LosAngeles ATCException ATC.ATCException: flight 100: invalid position octavian 1359> elysees 1352> rmiregistry 1033 & [1] 5398 elysees 1353> java ATC.ATCServer 1033 LosAngeles & [2] 5407 elysees 1354>

ICS Topic 14 Java RMI Other Possible Architectures A program or remote object can act as both a client and a server Example: 3-Tiered Client/Server Client Program Legacy Program Remote Data Object Server Program Remote Business Object

ICS Topic 14 Java RMI Principal Similarities Between CORBA and RMI Suitable for distributed, object-oriented, client/server systems Synchronous interaction via remote procedure call (RPC) RPC implemented via client stubs and server skeletons, which hide networking and data representation Objects can be both client and server

ICS Topic 14 Java RMI Principal Differences Between CORBA and RMI CORBA –Independent of implementation language –Operation invocations can be formed statically or dynamically –Object implementation binding can be static or dynamic –The CORBA object adapters define various object execution semantics –Many integrated object services are available RMI –Requires objects to be programmed in Java –Objects are platform independent –Operation invocations are formed statically –Mapping of names to objects is static –Many object services are being defined within Enterprise JavaBeans –Mobile code support

ICS Topic 14 Java RMI Sidebar Discussion: Dynamic Proxies in Java Introduced in J2SEv1.3 (JDK1.3) Created using the java.lang.reflect.Proxy class Allows dynamic creation of objects that implement an arbitrary interface class without writing code All methods are called through a single invoke() method, which you implement: –public Object invoke(Object proxy, Method method, Object[] args) throws Throwable You can get a proxy with a call like this: –ActionListener listener = (ActionListener)Proxy.createProxy(myInvocationHandler, ActionListener.class); »Some detail omitted for clarity

ICS Topic 14 Java RMI Why are Dynamic Proxies useful? A generic “listener” for Java events –Consider a generic debugging framework for Swing events that can print every event to the screen »Don’t need to create a new implementation for each type of listener (ActionListener, WindowListener, MouseListener, etc.) Dynamically create stubs for an RMI-like middleware –This is implemented in a middleware called LJM (Lightweight Java Middleware), which ships with ArchStudio 3 –LJM allows you to do basically what RMI does except without having to use rmic –LJM does not currently support mobile code aspects of RMI

ICS Topic 14 Java RMI Discussion How would we extend the example to allow a Controller to give an Airplane instructions for avoiding a dangerous position? How would we extend the example to allow the Controller to indicate an ATC exception condition outside of a call to CurrentReport()? How would we extend the example to allow the Controller to tell the Airplane to check in with a different Controller?