28
Java RMI Essentials Based on Mastering RMI Rickard Oberg

Java RMI Essentials

Embed Size (px)

DESCRIPTION

Java RMI Essentials. Based on Mastering RMI Rickard Oberg. Essentials of Remote Invocation. What is RMI? The Principles of RMI How Does RMI Differ from Ordinary Java RMI/JRMP Architecture Stubs Marshalling RMI Threading & Network Connection Management Distributed Garbage Collection - PowerPoint PPT Presentation

Citation preview

Page 1: Java RMI Essentials

Java RMI Essentials

Based on Mastering RMI

Rickard Oberg

Page 2: Java RMI Essentials

2

Essentials of Remote Invocation

• What is RMI?– The Principles of RMI– How Does RMI Differ from Ordinary Java

• RMI/JRMP Architecture– Stubs– Marshalling– RMI Threading & Network Connection

Management– Distributed Garbage Collection– Naming

• Summary

Page 3: Java RMI Essentials

3

What is RMI?

• RMI is a specification (API) for accessing

objects from a remote JVM.

• What is specified?

– How objects are to be coded.

– How objects can be located & invoked.

– How parameters & returned values are passed.

• Java Remote Method Protocol (JRMP) is

Sun’s implementation of the RMI API.

Page 4: Java RMI Essentials

4

The Principles of RMI

• Meta-principle

Make RMI like MI as much as possible.

• Objects are invoked by calling methods.

• Expose interfaces not implementation.

• Exceptions report errors in the computation.

• GC determines the lifecycle of objects.

• Get classes that are not part of system

classpath via classloading.

Page 5: Java RMI Essentials

5

How Does RMI Differ from Local MI?

• Remote exceptions– Remote methods throw java.rmi.RemoteExeption.

• Pass by value– All arguments are pass-by-value.– Serializing may hurt performance for large objects.

• LatencyInvocations take much longer to complete.

• SecurityArguments/returned value are sent over a network. Is

privacy an issue?

Page 6: Java RMI Essentials

6

RMI/JRMP Architecture

• Stubs

• Marshalling

• RMI Threading & Network Connection

Management

• Distributed Garbage Collection

• Naming

Page 7: Java RMI Essentials

7

Stubs

• Stub– The client has a proxy for the remote object: the stub.

– The stub implements the remote object’s interface[s].

– The RMI compiler (rmic) generates the stub.

– Remote methods invoked by the client are delegated to the JRMP engine.

– The JRMP forwards the call to the server.

– The server executes the method.

– The result is returned to the client.

Page 8: Java RMI Essentials

8

MyServer

MyServer Stub

RemoteRef[host=myhost, port=1234, ObjID=0]

JRMP<<call>>

CLIENT

MyServerImpl

MyServer ServerSocket[port=1234]

End-point

<<send>>

Object table

<<access>>

JRMP

exported objects

SERVER

<<call>

MyServer instance maps to ObjID=0

Page 9: Java RMI Essentials

9

The Remote Interface

• It is a set of remotely invoked methods.• It has the following characteristics:_______________________________________public interface MyRemoteInterface

extends java.rmi.Remote // possibly indirectly{

public <return_type> myMethod( <type> p1, … )throws java.rmi.RemoteException

// declare other remote methods …}

_______________________________________• All parameters & return type are serializable.

Page 10: Java RMI Essentials

10

The Hello Interface

package masteringrmi.helloworld.interfaces;

import java.rmi.Remote;

import java.rmi.RemoteException;

public interface HelloWorld extends Remote

{

public String helloWorld( String name )

throws RemoteException;

}

Page 11: Java RMI Essentials

11

The Hello Interface …

• Style: create a contract package

It contains the “contract” between client & server:

• Remote interfaces of server objects

• Application exceptions throwable by any remote interface

• Data container classes for data moved between client & server.

– Client & server get contract classes & interfaces.

– Server also gets implementation classes.

Page 12: Java RMI Essentials

12

Implementing the Remote Interface

public class HelloWorldImpl extends UnicastRemoteObject

implements HelloWorld

{

public HelloWorldImpl() throws RemoteException {}

public String helloWorld( String name )

{

return “Hello “ + name + “!”;

}

}

Page 13: Java RMI Essentials

13

Implementing the Remote Interface …

public class HelloWorldImpl implements HelloWorld

