RMI application involves 4 programs (as illustrated in the first simple Interest Calculation application) and let us go for RMI Execution to see how to execute them to get the desired output step by step.
a) Compile all the 4 programs with javac command as usual as follows:
c\snr> javac Interest*.java
This compiles all the 4 programs at a time and obtains 4 different .class files. Do not attempt to compile each program separately which sometimes says the remote interface is not available. To do so, set the classpath of JDK at the DOS prompt eventhough you set it in system environment variables.
b) Generate stub and skeleton
Creating RMI Stub and Skeleton
c\snr> rmic InterestImpl
The above rmi compiler (rmic stands for rmi compiler), generates stub and skeletons and they are .class files as follows:
Observe, the stub and skeleton are generated on implementation file. From JDK 1.2, skeleton is not created with the introduction dynamic stubs creation. Even without skeleton generation, still your program works.
Observe, I obtained only stub with RMI compiler.
c) Open two DOS prompts: one for server and one for client.
i) from the sever prompt, start rmi registry as follows:
c\snr> start rmiregistry
The second window is rmi registry.
The above command gets a window, minimize it and it must be working at the background as long as client and server communicates (like Tomcat server running all through the Servlet communication). It is a service between client and server. RMI registry can treated as a middleware component between client and server. For this reason, RMI is known as middleware technology. The other middleware technologies are CORBA (Common Object Request Broker Architecture) of OMG (Object Management Group) and DCOM (Distributed Component Model) of Microsoft.
ii) from the same server prompt, run the server program as follows:
c\snr> java InterestServer
Observe, the DOS prompt is not terminated, means, the server is waiting for the requests from client. When client request comes and honoured, the prompt terminates.
iii) from the client prompt, run the client program and we will get output as follows(at client DOS prompt).
c\snr> java InterestClient
You can see the output at client prompt as in the above screenshot.
What is file distribution in RMI?
From the above notes, you come to know now there are many files comprising a RMI application like four .class files, rmi registry, stub and skeleton. Now which file should be placed on client side and server side for smooth communication comprises file distribution in RMI.
It is easy to remember, just remind yourself
With client side statement: Interest i2 = (Interest) Naming.lookup(“roses”) which implies client requires Remote interface.
With server side statement: Interest i1= new InterestImpl() which implies server requires Remote interface and Implementation file. Now make table as follows.
|Client side||Server side|
|Remote interface||Remote interface|
|Client program||Server program|
Now observe, the implementation file comes to server side. That is, client does not have the implementation of abstract methods. So when client invokes a remote method, the method is executed on server side (and not on client side).
Learn another RMI application with database access and setting security manager etc.