diff --git a/spring-remoting/pom.xml b/spring-remoting/pom.xml
index 0b751d1fc9..b40f77eb50 100644
--- a/spring-remoting/pom.xml
+++ b/spring-remoting/pom.xml
@@ -33,6 +33,7 @@
remoting-hessian-burlap
remoting-amqp
remoting-jms
+ spring-remoting-rmi
\ No newline at end of file
diff --git a/spring-remoting/spring-remoting-rmi/pom.xml b/spring-remoting/spring-remoting-rmi/pom.xml
new file mode 100644
index 0000000000..723158775f
--- /dev/null
+++ b/spring-remoting/spring-remoting-rmi/pom.xml
@@ -0,0 +1,19 @@
+
+
+
+ spring-remoting
+ com.baeldung
+ 1.0-SNAPSHOT
+
+ 4.0.0
+ pom
+
+ remoting-rmi-server
+ remoting-rmi-client
+
+ spring-remoting-rmi
+
+
+
\ No newline at end of file
diff --git a/spring-remoting/spring-remoting-rmi/remoting-rmi-client/pom.xml b/spring-remoting/spring-remoting-rmi/remoting-rmi-client/pom.xml
new file mode 100644
index 0000000000..003976dc7b
--- /dev/null
+++ b/spring-remoting/spring-remoting-rmi/remoting-rmi-client/pom.xml
@@ -0,0 +1,30 @@
+
+
+
+ spring-remoting-rmi
+ com.baeldung
+ 1.0-SNAPSHOT
+
+ 4.0.0
+
+ remoting-rmi-client
+
+
+
+ org.springframework.boot
+ spring-boot-starter-activemq
+
+
+ org.springframework.boot
+ spring-boot-starter-tomcat
+
+
+
+
+ com.baeldung
+ api
+
+
+
\ No newline at end of file
diff --git a/spring-remoting/spring-remoting-rmi/remoting-rmi-client/src/main/java/com/baeldung/client/RmiClient.java b/spring-remoting/spring-remoting-rmi/remoting-rmi-client/src/main/java/com/baeldung/client/RmiClient.java
new file mode 100644
index 0000000000..a568b749f9
--- /dev/null
+++ b/spring-remoting/spring-remoting-rmi/remoting-rmi-client/src/main/java/com/baeldung/client/RmiClient.java
@@ -0,0 +1,26 @@
+package com.baeldung.client;
+
+import com.baeldung.api.Booking;
+import com.baeldung.api.BookingException;
+import com.baeldung.api.CabBookingService;
+import org.springframework.boot.SpringApplication;
+import org.springframework.boot.autoconfigure.SpringBootApplication;
+import org.springframework.context.annotation.Bean;
+import org.springframework.remoting.rmi.RmiProxyFactoryBean;
+
+@SpringBootApplication public class RmiClient {
+
+ @Bean RmiProxyFactoryBean service() {
+ RmiProxyFactoryBean rmiProxyFactory = new RmiProxyFactoryBean();
+ rmiProxyFactory.setServiceUrl("rmi://localhost:1099/CabBookingService");
+ rmiProxyFactory.setServiceInterface(CabBookingService.class);
+ return rmiProxyFactory;
+ }
+
+ public static void main(String[] args) throws BookingException {
+ CabBookingService service = SpringApplication.run(RmiClient.class, args).getBean(CabBookingService.class);
+ Booking bookingOutcome = service.bookRide("13 Seagate Blvd, Key Largo, FL 33037");
+ System.out.println(bookingOutcome);
+ }
+
+}
diff --git a/spring-remoting/spring-remoting-rmi/remoting-rmi-server/pom.xml b/spring-remoting/spring-remoting-rmi/remoting-rmi-server/pom.xml
new file mode 100644
index 0000000000..5ce3f7f949
--- /dev/null
+++ b/spring-remoting/spring-remoting-rmi/remoting-rmi-server/pom.xml
@@ -0,0 +1,40 @@
+
+
+
+ spring-remoting-rmi
+ com.baeldung
+ 1.0-SNAPSHOT
+
+ 4.0.0
+
+ remoting-rmi-server
+
+
+ UTF-8
+
+
+
+
+ org.springframework.boot
+ spring-boot-starter-web
+
+
+ org.springframework.boot
+ spring-boot-starter-tomcat
+
+
+
+
+ com.baeldung
+ api
+
+
+ com.baeldung
+ api
+ ${project.version}
+
+
+
+
\ No newline at end of file
diff --git a/spring-remoting/spring-remoting-rmi/remoting-rmi-server/src/main/java/com/baeldung/server/CabBookingServiceImpl.java b/spring-remoting/spring-remoting-rmi/remoting-rmi-server/src/main/java/com/baeldung/server/CabBookingServiceImpl.java
new file mode 100644
index 0000000000..55ec9c5733
--- /dev/null
+++ b/spring-remoting/spring-remoting-rmi/remoting-rmi-server/src/main/java/com/baeldung/server/CabBookingServiceImpl.java
@@ -0,0 +1,16 @@
+package com.baeldung.server;
+
+import com.baeldung.api.Booking;
+import com.baeldung.api.BookingException;
+import com.baeldung.api.CabBookingService;
+
+import static java.lang.Math.random;
+import static java.util.UUID.randomUUID;
+
+public class CabBookingServiceImpl implements CabBookingService {
+
+ @Override public Booking bookRide(String pickUpLocation) throws BookingException {
+ if (random() < 0.3) throw new BookingException("Cab unavailable");
+ return new Booking(randomUUID().toString());
+ }
+}
diff --git a/spring-remoting/spring-remoting-rmi/remoting-rmi-server/src/main/java/com/baeldung/server/RmiServer.java b/spring-remoting/spring-remoting-rmi/remoting-rmi-server/src/main/java/com/baeldung/server/RmiServer.java
new file mode 100644
index 0000000000..7778c65e85
--- /dev/null
+++ b/spring-remoting/spring-remoting-rmi/remoting-rmi-server/src/main/java/com/baeldung/server/RmiServer.java
@@ -0,0 +1,34 @@
+package com.baeldung.server;
+
+import com.baeldung.api.CabBookingService;
+import org.springframework.boot.SpringApplication;
+import org.springframework.boot.autoconfigure.SpringBootApplication;
+import org.springframework.context.annotation.Bean;
+import org.springframework.remoting.rmi.RmiServiceExporter;
+
+@SpringBootApplication public class RmiServer {
+
+ @Bean CabBookingService bookingService() {
+ return new CabBookingServiceImpl();
+ }
+
+ @Bean RmiServiceExporter exporter(CabBookingService implementation) {
+
+ // Expose a service via RMI. Remote obect URL is:
+ // rmi://:/
+ // 1099 is the default port
+
+ Class serviceInterface = CabBookingService.class;
+ RmiServiceExporter exporter = new RmiServiceExporter();
+ exporter.setServiceInterface(serviceInterface);
+ exporter.setService(implementation);
+ exporter.setServiceName(serviceInterface.getSimpleName());
+ exporter.setRegistryPort(1099);
+ return exporter;
+ }
+
+ public static void main(String[] args) {
+ SpringApplication.run(RmiServer.class, args);
+ }
+
+}