5/15/2015b.ramamurthy1 creating a distributed system with rmi b.ramamurthy

40
03/26/22 B.Ramamurthy 1 Creating a Distributed System with RMI B.Ramamurthy

Upload: jade-richards

Post on 17-Dec-2015

222 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: 5/15/2015B.Ramamurthy1 Creating a Distributed System with RMI B.Ramamurthy

04/18/23 B.Ramamurthy 1

Creating a Distributed System with RMI

B.Ramamurthy

Page 2: 5/15/2015B.Ramamurthy1 Creating a Distributed System with RMI B.Ramamurthy

04/18/23 B.Ramamurthy 2

Remote Method Invocation

Remote Method Invocation (RMI) is Java’s implementation of object-to-object communication among Java objects to realize a distributed computing model.RMI allows us to distribute our objects on various machines, and invoke methods on the objects located on remote sites.

Page 3: 5/15/2015B.Ramamurthy1 Creating a Distributed System with RMI B.Ramamurthy

04/18/23 B.Ramamurthy 3

RMI-based Distributed System

4.

XYZImplementation

Client Host Server Host

XYZClient Stub Stub

XYZinterface

uses implements1.

2.3. 3.5.

Page 4: 5/15/2015B.Ramamurthy1 Creating a Distributed System with RMI B.Ramamurthy

04/18/23 B.Ramamurthy 4

Steps in RMI-based Application

1. Design the interface for the service.2. Implement the methods specified in

the interface.3. Generate the stub and the skeleton.4. Register the service by name and

location.5. Use the service in an application.

Page 5: 5/15/2015B.Ramamurthy1 Creating a Distributed System with RMI B.Ramamurthy

04/18/23 B.Ramamurthy 5

Compile and Register Commands

Client Host Server Host

XYZClient Stub Stub

XYZinterface

uses implements1.

2.3. 3.5.XYZImplementation

rmic

rmiregistryStores object by nameFinds object by name

Compile

Page 6: 5/15/2015B.Ramamurthy1 Creating a Distributed System with RMI B.Ramamurthy

04/18/23 B.Ramamurthy 6

More Details

Once the object (or service) is registered, a client can look up that service.A client (application) receives a reference that allows the client to use the service (call the method).Syntax of calling is identical to a call to a method of another object in the same program.

Page 7: 5/15/2015B.Ramamurthy1 Creating a Distributed System with RMI B.Ramamurthy

04/18/23 B.Ramamurthy 7

Parameter Marshalling

Transfer of parameters (or marshalling) is done by the RMI.Complex objects are streamed using Serialization.RMI model of networking for distributed system involves only Java.No need to learn IDL or any other language.

Page 8: 5/15/2015B.Ramamurthy1 Creating a Distributed System with RMI B.Ramamurthy

04/18/23 B.Ramamurthy 8

Case Study

Take a look at:http://download.oracle.com/javase/6/docs/technotes/guides/rmi/hello/hello-world.html

Page 9: 5/15/2015B.Ramamurthy1 Creating a Distributed System with RMI B.Ramamurthy

04/18/23 B.Ramamurthy 9

Defining Remote Interface

import java.rmi.*;// the interface extends Remote interface// any class implementing Remote can be

