In enterprise application there is likelihood that resources have to be access across multiple system to execute a business process. One of the Java's alternatives for distributed application is Far off Method Invocation (RMI).
Objective of the paper is understand how a RMI system works instantly scenarios and exactly how enterprise application can applied using java RMI API's. An enterprise allocated system is a couple of objects that isolates the consumers of services from the providers of services with a well-defined interface. In other words, clients are completely abstracted from the implementation of business method as data structure and executable code. This is how one can recognize with simple customer / server request with object structured distant invocation method model.
In the sent out enterprise thing model, a client sends a need message to a thing, which in turns analyzes the submission to decide what service to perform. This business entity service, selection could be performed by either the object or a broker.
Remote Method Invocation (RMI):
RMI is one of the possible ways to gain access to distributed business things from another JVM and RMI uses object serialization to marshal and unmarshal guidelines. If you want send objects over the wire, your class (object) need to implements Serializable interface.
Here is the RMI architecture and how RMI 's works internally.
RMI Transportation Layer
Client
Server
skeleton
stub
Interface
Interface
Client Process
Server Process
Process
According to sunlight site "Java Remote control Method Invocation (Java RMI) enables the programmer to produce distributed Java technology-based to Java technology-based applications, in which the methods of remote Java items can be invoked from other Java exclusive machines*, possibly on different hosts. RMI uses thing serialization to marshal and unmarshal variables and will not truncate types, aiding true object-oriented polymorphism. "
When a venture server process would like to export some remote method invocation based mostly service to consumer, it can so by registering remote method invocation empowered objects with its local rmiregistry (Registry user interface). Every remote control object is registered with a name consumer may use to guide it. A consumer can buy a reference point of stub to the remote control object by asking for for the remote subject by name through the Naming interface.
The argument for Naming. lookup() method is name of any remote subject and locates the object on the network. The object's completely certified name can be composed with number name dock and the name of the thing look like url syntax for the naming source.
Few of the terminology you need to know about RMI are the following.
rmiregistry -- A executable program used to bind distant object to names and that provides a bootstrap naming service which is employed by servers on the server machine. JVMs on consumer and server machines may then look up distant items and make distant method invocations.
rmic: The rmic compiler tool produces stub, and skeleton category files for remote control things. These classes' documents are generated from the compiled Java words classes that contain remote thing implementations (applied java. rmi. Remote control software).
skeleton : A skeleton for a remote subject is a JRMP standard protocol server side business object that contains a way which dispatch cell phone calls to the genuine remote subject realization.
stub: A proxy thing for a remote subject which is in charge of delegating method on distant things to the server where implementation of the actual remote object resides. A consumer program mention of a remote subject, therefore, is actually a reference to a local stub.
Remote Software: The Far off interface serves to recognize interfaces whose methods may be invoked from a non-local exclusive machine. Any object that is a remote object must straight or indirectly put into action this user interface.
Difference between RPC and RMI
Remote treatment call (RPC) is a network communication process with server and consumer architecture and the idea behind RPC is to call executed code remotely as if we were just contacting a function. Really the only difference between RMI and RPC is in case of RPC functions are invoked by using a proxy function, and in case there is RMI we invoke methods by using a proxy thing.
RMI is java way to RPC, with connectivity to existing systems using native methods. RMI may take a natural, direct, and fully powered approach to give a enterprise distributed processing technology that allows us to include Java operation throughout the machine. To achieve the cross-platform portability that Java provides, RPC requires a lot more overheads than RMI. RPC must convert the arguments between architecture so that each computer can use its local data type.
Java-RMI is securely coupled with the Java terms. Whereas RPC is not specific to any sole language and you can execute RPC using different terminology.
Because RMI can executed using Java, its get all advantages like object oriented, parallel computing, design style, easy to write and re use, safe and secure, Write once and run anywhere. But in the truth of RPC, to accomplish any of these advantages you have to write implementation code.
Sample request:
To display RMI and allocated application instantly I have executed a Lottery system. The Lottery system is developed according to UK Lotto system. Let's assume that user before using this RMI client software already purchased the lottery ticket.
Lottery client system shows the welcome subject matter to customer.
Lottery system also shows the winning amount to the customer. The Lottery system is developed as per UK Lotto system. But simplifying system I have modified certain guidelines. Here how victor is chosen.
Jackpot, Match 6: Ј500, 000
Match 5 quantities: Ј1, 500
Match 4 volumes: Ј60
Match 3 quantities: Ј10.
System asks customer to type in positive integer number varying 1 to 49.
Once he enters all 6 figures Lottery system make 6 receiving non-repeating random amount between 1 to 49.
System checks the match between consumer entered number and server made number and estimate earning amount and display the result
Implementation:
Here is how I have put in place Lottery system
Define a distant interface
import java. rmi. Remote;
public software LotteryGenerator extends Remote
public ArrayList getLottoryNumber() throws java. rmi. RemoteException;
Implement the remote interface
Below is the just a snippet of the execution course for the remote interface. I have not outlined the aiding private methods of the class.
import java. rmi. RemoteException;
public class LotteryGeneratorImpl extends java. rmi. server. UnicastRemoteObject implements LotteryGenerator
private ArrayList figures; // Integer array for keeping repeat
private ArrayList whole lot;
private java. util. Random gen;
public ArrayList getLottoryNumber()
lot. clear();
for(int i=0;i<6;i++)
lot. add(getNextInt());
System. away. println("Generated Lottery amount:"+lot);
return lot;
Develop the server
Create an instance of remote subject and register the distant subject with RMI registry. This is actually the code snippet for the LotterServer. java
import java. rmi. Naming;
import java. rmi. Remote;
public class LotteryServer
public LotteryServer()
try
LotteryGenerator c = new LotteryGeneratorImpl();
Naming. rebind("rmi://127. 0. 0. 1:1099/LotteryGenerator", (Remote) c);
catch (Exception e)
System. out. println("Trouble: " + e);
e. printStackTrace();
public static void main(String args[])
new LotteryServer();
System. away. println("*****Server started******");
If RMI request running on default slot 1099 then the rebind assertion will be Naming. rebind("rmi://127. 0. 0. 1:1099/LotteryGenerator", (Remote) c); and when you run the RMI registry over a non default slot quantity, for example on dock 5100, then binding assertion becomes:
Naming. rebind("rmi://127. 0. 0. 1:5100/LotteryGenerator", (Remote) c);
Develop a Client
Next step is employing the RMI Lottery client and your client remotely invokes the technique getLottoryNumber specified in the LotterGenerator remote interface. To take action however, the consumer program must first obtain an subject reference to the LotteryGeneratorImpl remote subject from the RMI registry. Once an object reference point is obtained, the getLottoryNumber method is invoked.
import java. rmi. Naming;
import java. util. ArrayList;
import java. util. Scanning device;
public school LotteryClient
public static void main(String[] args)
displayWelcomeMessage();
Scanner scanner = new java. util. Scanner(System. in);
System. away. println("Please Enter 6 integer quantities varying 1 to 49)");
ArrayList clientArray=new ArrayList();
for(int ii=0;ii<6;ii++)
int val = scanning device. nextInt();
clientArray. add(val);
System. out. println("You may have inserted: "+clientArray);
try
LotteryGenerator c = (LotteryGenerator) Naming. lookup("rmi://localhost/LotteryGenerator");
ArrayList servList=c. getLottoryNumber();
System. away. println("Lottery Winning quantities:"+servList);
int count up=checkWin(clientArray, servList);
dispalyResult(count);
System. out. println("Many thanks !!");
catch (java. net. MalformedURLException murle)
System. away. println();
System. away. println("MalformedURLException");
System. out. println(murle);
catch (java. rmi. RemoteException re)
System. away. println();
System. out. println("RemoteException");
System. out. println(re);
catch (java. rmi. NotBoundException nbe)
System. away. println();
System. away. println("NotBoundException");
System. out. println(nbe);
private static void dispalyResult(int count up)
//implemenattion for screen code
private static void displayWelcomeMessage()
//display the welcome message and Lottery earning amount.
public static int checkWin(ArrayList clientArray, ArrayList serverArray)
int count number=0;
for(int ii=0;ii<6;ii++)
int clientVal=(Integer)clientArray. get(ii);
for(int k=0;k<6;k++)
int serVal=(Integer)serverArray. get(k);
if(clientVal==serVal)
count++; rest;
return count up;
Running RMI application:
Here is the steps how one can execute Lottery software.
Compile all the java classes.
Using rmic command, create stubs and skeleton for the put in place remote object.
rmic LotteryGeneratorImpl
Start the RMI registry using rmiregistry command
Execute LotteryServer application
Execute LotteryClient application
Conclusion:
Because it easy implementation aspect RMI has particular advantages over other distributed application methodology like RPC, Corba etc. Since it is applied using java it's get all the advantages like object oriented, parallel computing(Multi-threading), design routine, easy to write and re use, safe and sound, Write once and run everywhere. Also you can integrate RMI based application some other application because of its platform independent capability.