1 / 16

Presentation 18: RMI introduction

Presentation 18: RMI introduction. Goals of this lesson. After this 35 min. lesson you will be : Introduced to Java RMI Ready to present RMI’s position in the Middleware technology family on class You will not: Be an RMI expert. Java RMI.

binh
Download Presentation

Presentation 18: RMI introduction

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. Presentation 18:RMI introduction

  2. Goals of this lesson • After this 35 min. lesson you will be: • Introduced to Java RMI • Ready to present RMI’s position in the Middleware technology family on class • You will not: • Be an RMI expert.

  3. Java RMI • In Java 1.0 object communication was confined to objects in one Virtual Machine (VM) • Sun decided to introduce inter VM communication • Remote Method Invocation (RMI) from Java 1.1 supports communication between different VMs, potentially across the network • Provides tight OO integration with Java • Work in heterogeneous environment (servers) • BUT ONLY with Java (so far) – so no language transparency

  4. Java RMI features • Build on Java’s existing object model -> easy • No need for IDL – use Java interfaces • Arguments & return values can be all types specializing java.io.Serializable or java.rmi.Remote • Dynamic loading of classes • Use of build-in Java Security Manager • Distributed Garbage Collection • Integrates with CORBA (later) • BUT NOT IN J2ME!!! (use SOAP) • J2ME CDC has an RMI profile!

  5. Wire Protocol • Java RMI wire protocol: • JRMP (Java Remote Method Protocol) OR • IIOP (Internet Inter-ORB Protocol) for CORBA connectivity • Both build on top of TCP/IP • JRMP more advanced than IIOP • Other Java RMI specification implementors • Historic: BEA Weblogic, Object Voyager, NinjaRMI • Object Voyager’s was JRMP compatible • Others were not • IIOP compatibility can not be guaranteed

  6. Called Caller Caller Called Stub Local Java call vs. Java RMI call Similar to SOAP and CORBA – using Proxy Caller Stub Transport Layer (e.g. TCP or UDP)

  7. Server Stub Generation Client Stub Generation Server Coding Client Coding Development Steps – RMI & CORBA & SOAP CORBA AXISSOAP Design J2SE JDK CORBA: IDL Java2WSDL Interface Definition SOAP: WSDL Start with Server Interface Coding: JAVA RMI: JAVA interface WSDL2JAVA CORBA: IDLC RMI: rmic RMI: JAVA C++, Java … C++, Java … ORB rmiregistry Server Registration

  8. Stub Generation - in SOAP & CORBA Team.wsdl Team.idl WSDL-compiler Teamcl.hh Teamsv.hh Teamcl.cc Teamsv.cc included in generates reads

  9. Stub Generation in Java RMI NOTE: In fact, it is the HelloImpl that is used! Hello.java From Java v. 1.5 no rmic comp is needed rmic Compiler From RMI v. 1.2 no skeleton is generated HelloImpl_Stub.class HelloImpl_Skeleton.class package examples.hello; import java.rmi.Remote; import java.rmi.RemoteException; public interface Hello extends Remote { String sayHello() throws RemoteException; void someOther(String param) throws RemoteException; } Must Extend from Interface Remote

  10. Java compiler - javac Java compiler - javac Client Server RMI Client and ServerImplementation Hello.java HelloClient.java HelloImpl.java rmic Compiler HelloImpl_Stub.class HelloImpl_Skeleton.class included in generates reads

  11. package examples.hello; import java.rmi.Naming; import java.rmi.RemoteException; import java.rmi.RMISecurityManager; import java.rmi.server.UnicastRemoteObject; public class HelloImplextendsUnicastRemoteObjectimplementsHello { public HelloImpl() throws RemoteException { super(); } public String sayHello() { return "Hello World! ; } public static void main(String args[]) { // Create and install a security manager //if (System.getSecurityManager() == null) { // System.setSecurityManager(new RMISecurityManager()); //} try { HelloImplobj = new HelloImpl(); // Bind this object instance to the name "HelloServer" Naming.rebind("rmi://192.168.1.101/HelloServer", obj); System.out.println("HelloServer bound in registry"); } catch (Exception e) { System.out.println("HelloImpl err: " + e.getMessage()); e.printStackTrace(); } } } Server object (HelloImpl.java) Extend UnicastRemote and implemet Hello Interfacet Implement all methods from interface Hello.java Security manager needs a security policy – for access control (i.e. file system). Instantiate a new object and register (bind it) in the ”rmiregistry” ”rmiregistry” is a simpel name server with methods to bind objects (bind/rebind) – and Find them again (lookup) –> client

  12. package examples.hello; import java.rmi.Naming; import java.rmi.RemoteException; public class HelloClient { public static void main(String args[]) { try { Helloobj = (Hello)Naming.lookup("rmi://192.168.1.101/HelloServer"); String message = obj.sayHello(); System.out.println(message); } catch (Exception e) { System.out.println("HelloApplet exception: " + e.getMessage()); e.printStackTrace(); } } } Client object (HelloClient.java) ”lookup” the HelloServer – and call Method sayHello() on Stub AND THAT’S IT! Remember – that the stub and skeleton classes get generated by the ”rmic” compiler

  13. Architecture coded manually Client Server lookup bind Registry Activation Stub Skeleton Interfaces Interfaces rmic generated rmic generated RMI Runtime ( rmid ,rmiregistry )

  14. Things to Remember • No attributes / properties in Java Interfaces -> RMI does not support attributes • Attributes must be represented as set and get operations by the designer

  15. Things to remember II • Parameter passing different than normal Java in single VM • Atomic types are passed by value • Remote objects are passed by reference • Non-Remote objects are passed by value! • Reflexive: can return references to other objects • And of course – if an object is not on the client – the ByteCode gets transferred (the class incl. implementation) – if a codebase is defined

  16. Key Points • True and beautiful OO Middleware • Easy to learn – for Java developers • No need for a separate IDL (use Java Interfaces) • Distributed Garbage Collection • ByteCode transfers automatically (if codebase is defined) • Works in heterogene environments – but only with Java • No build-in services (except for the registry) • Depends on other API’s – JavaSpaces, JINI, JDBC, EJB, JDO etc. – integrated into a framework • Not ”firewall friendly”

More Related