accessed remotely security permittingpublic interface XYZ extends Remote{ // specify methods that can be called

remotely // each method “throws RemoteException”}

Page 10: 5/15/2015B.Ramamurthy1 Creating a Distributed System with RMI B.Ramamurthy

04/18/23 B.Ramamurthy 10

RemoteException

Any time you depend on outside entities there is a potential for problems in communication, networking, server crash etc.Any exception due to these should be handled by the services.This feature imparts robustness to the application.Java mandates this feature for any RMI service.

Page 11: 5/15/2015B.Ramamurthy1 Creating a Distributed System with RMI B.Ramamurthy

04/18/23 B.Ramamurthy 11

Implementing the Remote Interface

import java.rmi.*;import java.rmi.server.*;import java.net.*;// others as neededXYZImplimplements TemperatureServer {

The main method instantiates an object for the service, and registers it with rmiregistry.

Page 12: 5/15/2015B.Ramamurthy1 Creating a Distributed System with RMI B.Ramamurthy

04/18/23 B.Ramamurthy 12

Server Object Name

Syntax for the server object name is://host:port/remoteObjectName

Default port number for rmiregistry is 1099For local host the object name:

//localhost/XYZServerFor a remote host//127.0.0.1/XYZServer

Page 13: 5/15/2015B.Ramamurthy1 Creating a Distributed System with RMI B.Ramamurthy

04/18/23 B.Ramamurthy 13

Name Binding

rebind method binds a server’s object name to the object’s name as it is in the registry.Clients use the name in the registry.There is also a bind() method.But rebind is better since it binds the most recently registered object.

Page 14: 5/15/2015B.Ramamurthy1 Creating a Distributed System with RMI B.Ramamurthy

04/18/23 B.Ramamurthy 14

The Client

import java.rmi.*; // import other packages

constructor takes care of lookup of remote object and access.

Page 15: 5/15/2015B.Ramamurthy1 Creating a Distributed System with RMI B.Ramamurthy

04/18/23 B.Ramamurthy 15

Client Details

The name of the server object along with the IP of the remote location is used in Naming class’s lookup method to get an object reference.This object reference is then used for remote method calls.Observe that there is no difference between the local and remote call.

Page 16: 5/15/2015B.Ramamurthy1 Creating a Distributed System with RMI B.Ramamurthy

04/18/23 B.Ramamurthy 16

Preparing the Application

1. Compile all the class using javac.2. Then start the registry (this will be

running as a daemon)rmiregistry &

Page 17: 5/15/2015B.Ramamurthy1 Creating a Distributed System with RMI B.Ramamurthy

04/18/23 B.Ramamurthy 17

Preparing the Application

4. Run the server which will register with the RMI registry.

Java XYZServerImpl &5. Run the client.Java XYZClient parameters&

Page 18: 5/15/2015B.Ramamurthy1 Creating a Distributed System with RMI B.Ramamurthy

04/18/23 B.Ramamurthy 18

Inside RMI

http://download.oracle.com/javase/6/docs/

Basic RMI classes: /usr/java1.1/src/java/rmi java.rmi.registry.* java.rmi.Naming class (static/class methods) java.rmi.Remote interface (marker interface) java.rmi.server.* Default RMI port 1099 Both lookup from local and remote are

acceptable.

Page 19: 5/15/2015B.Ramamurthy1 Creating a Distributed System with RMI B.Ramamurthy

04/18/23 B.Ramamurthy 19

Implementation of RMI (5.2.5)

AccessException.java RemoteException.javaAlreadyBoundException.javaConnectException.java ServerException.javaConnectIOException.java ServerRuntimeException.javaMarshalException.java StubNotFoundException.javaUnexpectedException.javServerError.java UnknownHostException.javaNoSuchObjectException.java UnmarshalException.javaNotBoundException.java RMISecurityException.java RMISecurityManager.java

Remote.java MarshalledObject.javaNaming.javaactivationdgcRegistryserver

Page 20: 5/15/2015B.Ramamurthy1 Creating a Distributed System with RMI B.Ramamurthy

04/18/23 B.Ramamurthy 20

The role of proxy and skeleton (stub) in remote method invocation

object A object BskeletonRequestproxy for B

Reply

CommunicationRemote Remote referenceCommunication module modulereference module module

for B’s class& dispatcher

remoteclient server

servant

Object A invokes a remote object in Object B for which it holds a remote object reference.“System Model”

Page 21: 5/15/2015B.Ramamurthy1 Creating a Distributed System with RMI B.Ramamurthy

04/18/23 B.Ramamurthy 21

RMI Internals: Communication Module

Carries out request-reply protocol; On the client side {message type, message id, remote reference to object} are gathered and sent out. At most once invocation semantics;On the server side, it gets local reference for remote reference from remote reference module, invokes a dispatcher with this reference.

Page 22: 5/15/2015B.Ramamurthy1 Creating a Distributed System with RMI B.Ramamurthy

04/18/23 B.Ramamurthy 22

RMI Internals: Remote Reference module

Responsible for translating between local and remote object references and for creating remote object references.A remote object table has a mapping between local and remote references. A table at server (entry for object ref for B) and a table at client (entry for object ref for proxy B).

Page 23: 5/15/2015B.Ramamurthy1 Creating a Distributed System with RMI B.Ramamurthy

04/18/23 B.Ramamurthy 23

RMI Internals: Remote References

Action of remote reference module: See RemoteRef.java interface When a remote object is to be passed as

argument or result for the first time, the remote ref is asked to create a remote ref object which is added to the table.

When a remote object reference arrives in a request or reply, the remote ref module is asked for corresponding local object ref, which may either a proxy or remote object. If it is not in the table RMI runtime creates it and asks remote ref module to add it to the table.

Page 24: 5/15/2015B.Ramamurthy1 Creating a Distributed System with RMI B.Ramamurthy

04/18/23 B.Ramamurthy 24

RMI softwareLayer of software between application level objects and communication and remote reference modules: “Middleware”Proxy: provides remote access transparency. One proxy for every remote object in the client.Dispatcher: A server has one dispatcher and RemoteStub for each class representing a remote object.

It receives request message from comm. module It used MessageId to select appropriate method in RemoteStub. RemoteStub and dispatcher use same MessageId.

RemoteStub: A class of remote object has a that stands for the remote interface. All the access dependencies are hidden in this class. A remote object has a servant that directly implements the methods. Java 5 creates this dynamically.Binder: binds textual names to remote object references. RMIRegistry is a binder; Naming class; see fig.5.13 We will discuss this next.Server Threads: one thread per invocationDistributed garbage collection: See Andrew Birell’s paper [1995].

Page 25: 5/15/2015B.Ramamurthy1 Creating a Distributed System with RMI B.Ramamurthy

Reference

Java.rmi The remote method invocation guide, by E. Pitt and K. Mcniff, Addison Wesley, ISBN: 0-201-700043-3, 2001

04/18/23 B.Ramamurthy 25

Page 26: 5/15/2015B.Ramamurthy1 Creating a Distributed System with RMI B.Ramamurthy

Client M/C

JVM

04/18/23 B.Ramamurthy 26

Simple RMI System Model

Remote interface

Host M/C

ClientApp

RegistryJVM

server

server

Page 27: 5/15/2015B.Ramamurthy1 Creating a Distributed System with RMI B.Ramamurthy

Registry (singleton – per system - during production)

04/18/23 B.Ramamurthy 27

Name

Mortgage

Tempertur

Reference

Page 28: 5/15/2015B.Ramamurthy1 Creating a Distributed System with RMI B.Ramamurthy

Semantics of remote method invocation

• A remote method has to be declared to throw a remote exception.• Clients of a remote method should try, catch and deal with remote exceptions.• Arguments of object type to the remote method are passed by deep copy and not

by reference• Any results of object type returned by deep copy, not by reference• Any exception (object) thrown is also returned as deep copy• Java.lang.Object is specialized for remote objects and remote references• “At most once” semantics: idempotent: very important for transactional systems• Remote objects are subject to distributed garbage collection via reference

counting, before local garbage collection is applied.• To be accessible, a remote object must implement “remote” interface (or the

interface marked as Remote by the marker interface) and be exported to the RMI system.

• Execution of remote object is asynchronous but synchronicity is realized using the underlying network.

04/18/23 B.Ramamurthy 28

Page 29: 5/15/2015B.Ramamurthy1 Creating a Distributed System with RMI B.Ramamurthy

Serialization

Serialization is a the operation of encoding objects into stream of bytes: bytification.De-serialization is taking the bytes and constructing objects out of the byte stream.Is used to marshal and unmarshal arguments and results.If serialization is not addressed your distributed system will not work: whether it be your mobile systems or land networked system. A stumbling block for many who are new to DS.

04/18/23 B.Ramamurthy 29

Page 30: 5/15/2015B.Ramamurthy1 Creating a Distributed System with RMI B.Ramamurthy

Serialization (contd.)

In order for an object to be passed around in a DS it must implement Serializable interface (another marker interface: Remote was the first one we saw)For performance reasons you may want to specify the serialization version (though not required) serialVersionUID

04/18/23 B.Ramamurthy 30

Page 31: 5/15/2015B.Ramamurthy1 Creating a Distributed System with RMI B.Ramamurthy

Serialization (contd.) (not UML diagram)

04/18/23 B.Ramamurthy 31

A A

B

C

B

C

A

B

C

A

B

A

C2C1

Incorrectly de-serialized

Once an object is serialized, serialized object is reused

Page 32: 5/15/2015B.Ramamurthy1 Creating a Distributed System with RMI B.Ramamurthy

Reference

http://download.oracle.com/javase/6/docs/technotes/guides/rmi/index.html

04/18/23 B.Ramamurthy 32

Page 33: 5/15/2015B.Ramamurthy1 Creating a Distributed System with RMI B.Ramamurthy

RMI package: Registry

Naming is class that provided lookup, bind, unbind, rebind and list for remote object references: higher levelRegistry for a Registry interface: with the above methods at a lower level: you have to locate the registry object and then invoke the methods

rmi://host:port/nameFully qualified identification/reference for a

remote object.

04/18/23 B.Ramamurthy 33

Page 34: 5/15/2015B.Ramamurthy1 Creating a Distributed System with RMI B.Ramamurthy

Registry

You can create a registryStart a registryGet registry location: LocateRegistry classThen do binding, lookup etc.

04/18/23 B.Ramamurthy 34

Page 35: 5/15/2015B.Ramamurthy1 Creating a Distributed System with RMI B.Ramamurthy

UnicastRemoteObject

UnicastRemoteObject is a base for your remote object that provides simple transient point-point RMI servers.There are other features that we have not covered such as security model using policy files that is in the demo that we posted in handout#1

04/18/23 B.Ramamurthy 35

Page 36: 5/15/2015B.Ramamurthy1 Creating a Distributed System with RMI B.Ramamurthy

04/18/23 B.Ramamurthy 36

RMI Internals: Use of Reflection

What is reflection? See Reflection packageReflection enables Java code to discover information about the fields, methods and constructors of loaded classes, andTo use reflected fields, methods, and constructors to operate on their underlying counterparts on objects, within security restrictions. http://download.oracle.com/javase/tutorial/reflect/index.htmlReflection feature allowed for dynamic creation of stubs in Java 2 version onwards.Read more about reflection model in computing.

Page 37: 5/15/2015B.Ramamurthy1 Creating a Distributed System with RMI B.Ramamurthy

04/18/23 B.Ramamurthy 37

RMI Internals: Distributed Garbage Collection

Based on reference counts.Local garbage collectors and a distributed support.Each server holds the list of processes that hold remote object references: for example, B.HoldersWhen a client C first receives a remote reference to a particular remote object, say B, it makes a addRef(B) invocation to server of that remote object and then creates proxy; server adds C to B.Holders.When client C’s garbage collector finds that proxy is no longer reachable (ref count), it makes a removeRef(B) invocation to server and then deletes proxy; the server removes C from B.Holders.When B.Holders is empty, server’s local garbage collector will reclaim the space occupied B unless there are any local holders.These extra calls for updates occur during proxy creation and deletion and do not affect normal opertion.Tolerates communication failures: addRef() and removeRef() are idempotent: effects of N > 0 identical requests is the same as for a single request.If addRef() fails with an exception, proxy is not created, removeRef() is transmitted; removeRef() failures are dealt with by “leases” (Jini kind).

Page 38: 5/15/2015B.Ramamurthy1 Creating a Distributed System with RMI B.Ramamurthy

04/18/23 B.Ramamurthy 38

A Little bit of Reflection

Method class, invoke methodInvoke method requires two parameters: first the object to receive invocation, second an array of Object parameters.Invoke executes the method on the object and returns result as Object.Method M;Object result = M.invoke(String, Args);

Page 39: 5/15/2015B.Ramamurthy1 Creating a Distributed System with RMI B.Ramamurthy

04/18/23 B.Ramamurthy 39

Using Reflection in RMI

Proxy has to marshal info. about a method and its arguments into a request message.For a method it marshals an object of class Method into the request. It then adds an array of objects for the method’s arguments.The dispatcher unmarshals the Method object and its arguments from request message.The remote object reference is obtained from remote ref. table. The dispatcher then calls the “invoke” method on the object reference and array of arguments values.After the method execution the dispatcher marshals the result or any exceptions into the reply message.

Page 40: 5/15/2015B.Ramamurthy1 Creating a Distributed System with RMI B.Ramamurthy

04/18/23 B.Ramamurthy 40

Summary

We discussed designing a distributed system using RMIWe also looked at RMI internalWe also learned about marker interface, distributed garbage collection, object marshalling, registry, server-port binding, Naming class of RMI, …