Download presentation
Presentation is loading. Please wait.
1
Overview of RMI Architecture
10/14/2019 Peter Cappello
2
Introduction ... Remote methods have: much greater latency
new failure modes Do not distribute that which does not need to be 10/14/2019
3
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. 10/14/2019
4
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) 10/14/2019
5
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 10/14/2019
6
Reference from Registry
rmiregistry 2. Lookup service 1. Register service Client Server 3. Invoke method 10/14/2019
7
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 ... 10/14/2019
8
The Object Hierarchy Classes Interfaces java.lang.Object
java.rmi.Remote java.rmi.server.RemoteObject java.rmi.server.RemoteServer java.rmi.server.UnicastRemoteObject YourRemoteInterface 10/14/2019 YourRemoteObject
9
RMI System Architecture
RMI Client Application Layer RMI Server Stub Proxy Layer Skeleton Remote Reference Layer Transport Layer 10/14/2019
10
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. 10/14/2019
11
Application Layer ... The client application:
Gets reference to remote object (o) Casts reference as remote interface (t) Applies methods (m) 10/14/2019
12
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 10/14/2019
13
Proxy Layer: Skeleton The skeleton is the server’s proxy for the remote object. It: Un-marshals arguments dispatches actual method marshals returned values 10/14/2019
14
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 10/14/2019
15
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 10/14/2019
16
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. 10/14/2019
17
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. 10/14/2019
18
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. 10/14/2019
19
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. 10/14/2019
20
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. 10/14/2019
21
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. 10/14/2019
22
Summary: RMI Client Execute
System.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. 10/14/2019
Similar presentations
© 2025 SlidePlayer.com. Inc.
All rights reserved.