1 / 28

Java RMI Essentials

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

wallyp
Download Presentation

Java RMI Essentials

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Java RMI Essentials Based on Mastering RMI Rickard Oberg

  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

  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.

  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.

  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. • Latency Invocations take much longer to complete. • Security Arguments/returned value are sent over a network. Is privacy an issue?

  6. RMI/JRMP Architecture • Stubs • Marshalling • RMI Threading & Network Connection Management • Distributed Garbage Collection • Naming

  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.

  8. CLIENT MyServer MyServer Stub JRMP RemoteRef [host=myhost, port=1234, ObjID=0] <<call>> SERVER <<send>> JRMP End-point <<call> MyServer ServerSocket [port=1234] <<access>> MyServerImpl Object table exported objects MyServer instance maps to ObjID=0

  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.

  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; }

  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.

  12. Implementing the Remote Interface public class HelloWorldImpl extends UnicastRemoteObject implementsHelloWorld { public HelloWorldImpl() throws RemoteException {} public String helloWorld( String name ) { return “Hello “ + name + “!”; } }

  13. Implementing the Remote Interface … public class HelloWorldImpl implementsHelloWorld { public HelloWorldImpl() throws RemoteException { UnicastRemoteObject.exportObject( this ); } public String helloWorld( String name ) { return “Hello “ + name + “!”; } }

  14. 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.

  15. RMI/JRMP Architecture • Stubs • Marshalling • RMI Threading & Network Connection Management • Distributed Garbage Collection • Naming

  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 Copy of Foo Foo Bytes Serialization Deserialization

  17. Dynamic Classloading • We defer discussion of this until later.

  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; } ________________________________________________

  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.

  20. RMI/JRMP Architecture • Stubs • Marshalling • RMI Threading & Network Connection Management • Distributed Garbage Collection • Naming

  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

  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.

  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.

  24. RMI/JRMP Architecture • Stubs • Marshalling • RMI Threading & Network Connection Management • Distributed Garbage Collection • Naming

  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.

  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.

  27. RMI/JRMP Architecture • Stubs • Marshalling • RMI Threading & Network Connection Management • Distributed Garbage Collection • Naming

  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.

More Related