rmi ppt-2003

38
Java RMI CDP Tutorial Based on Based on the slides of Alexander Day Chaffee

Upload: kalaranjani1990

Post on 22-Nov-2014

3.629 views

Category:

Technology


0 download

DESCRIPTION

rmi ppt important

TRANSCRIPT

Page 1: Rmi ppt-2003

JavaRMI

CDP Tutorial

Based on

Based on the slides of Alexander Day Chaffee

Page 2: Rmi ppt-2003

TCP

Remote Objects (Diagram)Java Virtual Machine

Client Object

Java Virtual Machine

Remote Object

Page 3: Rmi ppt-2003

What is RMI?

RMI is an RPC system for an object based language.

Objects provide a natural granularity for the binding of functions. RMI allows a program to hold a reference to an object

on a remote system and to call that object’s methods. Client-Server architecture.

Server holds the object. Client holds a small stub that accesses the object on

the Server.

Page 4: Rmi ppt-2003

RMI Layers

TCPRemote Reference Layer

Transport Layer

Java Virtual Machine

Client Object

Remote Reference Layer

Transport Layer

Java Virtual Machine

Stub

Remote Object

Skeleton

Page 5: Rmi ppt-2003

Remote Objects Remote Objects

Live on server Accessed as if they were local

Page 6: Rmi ppt-2003

Remote References and Interfaces

Remote References Refer to remote objects Invoked on client exactly like local object

references Remote Interfaces

Declare exposed methods Implemented on client Like a proxy for the remote object

Page 7: Rmi ppt-2003

Stubs and Skeletons

Stub lives on client pretends to be remote object

Skeleton lives on server receives requests from stub talks to true remote object delivers response to stub

Page 8: Rmi ppt-2003

Remote Interfaces and Stubs

Remote Interface

StubRemote Object

(Server)Client Skeleton

implements implements

Page 9: Rmi ppt-2003

Registries

Name and look up remote objects Servers can register their objects Clients can find server objects and obtain a

remote reference A registry is a running process on a host

machine

Page 10: Rmi ppt-2003

RMI System ArchitectureClient Virtual Machine

Client

Server Virtual Machine

Stub

Remote Object

Skeleton

Registry Virtual Machine

“Fred”

Server

Page 11: Rmi ppt-2003

RMI FlowClient Virtual Machine

Client

Server Virtual Machine

Stub

Remote Object

Skeleton

Registry Virtual Machine

“Fred”

Server

1

2

1. Server Creates Remote Object2. Server Registers Remote Object

Page 12: Rmi ppt-2003

RMI FlowClient Virtual Machine

Client

Server Virtual Machine

Stub

Remote Object

Skeleton

Registry Virtual Machine

“Fred”

Server

4

3. Client requests object from Registry4. Registry returns remote reference(and stub gets created)

3

Page 13: Rmi ppt-2003

RMI FlowClient Virtual Machine

Client

Server Virtual Machine

Stub

Remote Object

Skeleton

Registry Virtual Machine

“Fred”

Server

6

5. Client invokes stub method6. Stub talks to skeleton7. Skeleton invokes remote object method

5 7

Page 14: Rmi ppt-2003

RMI Usage

Start registry Start server Run client

Page 15: Rmi ppt-2003

Creating Remote Objects

Define a Remote Interface extends java.rmi.Remote

Define a class that implements the Remote Interface extends java.rmi.RemoteObject or java.rmi.UnicastRemoteObject

Page 16: Rmi ppt-2003

Remote Interface Example

import java.rmi.*;

public interface Adder

extends Remote

{

public int add(int x, int y)

throws RemoteException;

}

Page 17: Rmi ppt-2003

Remote Class Exampleimport java.rmi.*;

import java.rmi.server.*;

public class AdderImpl extends UnicastRemoteObject implements Adder

{

public AdderImpl() throws RemoteException

{

// NOTE: !!!EMPTY CONSTRUCTOR!!!

}

public int add(int x, int y) throws RemoteException

{

return x + y;

}

}

Page 18: Rmi ppt-2003

Registering Remote Classes

start the registry running process

Unix: rmiregistry &

Windows: start /m rmiregistry

Page 19: Rmi ppt-2003

