How to run Java RMI Application Last Updated : 11 Jul, 2025 Comments Improve Suggest changes Like Article Like Report Prerequisite: RMI RMI (Remote Method Invocation) is used for distributed object references system. A distributed object is an object which publishes its interface on other machines. A Remote Object is a distributed object whose state is encapsulated. Stub and Skeleton are two objects used to communicate with the remote object. Stub: Stub is a gateway for client program which is used to communicate with skeleton object, by establishing a connection between them. Skeleton: Resides on Server program which is used for passing the request from stub to the remote interface. How communication and process takes place in RMI: Steps to Run Java RMI Application in Console Creation of classes and interfaces for the problem statement: The steps involved in this are as follows: Create a Remote Interface which extends java.rmi.Remote: A remote interface determines the object that can be invoked remotely by the client. This interface can be communicated with the client's program. This Interface must extend java.rmi.Remote Interface. Problem Statement: Create an RMI Application for finding the factorial of a number Interface Program import java.math.BigInteger; // Creating an Interface public interface Factorial extends java.rmi.Remote { // Declaring the method public BigInteger fact(int num) throws java.rmi.RemoteException; } Create a class which extends java.rmi.server.UnicastRemoteObject and implements the previous interface. This class will implement the remote interface. Do the required calculation for the problem statement. Implementation of Interface import java.math.BigInteger; // Extends and Implement the class // and interface respectively public class FactorialImpl extends java.rmi.server.UnicastRemoteObject implements Factorial { // Constructor Declaration public FactorialImpl() throws java.rmi.RemoteException { super(); } // Calculation for the problem statement // Implementing the method fact() // to find factorial of a number public BigInteger fact(int num) throws java.rmi.RemoteException { BigInteger factorial = BigInteger.ONE; for (int i = 1; i <= num; ++i) { factorial = factorial .multiply( BigInteger .valueOf(i)); } return factorial; } } Create a Server Class (with localhost and service name) For hosting a service, the server program is created whereby using java.rmi.Naming.rebind() method can be called which takes two arguments i.e., an object reference (service name) and instances reference. Server Program import java.rmi.Naming; public class FactorialServer { // Implement the constructor of the class public FactorialServer() { try { // Create a object reference for the interface Factorial c = new FactorialImpl(); // Bind the localhost with the service Naming.rebind("rmi:// localhost/FactorialService", c); } catch (Exception e) { // If any error occur System.out.println("ERR: " + e); } } public static void main(String[] args) { // Create an object new FactorialServer(); } } Create a Client Class (with localhost and service name) Client program will invokes java.rmi.Naming.lookup() method for RMI URL and returns an instance of object type (Factorial Interface). All RMI is done on this object Client Program import java.net.MalformedURLException; import java.rmi.Naming; import java.rmi.NotBoundException; import java.rmi.RemoteException; public class FactorialClient { public static void main(String[] args) { try { // Create an remote object with the same name // Cast the lookup result to the interface Factorial c = (Factorial); Naming.lookup("rmi:// localhost/FactorialService"); // Call the method for the results System.out.println(c.fact(30)); } // If any error occur catch (MalformedURLException murle) { System.out.println("\nMalformedURLException: " + murle); } catch (RemoteException re) { System.out.println("\nRemoteException: " + re); } catch (NotBoundException nbe) { System.out.println("\nNotBoundException: " + nbe); } catch (java.lang.ArithmeticException ae) { System.out.println("\nArithmeticException: " + ae); } } } Compilation of all program Use javac to compile all four programs and rmic (RMI Compiler) to create a stub and skeleton class files. Running the system: After the compilation phase, the system is now ready to run. To run the system, open three console screen (move to that path where the program resides). One for the client, one for server and one for the RMI Registry. Start with a registry, use rmiregistry, if there is no error registry will start running and now move to second screen. In the second console run the server program and host the FactorialService. It will start and wait for the client connection and it will load the implementation into memory. In the third console, run the client program. In this way RMI can be run in three console for localhost. RMI uses Network stack and TCP/IP Stack for communication of three different JVM's. Comment More infoAdvertise with us Next Article How to Run Java Program? B bilal-hungund Follow Improve Article Tags : Java Technical Scripter Practice Tags : Java Similar Reads How to Run Spring Boot Application? Spring Boot is built on the top of Spring and contains all the features of Spring. And it is becoming a favorite of developers these days because of its rapid production-ready environment which enables the developers to directly focus on the logic instead of struggling with the configuration and set 8 min read How to Run Java Program? Java is a popular, high-level, object-oriented programming language that was developed by James Gosling and his team at Sun Microsystems (now owned by Oracle Corporation) in the mid-1990s. It is widely used for developing various kinds of software, including web applications, desktop applications, m 2 min read How to Run GUI Based Applications inside Docker? A Docker Container is an isolated application platform that contains everything needed to run an application built from one or more images. Docker is an Open Source project that provides an open platform to run any number of applications inside a container according to your requirements and you can 7 min read How to Install Java Applet Viewer on Linux? Applet viewer is a command-line program to run a java applet. It helps you to test an applet before you run it in the browser. The applet's code gets transferred to the system & then the Java Virtual Machine (JVM) of the browser & executes that code. In this article, we will look into the pr 2 min read How to Run the Java Code in Git Bash? Git Bash is a command-line interface that provides a Unix-like environment on Windows. You can use it to compile and run Java programs just as you would in traditional terminals on Linux or macOS. Step to Run Java Code in Git Bash:1. Install JavaMake sure you have Java installed on your Windows comp 2 min read How to Create a .exe File From a Java Program? In this article, we will learn how to create a .exe file from a Java program. Java is a platform-independent language, which works on the philosophy of "write Once, Run Anywhere". It simply means that if we write a Java program, we can run it on any device that has a JVM(Java Virtual Machine). Now i 5 min read Like