1 / 45

Using RMI–IIOP in the Development of Distributed Applications

Using RMI–IIOP in the Development of Distributed Applications. Dr. P.G.Sarang, President & CEO, sarang@abcom.com ABCOM Information Systems Private. Limited., Mumbai, India Ms Nita P. Sarang, Consultant, nita@indiawatch.org.in CMC Limited, Mumbai, India. RMI. R emote M ethod I nvocation

Download Presentation

Using RMI–IIOP in the Development of Distributed Applications

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. Using RMI–IIOP in the Development of Distributed Applications Dr. P.G.Sarang, President & CEO, sarang@abcom.com ABCOM Information Systems Private. Limited., Mumbai, India Ms Nita P. Sarang, Consultant, nita@indiawatch.org.in CMC Limited, Mumbai, India

  2. RMI • Remote Method Invocation • Sun’s programming model for distributed objects • Java-based Using RMI-IIOP in the Development of Distributed Applications

  3. RMI – merits/demerits • Advantages • Ease of programming • No complicated Interface Definition Language (IDL) to learn • Disadvantages • Uses Proprietary Protocol • Java Remote Method Protocol (JRMP) • No cross-language support Using RMI-IIOP in the Development of Distributed Applications

  4. IIOP • Internet Inter-Operable Protocol • OMG’s programming model for distributed objects • Language neutral Using RMI-IIOP in the Development of Distributed Applications

  5. IIOP – merits/demerits • Advantages • Interoperability • Between different ORB vendors • Between different languages • Disadvantages • Need to learn Interface Definition Language (IDL) • Complex Programming Using RMI-IIOP in the Development of Distributed Applications

  6. RMI/IIOP Suitability • A pure RMI Java solution is suitable for new developments • For legacy applications, a CORBA wrapper is required for protecting existing investments Using RMI-IIOP in the Development of Distributed Applications

  7. How do we achieve best of both worlds? RMI-IIOP Marriage

  8. Proposal • A new protocol will confuse the user • RMI-IIOP Merger should protect investment in existing binaries • Reverse Mappings of RMI Interfaces to CORBA IDL • OMG is required to support Object by Value (OBV) Using RMI-IIOP in the Development of Distributed Applications

  9. Requirements Existing RMI Clients and Servers both need upgrade to support IIOP Using RMI-IIOP in the Development of Distributed Applications

  10. IIOP IIOP RMI-IIOP Scenario RMI-IIOP Client CORBA Server CORBA Client Using RMI-IIOP in the Development of Distributed Applications

  11. How do we convert RMI Application to RMI-IIOP Application?

  12. Converting RMI to RMI-IIOP • Use PortableRemoteObject class instead of UnicastRemoteObject • Use Java Naming & Directory Interface (JNDI)instead of RMIRegistry • Use narrow method instead of Java Casts Using RMI-IIOP in the Development of Distributed Applications

  13. Tools • New rmic compiler • Converts Java Interfaces to IDL • Generates IIOP Stubs and tie classes • New idlj compiler • Maps IDL to Java • Generates IIOP Stubs and tie classes Using RMI-IIOP in the Development of Distributed Applications

  14. Migration • Converting existing RMI applications to RMI-IIOP applications. • Using Java-IDL to develop RMI-IIOP applications • Converting existing RMI Interfaces to CORBA IDL Using RMI-IIOP in the Development of Distributed Applications

  15. Migration – Case 1 Existing RMI to RMI-IIOP

  16. tie class RMI Java Server stub class rmic -iiop Complier IIOP RMI Java Client RMI to RMI-IIOP RMI Implementation Using RMI-IIOP in the Development of Distributed Applications

  17. RMI to RMI-IIOP • Converting Server • Extend your implementation class from PortableRemoteObject rather than UnicastRemoteObject: • Use JNDI naming service rather than rmiregistry. • Converting Client • Use JNDI naming service to locate object • Use PortableRemoteObject.narrow() method rather than Java type cast. Using RMI-IIOP in the Development of Distributed Applications

  18. Converting Server - Step 1 • Use PortableRemoteObject rather than UnicastRemoteObject import javax.rmi.PortableRemoteObject; … publicclassComputeImplextends PortableRemoteObject implementsCompute { … } Using RMI-IIOP in the Development of Distributed Applications

  19. Converting Server - Step 2 • Use JNDI import javax.naming.*; … Replace Naming.rebind("//localhost/ComputeServer", obj); with java.util.Properties env = System.getProperties(); env.put ("java.naming.factory.initial", "com.sun.jndi.cosnaming.CNCtxFactory"); env.put ("java.naming.provider.url", "iiop://localhost:900"); Context ic = new InitialContext(env); ic.rebind ("//localhost/ComputeServer", obj); Using RMI-IIOP in the Development of Distributed Applications

  20. Converting Client - Step 1 • Use JNDI Replace Object obj = Naming.lookup ("ComputeServer"); With java.util.Properties env = System.getProperties(); env.put ("java.naming.factory.initial", "com.sun.jndi.cosnaming.CNCtxFactory"); env.put ("java.naming.provider.url", "iiop://localhost:900"); Context ic = new InitialContext(env); Object obj = ic.lookup ("//localhost/ComputeServer"); Using RMI-IIOP in the Development of Distributed Applications

  21. Converting Client - Step 2 • Replace java typecast with a call to narrow method Replace Compute TaxObj = (Compute)obj; With Compute TaxObj = (Compute)PortableRemoteObject.narrow (obj, Compute.class); Using RMI-IIOP in the Development of Distributed Applications

  22. Compiling • Compile Java Source Files javac –d . *.java • Generate Stub and Tie Classes rmic –iiop <ImplClass> Example: rmic –iiop –d . com.abcom.tax.ComputeImpl Using RMI-IIOP in the Development of Distributed Applications

  23. Running – Step 1 • Use JNDI Name Server rather than rmiregistry • Start the JNDI Name Server with following command start tnameserv (on Windows) tnameserv & (on unix) Using RMI-IIOP in the Development of Distributed Applications

  24. Running – Step 2 • Start the Server java <RemoteServer> Example: java com.abcom.tax.ComputeImpl • Start the client Java <RemoteClient> Example: java Client Using RMI-IIOP in the Development of Distributed Applications

  25. Migration – Case 2 IDL to RMI-IIOP

  26. Steps • Write Java IDL • Use idlj compiler • Generates Java Mappings • Generates stubs and skeletons • Implement Server • Run Server and register with JNDI service • Develop Client and test Using RMI-IIOP in the Development of Distributed Applications

  27. Example • Sample Java IDL module abcom{ interface tax { float CalculateTax(in float Amount); }; }; • idlj –fall sample.idl Using RMI-IIOP in the Development of Distributed Applications

  28. Generated Files • Compiler generates following files in abcom Java package • _taxImplBase.java • _taxStub.java • tax.java • taxHelper.java • taxHolder.java • taxOperations.java Using RMI-IIOP in the Development of Distributed Applications

  29. Migration – Case 3 Existing Java Interfaces to IDL

  30. RMI to IDL • Use rmic to produce idl rmic –idl <ImplClass> • Map the generated idl to the desired language and provide implementation. Using RMI-IIOP in the Development of Distributed Applications

  31. rmic -idl IDL IDL to C++ Impl. class C++ CORBA Server IIOP rmic -iiop RMI-IIOP Client RMI to IDL RMI Interface Using RMI-IIOP in the Development of Distributed Applications

  32. Sample Java Remote Interface package com.abcom.tax; import java.rmi.Remote; import java.rmi.RemoteException; public interface Compute extends Remote { float SalesTax (float Amount) throws RemoteException; } Using RMI-IIOP in the Development of Distributed Applications

  33. Generated IDL #include "orb.idl" … module com { module abcom { module tax { interface Compute { float SalesTax(in float arg0 ); }; … }; }; }; Using RMI-IIOP in the Development of Distributed Applications

  34. Limitations • RMI supports passing objects by value in both parameters and method return types • CORBA 2.3 specification now supports Object by Value (OBV) • CORBA inout, out parameters not supported Using RMI-IIOP in the Development of Distributed Applications

  35. OBV – Parameter Objects • Example public class Server extends PortableRemoteObject implements Compute { … public void printInvoice(Invoice inv)throws RemoteException { … } } • rmic –idl Server Using RMI-IIOP in the Development of Distributed Applications

  36. Parameter Objects – Generated Files Following IDL files are generated • Compute.idl • Invoice.idl Using RMI-IIOP in the Development of Distributed Applications

  37. Parameter Objects – Compute.idl valuetype Invoice; … interface Compute { void printInvoice(in ::Invoice arg0 ); }; Using RMI-IIOP in the Development of Distributed Applications

  38. Parameter Objects – Invoice.idl valuetype Invoice { private long quantity; private long totalAmt; private ::CORBA::WStringValue itemDesc; factory create( ); }; Using RMI-IIOP in the Development of Distributed Applications

  39. OBV – Returning objects • Example public class Server extends PortableRemoteObject implements Compute { … public Invoice computeInvoice()throws RemoteException { … } } • rmic –idl Server Using RMI-IIOP in the Development of Distributed Applications

  40. Return Objects – Generated Files Following IDL files are generated. • Compute.idl • Invoice.idl Using RMI-IIOP in the Development of Distributed Applications

  41. Return Objects – Compute.idl valuetype Invoice; … interface Compute { … ::Invoice computeInvoice( ); }; • Invoice.idl is same as in previous case Using RMI-IIOP in the Development of Distributed Applications

  42. OBV – Dynamic Downloading • Remote classes for parameter objects can be dynamically downloaded using RMI class loading mechanism • Requires setting of java.rmi.server.codebase environment variable Using RMI-IIOP in the Development of Distributed Applications

  43. Support for Objects by Value • Supported in CORBA 2.3 specification • Initial support by Java IDL ORB • Support now added by Major ORB vendors • Support defined for Java and C++ Using RMI-IIOP in the Development of Distributed Applications

  44. Conclusions

  45. Thank You

More Related