{

public HelloWorldImpl() throws RemoteException

{

UnicastRemoteObject.exportObject( this );

}

public String helloWorld( String name )

{

return “Hello “ + name + “!”;

}

}

Page 14: Java RMI Essentials

14

Implementing the Remote Interface …

• UnicastRemoteObject constructor exports the objectMakes it available for incoming invocations.

• The exportObject method does this explicitly.

• Extending UnicastRemoteObject inherits distributed implementations of: – equals, hashCode, & toString.

Page 15: Java RMI Essentials

15

RMI/JRMP Architecture

• Stubs

• Marshalling

• RMI Threading & Network Connection

Management

• Distributed Garbage Collection

• Naming

Page 16: Java RMI Essentials

16

Marshalling

• Marshalling creates a byte[] from an object.

• Unmarshalling does the reverse.

• To marshal, Java serializes the object.

• To unmarshal, Java deserializes the byte[].

public class foo implements Serializable

Foo Copy of FooBytesSerialization Deserialization

Page 17: Java RMI Essentials

17

Dynamic Classloading

• We defer discussion of this until later.

Page 18: Java RMI Essentials

18

Security

• To dynamically download stubs, the client: – Sets a security manager:

______________________________________________________import java.rmi.RMISecurityManager;. . .if ( System.getSecurityManager() == null )

System.setSecurityManager( new RMISecurityManager() ); ________________________________________________

– Has a policy file that permits downloading________________________________________________grant {

permission java.security.AllPermission;}________________________________________________

Page 19: Java RMI Essentials

19

Class Versioning

• Server changes are propagated to clients that

subsequently download the stub.

• What about running clients that already have

the stub?

• Basically, this is a problem.

– serial version UID can be used to detect

incompatibilities.

– Jini further ameliorates the version problem.

Page 20: Java RMI Essentials

20

RMI/JRMP Architecture

• Stubs

• Marshalling

• RMI Threading & Network Connection

Management

• Distributed Garbage Collection

• Naming

Page 21: Java RMI Essentials

21

RMI Threading & Network Connection Management

“Since RMI on the same remote object

may execute concurrently, a remote

object implementation needs to make

sure its implementation is thread-safe.”

The RMI specification, section 3.2

Page 22: Java RMI Essentials

22

Network Connections

• RMI specifies socket factory interfaces to get

sockets on the client & server:

– Java.rmi.server.RMIClientSocketFactory

– Java.rmi.server.RMIServerSocketFactory

• Override the default implementation

(to provide encryption, authentication, …)

Selecting an features at run time is desirable: Some

jobs want encryption, some do not.

• Custom implementations are discussed later.

Page 23: Java RMI Essentials

23

Threading Model

• The JRMP implementation for the server– Instantiates a thread for each connection.

– It listens for its associated client’s calls.

– It handles each call to completion.

• The JRMP implementation for the client– Concurrent calls from a client cause concurrent

threads connecting to the server.

– This may swamp a server.

– If your client makes concurrent calls, you may want a different implementation.

Page 24: Java RMI Essentials

24

RMI/JRMP Architecture

• Stubs

• Marshalling

• RMI Threading & Network Connection

Management

• Distributed Garbage Collection

• Naming

Page 25: Java RMI Essentials

25

Distributed Garbage Collection

• RMI has distributed garbage collection (DGC).• Server tracks clients who have its stub.• Server keeps a count of such clients.• Count is decremented when client:

– explicitly relinquishes reference OR– doesn’t renew its lease (default 10 min.), e.g., client crashed:

• “Leasing” is due to Miller & Drexler, in – Incentive Engineering for Computational Resource Management. K. E.

Drexler & M. S. Miller, B. A. Huberman (ed.), (Studies in Computer Science & Artificial Intelligence), 1988.

• If local & remote references == 0, it is garbage.

Page 26: Java RMI Essentials

26

The Unreferenced Interface

• A server can implement Unreferenced

• It has 1 method: unreferenced.

• It is called when there are no remote references to the object.

• Being bound in the RMI registry counts as a remote reference.– It must unbind itself before unreferenced

can be invoked.

Page 27: Java RMI Essentials

27

RMI/JRMP Architecture

• Stubs

• Marshalling

• RMI Threading & Network Connection

Management

• Distributed Garbage Collection

• Naming

Page 28: Java RMI Essentials

28

Naming

• Rmiregistry allows:

– A server to store its (serialized) stub on a

web server

– A client to download & deserialize the stub.

• The essential information: the url of the

serialized stub file.