Java RMI - PowerPoint PPT Presentation

About This Presentation
Title:

Java RMI

Description:

Java RMI = Java Remote Method Invocation Client Server Client s machine Server s machine Registry Server Client Server Remote Object Client s machine ... – PowerPoint PPT presentation

Number of Views:93
Avg rating:3.0/5.0
Slides: 30
Provided by: ICS123Ins2
Learn more at: https://ics.uci.edu
Category:
Tags: rmi | java

less

Transcript and Presenter's Notes

Title: Java RMI


1
Java RMI
  • ICS 123
  • Richard N. Taylor and Eric M. Dashofy
  • UC Irvine
  • http//www.isr.uci.edu/classes/ics123s02/

with the usual thanks to David Rosenblum
2
What Is Java RMI?
Java RMI Java Remote Method Invocation
  • A distributed interoperability technology for
    Java
  • Packages java.rmi, java.rmi.server and
    java.rmi.registry
  • Tools rmic and rmiregistry
  • Javas 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 CORBAs common object services
  • Detailed documentation is available at
  • http//java.sun.com/

3
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.UnicastRemote
    Object 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

4
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

5
Client/Server Execution with Java RMI (I)
Client
Server
RegistryServer
Servers machine
Clients machine
6
Client/Server Execution with Java RMI (II)
Client
RegistryServer
Servers machine
Clients machine
7
Client/Server Execution with Java RMI (III)
Client
skeleton
Naming.rebind()
RegistryServer
Servers machine
Clients machine
8
Client/Server Execution with Java RMI (IV)
Client
skeleton
stub
RegistryServer
Naming.lookup()
Servers machine
Clients machine
9
Client/Server Execution with Java RMI (V)
Remote MethodInvocation
Client
skeleton
stub
RegistryServer
Servers machine
Clients machine
10
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

11
ExampleAir 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

12
Air Traffic ControlATC 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

13
Air Traffic ControlPosition 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/deser
    ialization

14
Air Traffic ControlRemote Controllers 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
15
Air Traffic ControlRemote Controller Class (I)
package ATC import java.net. // for
InetAddressimport 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)
16
Air Traffic ControlRemote 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 lt -90 pos.latitude gt
90 pos.longitude lt -180
pos.longitude gt 180 pos.heading lt 1
pos.heading gt 360 pos.airspeed lt 50
pos.airspeed gt 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")
17
Air Traffic ControlATC Server
package ATC import java.rmi. public class
ATCServer public static void main(String
args) try Controller c new
Controller(args0, args1) catch
(Exception ex) System.err.println("Excepti
on " ex) System.err.println("usage java
ATCServer port controllerName")
18
Air Traffic ControlAirplane 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(args0)
myController args1 ControllerInterface
c // The interface, not the class!
(ControllerInterface)Naming.lookup("rmi//"
myController) c.CheckIn(myFlightNumber)

19
Air Traffic ControlAirplane 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("R
emoteException " 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")
20
Air Traffic ControlGNUmakefile
CLASSFILESATC/ATCException.class \
ATC/ATCServer.class \
ATC/Airplane.class \
ATC/Controller.class \
ATC/ControllerInterface.class \
ATC/PositionReport.class REMOTECLASSATC/Control
ler.class RMIFILESATC/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 lt
21
Compiling the Example
elysees 1332gt ls ATC/ GNUmakefile elysees
1333gt ls ATC ATCException.java
Controller.java ATCServer.java
ControllerInterface.java Airplane.java
PositionReport.java elysees 1334gt 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.cla
ss Controller_Stub.class ATC elysees 1335gt 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 1336gt
22
Running the ExampleLocal Client and Server
Server on elysees (using the default registry
port number)
elysees 1352gt rmiregistry 1 5398 elysees
1353gt java ATC.ATCServer 1099 LosAngeles 2
5407 elysees 1354gt
Client on elysees
elysees 1355gt java ATC.Airplane 100
/LosAngeles ATCException ATC.ATCException flight
100 invalid position elysees 1356gt java
ATC.Airplane 100 elysees.ics.uci.edu/LosAngeles AT
CException ATC.ATCException flight 100 invalid
position elysees 1357gt
23
Running the ExampleRemote Client and Server
Server on elysees (using a non-default registry
port number)
elysees 1352gt rmiregistry 1033 1
5398 elysees 1353gt java ATC.ATCServer 1033
LosAngeles 2 5407 elysees 1354gt
Client on octavian
octavian 1356gt java ATC.Airplane 100
/LosAngeles RemoteException java.rmi.ConnectExcept
ion Connection refused to host
octavian.ics.uci.edu1099 nested exception is
java.net.ConnectException Connection
refused octavian 1357gt java ATC.Airplane 100
elysees.ics.uci.edu/LosAngeles RemoteException
java.rmi.ConnectException Connection refused to
host elysees.ics.uci.edu1099 nested
exception is java.net.ConnectException
Connection refused octavian 1358gt java
ATC.Airplane 100 elysees.ics.uci.edu1033/LosAngel
es ATCException ATC.ATCException flight 100
invalid position octavian 1359gt
24
Other Possible Architectures
  • A program or remote object can act as both a
    client and a server
  • Example 3-Tiered Client/Server

ClientProgram
25
Principal SimilaritiesBetween 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

26
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

27
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.cr
    eateProxy(myInvocationHandler, ActionListener.clas
    s)
  • Some detail omitted for clarity

28
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
  • Dont 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

29
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?
Write a Comment
User Comments (0)
About PowerShow.com