overview of rmi architecture
DESCRIPTION
Overview of RMI Architecture. Introduction. Remote methods have: much greater latency new failure modes Do not distribute that which does not need to be. Introduction. Remote method invocation is like local method invocation, except : Arguments & return values must: - PowerPoint PPT PresentationTRANSCRIPT
Jump to first page
04/19/23
Introduction ...
Remote methods have:
much greater latency
new failure modes
Do not distribute that which does not
need to be
Jump to first page
04/19/23
Introduction ...
Remote method invocation is like local
method invocation, except:
Arguments & return values must:
implement Serializable, or
be Remote objects.
Arguments & return values are passed
by value.
Jump to first page
04/19/23
Other differences ... An RMI client refers to a remote object
via a Remote interface (it may have many).
The object methods: equals() hashCode(), toString()are overridden by java.rmi.RemoteObject.For example, the toString value includes
transport info (network protocol, host name, & port number)
Jump to first page
04/19/23
Remote Object Structure
To apply a remote method (y) to a remote object (x): x.y()
x must be a reference to a remote object.
The RMI client gets this reference: from a rmiregistry or as the return value of a prior remote
method invocation
Jump to first page
04/19/23
Reference from Registry
Client
rmiregistry
Server
1. Register service2. Lookup service
3. Invoke method
Jump to first page
04/19/23
Remote Objects Implement the Remote Interface A remote object must implement at
least 1 interface that extends the
java.rmi.Remote interface.
Only those methods declared in the
interface can be invoked remotely.
A diagram follows ...
Jump to first page
04/19/23
The Object Hierarchy
java.lang.Object
java.rmi.server.RemoteObject
java.rmi.server.RemoteServer
YourRemoteObject
java.rmi.server.UnicastRemoteObject
java.rmi.Remote
YourRemoteInterface
InterfacesClasses
Jump to first page
04/19/23
RMI System Architecture
Transport Layer
Remote Reference Layer
Stub Skeleton
RMI Client RMI Server
Proxy Layer
Application Layer
Jump to first page
04/19/23
Application Layer
No interface description language (IDL)
The server application:
Implements the remote interface that
the client uses.
Exports the object whose methods are
invoked remotely (implicitly by
extending UnicastRemoteObject)
Registers itself with the rmiregistry.
Jump to first page
04/19/23
Application Layer ...
The client application:
Gets reference to remote object (o)
Casts reference as remote interface (t)
Applies methods (m)
Jump to first page
04/19/23
Proxy Layer: Stub
The stub is the client’s proxy for the
remote object. It:
marshals arguments
unmarshals returned values
can be typed as any of the remote
object’s remote interfaces
Jump to first page
04/19/23
Proxy Layer: Skeleton
The skeleton is the server’s proxy for
the remote object. It:
Un-marshals arguments
dispatches actual method
marshals returned values
Jump to first page
04/19/23
Remote Reference Layer
An abstraction between the proxy layer
and the transport layer.
It’s mostly reserved for future
development:
replicated objects
persistent objects
connection recovery
Jump to first page
04/19/23
Transport Layer
This layer implements machine-to-
machine communication.
It defaults to TCP/IP.
It can be overridden if you want to: encrypt streams
compress streams
perform other security & performance
enhancements
Jump to first page
04/19/23
Name Service Remote object registers itself with name
server: rmiregistry Clients get reference to remote object by
looking up object’s reference in rmiregistry. There are 2 ways:
1 rmiregistry/machine for all applications on a well-known port.
Application has its own rmiregistry on its own port.
Jump to first page
04/19/23
Garbage Collection A remote object can implement
java.rmi.server.Unreferenced interface.
Method unreferenced is invoked when the object is
no longer referenced: You can do “clean up”.
If network fails, an object may be wrongly
collected.
Referencing a non-existent object causes a
RemoteException to be thrown.
Jump to first page
04/19/23
Class Loaders
Class loaders dynamically load classes as needed.
The RMIClassLoader loads the stub & skeleton classes, & any utility classes they need.
For stub & skeleton classes, it looks in the directory named in the system property: java.rmi.server.codebase, set by the -D flag of the java interpreter.
Jump to first page
04/19/23
Security
Eavesdropping: Secure Sockets Layer (SSL) can be used instead of TCP.
Misbehaving code: RMI requires a security manager. Stand-alone applications set the security
manager in main() . System.setSecurityManager(new
RMISecurityManager());
prohibits stub classes from doing anything over the network except loading necessary classes.
Jump to first page
04/19/23
Performance
RMI is simple to use. RMI is not as fast as local MI. RMI is not as fast as special-purpose
communication protocols can be. RMI may not be efficient enough for
high-performance real-time applications, such as video streaming. If you override TCP with a faster
protocol, RMI may be fine.
Jump to first page
04/19/23
Summary: RMI Server
To write an RMI server:
Define interface that extends Remote.
Define a class that extends
UnicastRemoteObject & implements
your remote interface.
Its main():
Registers itself in the registry.
Jump to first page
04/19/23
Summary: RMI Client
ExecuteSystem.setSecurityManager( new RMISecurityManager() );
Get a reference to the remote object by
looking it up in rmiregistry.
Apply methods as though it were local.
Behind the scenes, object proxies,
stubs & skeletons, are communicating.