Registry CLASSPATH Registry VM needs to be able to find stub

file(s) You must set the CLASSPATH to include

the directory containing the stub file An easy way to check CLASSPATH is to use the javap command,

supplying a fully package qualified class name. It uses the current

CLASSPATH to find and print the interface to a class.

Page 20: Rmi ppt-2003

Create the server

Creates a new instance of the remote object

Registers it in the registry with a unique name

That’s it

Page 21: Rmi ppt-2003

RMI Server Example

try {

AdderImpl adder = new AdderImpl();

Naming.rebind("adder", adder);

System.err.println(“Bind successful”);

}

catch (RemoteException re) {

re.printStackTrace();

}

catch (MalformedURLException me) {

me.printStackTrace();

}

Page 22: Rmi ppt-2003

Launch the Server

% java AdderServer

Bind successful

Page 23: Rmi ppt-2003

Server Logging

invoke from command line

java

-Djava.rmi.server.logCalls=true YourServerImpl

or enable inside program

RemoteServer.setLog(System.err);

Page 24: Rmi ppt-2003

Creating an RMI Client

Find a registry use java.rmi.Naming

Lookup the name, returns a reference Cast the reference to the appropriate

Remote Interface Just use it!

Page 25: Rmi ppt-2003

RMI URLs

rmi://host[:port]/name default port is 1099 Specifies hostname of registry can also use relative URLs

name only assumes registry is on local host

Page 26: Rmi ppt-2003

RMI Client Example

Adder a = (Adder)//not AdderImpl Naming.lookup("rmi://server/adder");

int sum = a.add(2,2);

System.out.println("2+2=" + sum);

Page 27: Rmi ppt-2003

Remote Interfaces vs. Remote Classes

Remember that the reference is to an interface

You must make references, arrays, etc. out of the interface type, not the implementation type

You can’t cast the remote reference to a normal reference

So name your Remote Objects with “Impl” (so you don’t get confused)

Page 28: Rmi ppt-2003

Parameter Passing

Primitive types passed by value

Remote objects passed by reference

Non-remote objects passed by value uses Java Object Serialization

Page 29: Rmi ppt-2003

Callbacks

They just work Pass in a remote reference to a client

object Server object can call its methods

transparently Registry is out of the loop

Page 30: Rmi ppt-2003

Object Serialization

aka Persistence saves the state (data) of a particular

instance of an object serialize - to save unserialize - to load

Page 31: Rmi ppt-2003

Java Serialization

writes object as a sequence of bytes writes it to a Stream recreates it on the other end creates a brand new object with the old

data

Page 32: Rmi ppt-2003

java.io.Serializable Objects that implement the

java.io.Serializable interface are marked as serializable

Also subclasses Magically, all non-static and non-transient

data members will be serialized Actually, it’s not magic, it’s Reflection (it’s

done with mirrors) empty interface - just a marker It’s a promise

Page 33: Rmi ppt-2003

Not All Objects Are Serializable

Any object that doesn’t implement Serializable

Any object that would pose a security risk e.g. FileInputStream

Any object whose value depends on VM-specific information e.g. Thread

Any object that contains a (non-static, non-

transient) unserializable object (recursively)

Page 34: Rmi ppt-2003

NotSerializableException

thrown if you try to serialize or unserialize an unserializable object

maybe you subclassed a Serializable object and added some unserializable members

Page 35: Rmi ppt-2003

Incompatible Changes

If class has members added or removed, it becomes incompatible

java.io.InvalidClassException thrown if you try to deserialize an incompatible object stream

Page 36: Rmi ppt-2003

Limitations of RMI

Java-only but you can use JNI on the server

Uses TCP, not UDP At least two sockets per connection Untested for huge loads

Page 37: Rmi ppt-2003

Summary

RMI is a very clean API Easy way to write distributed programs Wire protocol may need improvement for

large-scale problems

Page 38: Rmi ppt-2003

Where to get more information

Harold, Java Network Programming (O’Reilly)

rmi-users mailing list ([email protected]) http:/ /www.developer.com/ (Gamelan) http:/ /www.javaworld.com/ (magazine) http:/ /www.stinky.com/ java/ (Alexander

Day Chaffee's site) Material from the previous semester