2Essentials - UCSB Computer Science

Download Report

Transcript 2Essentials - UCSB Computer Science

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
– Naming
• Summary
2
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.
3
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.
4
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.
• Latency
Invocations take much longer to complete.
• Security
Arguments/returned value are sent over a network. Is
privacy an issue?
5
RMI/JRMP Architecture
• Stubs
• Marshalling
• RMI Threading & Network Connection
Management
• Distributed Garbage Collection
• Naming
6
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.
7
MyServer
CLIENT
MyServer Stub
RemoteRef
[host=myhost, port=1234, ObjID=0]
MyServer
<<call>>
JRMP
SERVER
<<send>>
JRMP
End-point
<<call>
ServerSocket
[port=1234]
<<access>>
MyServerImpl
exported objects
Object
table
8
MyServer instance maps to ObjID=0
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.
9
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;
}
10
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.
11
Implementing the Remote Interface
public class HelloWorldImpl extends UnicastRemoteObject
implements HelloWorld
{
public HelloWorldImpl() throws RemoteException {}
public String helloWorld( String name )
{
return “Hello “ + name + “!”;
}
}
12
Implementing the Remote Interface …
public class HelloWorldImpl implements HelloWorld
{
public HelloWorldImpl() throws RemoteException
{
UnicastRemoteObject.exportObject( this );
}
public String helloWorld( String name )
{
return “Hello “ + name + “!”;
}
}
13
Implementing the Remote Interface …
• UnicastRemoteObject constructor
exports the object
Makes it available for incoming invocations.
• The exportObject method does this
explicitly.
• Extending UnicastRemoteObject
inherits distributed implementations of:
– equals, hashCode, & toString.
14
RMI/JRMP Architecture
• Stubs
• Marshalling
• RMI Threading & Network Connection
Management
• Distributed Garbage Collection
• Naming
15
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
Serialization
Bytes
Deserialization
Copy of Foo
16
Dynamic Classloading
• We defer discussion of this until later.
17
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;
}
________________________________________________
18
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.
19
RMI/JRMP Architecture
• Stubs
• Marshalling
• RMI Threading & Network Connection
Management
• Distributed Garbage Collection
• Naming
20
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
21
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.
22
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.
23
RMI/JRMP Architecture
• Stubs
• Marshalling
• RMI Threading & Network Connection
Management
• Distributed Garbage Collection
• Naming
24
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.
25
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.
26
RMI/JRMP Architecture
• Stubs
• Marshalling
• RMI Threading & Network Connection
Management
• Distributed Garbage Collection
• Naming
27
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.
28