Upload
richard-roche
View
221
Download
2
Tags:
Embed Size (px)
Citation preview
Using RMI–IIOP in the Using RMI–IIOP in the Development of Distributed Development of Distributed
ApplicationsApplicationsDr. P.G.Sarang, President & CEO, [email protected]
ABCOM Information Systems Private. Limited., Mumbai, India
Ms Nita P. Sarang, Consultant, [email protected]
CMC Limited, Mumbai, India
O'Reilly Conference on Java - Enterprise Java
Using RMI-IIOP in the Development of Distributed Applications
2
RMIRMI
Remote Method InvocationSun’s programming model for
distributed objectsJava-based
O'Reilly Conference on Java - Enterprise Java
Using RMI-IIOP in the Development of Distributed Applications
3
RMI – merits/demeritsRMI – 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
O'Reilly Conference on Java - Enterprise Java
Using RMI-IIOP in the Development of Distributed Applications
4
IIOPIIOP
Internet Inter-Operable ProtocolOMG’s programming model for
distributed objectsLanguage neutral
O'Reilly Conference on Java - Enterprise Java
Using RMI-IIOP in the Development of Distributed Applications
5
IIOP – merits/demeritsIIOP – merits/demerits
Advantages– Interoperability
• Between different ORB vendors• Between different languages
Disadvantages– Need to learn Interface Definition Language
(IDL)– Complex Programming
O'Reilly Conference on Java - Enterprise Java
Using RMI-IIOP in the Development of Distributed Applications
6
RMI/IIOP SuitabilityRMI/IIOP Suitability
A pure RMI Java solution is suitable for new developments
For legacy applications, a CORBA wrapper is required for protecting existing investments
How do we achieve How do we achieve best best
of both worlds?of both worlds?
RMI-IIOP Marriage
O'Reilly Conference on Java - Enterprise Java
Using RMI-IIOP in the Development of Distributed Applications
8
ProposalProposal
A new protocol will confuse the userRMI-IIOP Merger should protect
investment in existing binariesReverse Mappings of RMI Interfaces
to CORBA IDLOMG is required to support Object
by Value (OBV)
O'Reilly Conference on Java - Enterprise Java
Using RMI-IIOP in the Development of Distributed Applications
9
RequirementsRequirements
Existing RMI Clients and Servers both need upgrade to support IIOP
O'Reilly Conference on Java - Enterprise Java
Using RMI-IIOP in the Development of Distributed Applications
10
RMI-IIOP ScenarioRMI-IIOP Scenario
RMI-IIOPClient
CORBAClient
CORBAServer
IIOP
IIOP
How do we convert How do we convert RMIRMI Application Application
to to RMI-IIOPRMI-IIOP Application? Application?
O'Reilly Conference on Java - Enterprise Java
Using RMI-IIOP in the Development of Distributed Applications
12
Converting RMI to RMI-IIOPConverting 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
O'Reilly Conference on Java - Enterprise Java
Using RMI-IIOP in the Development of Distributed Applications
13
ToolsTools
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
O'Reilly Conference on Java - Enterprise Java
Using RMI-IIOP in the Development of Distributed Applications
14
MigrationMigration
Converting existing RMI applications to RMI-IIOP applications.
Using Java-IDL to develop RMI-IIOP applications
Converting existing RMI Interfaces to CORBA IDL
Migration – Case 1
Existing RMI to RMI-IIOP
O'Reilly Conference on Java - Enterprise Java
Using RMI-IIOP in the Development of Distributed Applications
16
RMI to RMI-IIOPRMI to RMI-IIOP
IIOP
RMI Java Client
RMI JavaServer
tie class
rmic -iiopComplier
stub class
RMIImplementation
O'Reilly Conference on Java - Enterprise Java
Using RMI-IIOP in the Development of Distributed Applications
17
RMI to RMI-IIOPRMI to RMI-IIOP
1. Converting Server Extend your implementation class from
PortableRemoteObject rather than UnicastRemoteObject:
Use JNDI naming service rather than rmiregistry.
2. Converting Client Use JNDI naming service to locate object Use PortableRemoteObject.narrow() method
rather than Java type cast.
O'Reilly Conference on Java - Enterprise Java
Using RMI-IIOP in the Development of Distributed Applications
18
Converting Server - Step 1Converting Server - Step 1
Use PortableRemoteObject rather than UnicastRemoteObject
import javax.rmi.PortableRemoteObject;…public class ComputeImpl extends
PortableRemoteObject implements Compute {
…}
O'Reilly Conference on Java - Enterprise Java
Using RMI-IIOP in the Development of Distributed Applications
19
Converting Server - Step 2Converting Server - Step 2
Use JNDIimport javax.naming.*;…ReplaceNaming.rebind("//localhost/ComputeServer", obj);withjava.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);
O'Reilly Conference on Java - Enterprise Java
Using RMI-IIOP in the Development of Distributed Applications
20
Converting Client - Step 1Converting Client - Step 1
Use JNDIReplace
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");
O'Reilly Conference on Java - Enterprise Java
Using RMI-IIOP in the Development of Distributed Applications
21
Converting Client - Step 2Converting Client - Step 2
Replace java typecast with a call to narrow methodReplace
Compute TaxObj = (Compute)obj;
With
Compute TaxObj = (Compute)PortableRemoteObject.narrow (obj, Compute.class);
O'Reilly Conference on Java - Enterprise Java
Using RMI-IIOP in the Development of Distributed Applications
22
CompilingCompiling
Compile Java Source Filesjavac –d . *.java
Generate Stub and Tie Classesrmic –iiop <ImplClass>
Example:
rmic –iiop –d . com.abcom.tax.ComputeImpl
O'Reilly Conference on Java - Enterprise Java
Using RMI-IIOP in the Development of Distributed Applications
23
Running – Step 1Running – Step 1
Use JNDI Name Server rather than rmiregistry
Start the JNDI Name Server with following command
start tnameserv (on Windows)
tnameserv & (on unix)
O'Reilly Conference on Java - Enterprise Java
Using RMI-IIOP in the Development of Distributed Applications
24
Running – Step 2Running – Step 2
Start the Serverjava <RemoteServer>
Example:
java com.abcom.tax.ComputeImpl
Start the clientJava <RemoteClient>
Example:
java Client
Migration – Case 2
IDL to RMI-IIOP
O'Reilly Conference on Java - Enterprise Java
Using RMI-IIOP in the Development of Distributed Applications
26
StepsSteps
Write Java IDLUse idlj compiler – Generates Java Mappings– Generates stubs and skeletons
Implement ServerRun Server and register with JNDI
serviceDevelop Client and test
O'Reilly Conference on Java - Enterprise Java
Using RMI-IIOP in the Development of Distributed Applications
27
ExampleExample
Sample Java IDLmodule abcom{
interface tax {
float CalculateTax(in float Amount);
};
};
idlj –fall sample.idl
O'Reilly Conference on Java - Enterprise Java
Using RMI-IIOP in the Development of Distributed Applications
28
Generated FilesGenerated Files
Compiler generates following files in abcom Java package– _taxImplBase.java– _taxStub.java– tax.java– taxHelper.java– taxHolder.java– taxOperations.java
Migration – Case 3
Existing
Java Interfaces to IDL
O'Reilly Conference on Java - Enterprise Java
Using RMI-IIOP in the Development of Distributed Applications
30
RMI to IDLRMI to IDL
Use rmic to produce idlrmic –idl <ImplClass>
Map the generated idl to the desired language and provide implementation.
O'Reilly Conference on Java - Enterprise Java
Using RMI-IIOP in the Development of Distributed Applications
31
RMI to IDLRMI to IDL
RMIInterface
Impl. class
rmic -idl IDL IDL to C++
C++ CORBAServer
rmic -iiop RMI-IIOPClient
IIOP
O'Reilly Conference on Java - Enterprise Java
Using RMI-IIOP in the Development of Distributed Applications
32
Sample Java Remote InterfaceSample 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;
}
O'Reilly Conference on Java - Enterprise Java
Using RMI-IIOP in the Development of Distributed Applications
33
Generated IDLGenerated IDL
#include "orb.idl"…module com {
module abcom {module tax { interface Compute { float SalesTax(in float arg0 );
};…};
};};
O'Reilly Conference on Java - Enterprise Java
Using RMI-IIOP in the Development of Distributed Applications
34
LimitationsLimitations
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
O'Reilly Conference on Java - Enterprise Java
Using RMI-IIOP in the Development of Distributed Applications
35
OBV – Parameter ObjectsOBV – Parameter Objects
Examplepublic class Server extends PortableRemoteObject implements Compute {…public void printInvoice(Invoice inv)throws RemoteException {
…}
} rmic –idl Server
O'Reilly Conference on Java - Enterprise Java
Using RMI-IIOP in the Development of Distributed Applications
36
Parameter Objects – Generated Parameter Objects – Generated FilesFiles
Following IDL files are generated– Compute.idl– Invoice.idl
O'Reilly Conference on Java - Enterprise Java
Using RMI-IIOP in the Development of Distributed Applications
37
Parameter Objects – Parameter Objects – Compute.idlCompute.idl
valuetype Invoice;
…
interface Compute {
void printInvoice(in ::Invoice arg0 );
};
O'Reilly Conference on Java - Enterprise Java
Using RMI-IIOP in the Development of Distributed Applications
38
Parameter Objects – Invoice.idlParameter Objects – Invoice.idl
valuetype Invoice { private long quantity;
private long totalAmt;
private ::CORBA::WStringValue itemDesc;
factory create( );
};
O'Reilly Conference on Java - Enterprise Java
Using RMI-IIOP in the Development of Distributed Applications
39
OBV – Returning objectsOBV – Returning objects
Examplepublic class Server extends PortableRemoteObject implements Compute {…public Invoice computeInvoice()throws
RemoteException {…
}} rmic –idl Server
O'Reilly Conference on Java - Enterprise Java
Using RMI-IIOP in the Development of Distributed Applications
40
Return Objects – Generated Return Objects – Generated FilesFiles
Following IDL files are generated.– Compute.idl– Invoice.idl
O'Reilly Conference on Java - Enterprise Java
Using RMI-IIOP in the Development of Distributed Applications
41
Return Objects – Compute.idlReturn Objects – Compute.idl
valuetype Invoice;
…
interface Compute {
…
::Invoice computeInvoice( );
};
Invoice.idl is same as in previous case
O'Reilly Conference on Java - Enterprise Java
Using RMI-IIOP in the Development of Distributed Applications
42
OBV – Dynamic DownloadingOBV – 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
O'Reilly Conference on Java - Enterprise Java
Using RMI-IIOP in the Development of Distributed Applications
43
Support for Objects by ValueSupport for Objects by Value
Supported in CORBA 2.3 specification
Initial support by Java IDL ORBSupport now added by Major ORB
vendorsSupport defined for Java and C++
ConclusionsConclusions
Thank YouThank You