1 / 14

15 - RMI

15 - RMI. Java RMI. Architecture Example Deployment. RMI is a part of J2SE (standard edition), but is used by J2EE) A J2EE server is not nessesary for using RMI. Communikation between different machines. Sockets, RPC and RMI

elroy
Télécharger la présentation

15 - RMI

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. 15 - RMI

  2. Java RMI Architecture Example Deployment RMI is a part of J2SE (standard edition), but is used by J2EE) A J2EE server is not nessesary for using RMI

  3. Communikation between different machines • Sockets, RPC and RMI • For sockets a common protocol on application level is needed to encode and decode sent and received messages • RPC (Remote Procedure Call) pulls the abstraction level for communication up ti procedural level • RMI (Remote Method Invocation) handles communication between objects in different adress spaces.

  4. Distributed Object-application (DOA) • A application, where the server provides remote objects on which methods might be activated from different clients, is called a hvis metoder kan kaldes fra forskellige klienter ”distributed object-application” • DOA needs to: • Localize remote objects • Communicate with remote objects • Handle byte code for objects that are send as a parameter or a return value • RMI can handle this

  5. Architecture

  6. Example for building a RMI-application • The steps: • Contruct an interface (remote) • Implement the interface • Create a server class • Create a client class • Compile it (javac og rmic) • Run the application start rmi-registry (not nessesary from java 1.5), server and klient

  7. Oprettelse af interface import java.rmi.*; public interface Hello extends Remote { public String getGreeting() throws RemoteException; } • Java.rmi.Remote is a interface that all RMI-application must inherit from • Java.rmi.RemoteException is the superclass for exceptions that RMI can throw and shall always be handled

  8. Implementation af interfacet import java.rmi.*; import java.rmi.server.*; public class HelloImpl extends UnicastRemoteObject implements Hello{ public HelloImpl() throws RemoteException { //Default constructor is implemented because of RemoteException } public String getGreeting() throws RemoteException { return ("Hello there!"); } }

  9. Server class //Server. import java.rmi.*; public class HelloServer{ private static final String HOST = "localhost"; public static void main(String[] args) throws Exception{ HelloImpl temp = new HelloImpl(); String rmiObjectName = "rmi://" + HOST + "/Hello"; //Could omit host name, since 'localhost' would be //assumed by default. Naming.rebind(rmiObjectName,temp); System.out.println("Binding complete...\n"); } }

  10. Client class import java.rmi.*; public class HelloClient{ private static final String HOST = "localhost"; public static void main(String[] args){ try{ Hello greeting = (Hello)Naming.lookup("rmi://" + HOST + "/Hello"); System.out.println("Message received: " + greeting.getGreeting()); } catch(ConnectException conEx){ System.out.println("Unable to connect to server!"); } catch(Exception e){ e.printStackTrace(); } } }

  11. Generate the stub • We still missing the piece of code that handles the communication. • It is placed in the file HelloImpl_Stub The file is generated by running rmic.exe på impl-filen:rmic –v1.2 HelloImpl From JDK 1.5 this is done automaticly

  12. How does it function? - Deployment • To make the client run: the HelloClient, Hello and HelloImpl_stubmust be present on the client • HelloServer, Hello, HelloImpl and HelloImpl_stub must be present on the server • The stub is a proxy class for the remote-object. The stub takes care of the communication between the client and the server by marshalling/unmarshalling • The client knows how to manipulate the server object because yhe server object implements the interface that is also known on the client

  13. RMIRegistry • Rmiregistry is a program that handles the nameservice. • Registry shall be started before the server is started(This is done automatically in jdk1.5+) • The rebind-method of the server binds a name (URL) to the implementation object on the server. • The client can use the lookup method to get a reference to the impl-object • Add your server files to classpath in order for rmiregistry to find them. • Rmiregistry is started from the command promt by: start rmiregistry

  14. Call semantics • When a method is called on a remote object, there is two ways of passing the parameters dependent of whether the parameter (and the return value) is a remote object or not. • If remote then is call-by-reference • If not then it is call-by-value (copy) • Objects that are sent by copy shall implement the interface Serializable

More Related