1 / 18

Presentation: RMI introduction

Presentation: 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, when and where to use it You will not: Be an RMI expert. More practice and theory is required. Outline.

elliot
Télécharger la présentation

Presentation: 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: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, when and where to use it • You will not: • Be an RMI expert. More practice and theory is required

  3. Outline • Theory: (35x2 min.) • Introduction to Java RMI • Group work: (35 min.) • Pro’s & con’s of Java RMI vs. SOAP vs. ICE vs. CORBA • When to use which technology… • Differences and equalities

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

  5. 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!

  6. Transaction-Oriented IBM CICS BEA Tuxedo Encina Message-Oriented IBM MQSeries DEC Message Queue NCR TopEnd (SOAP) RPC Systems ANSA Sun ONC OSF/DCE (SOAP) Object-Oriented OMG/CORBA DCOM Java/RMI (SOAP) Java RMI position Middleware

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

  8. 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)

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

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

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

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

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

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

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

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

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

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