diff --git a/java-rmi/pom.xml b/java-rmi/pom.xml
new file mode 100644
index 0000000000..7c08968cbf
--- /dev/null
+++ b/java-rmi/pom.xml
@@ -0,0 +1,20 @@
+
+ 4.0.0
+
+ com.baeldung.rmi
+ java-rmi
+ 1.0-SNAPSHOT
+ jar
+
+
+ com.baeldung
+ parent-modules
+ 1.0.0-SNAPSHOT
+
+
+
+ UTF-8
+
+
+
diff --git a/java-rmi/src/main/java/com/baeldung/rmi/Message.java b/java-rmi/src/main/java/com/baeldung/rmi/Message.java
new file mode 100644
index 0000000000..6d21a45fe3
--- /dev/null
+++ b/java-rmi/src/main/java/com/baeldung/rmi/Message.java
@@ -0,0 +1,36 @@
+package com.baeldung.rmi;
+
+import java.io.Serializable;
+
+public class Message implements Serializable {
+
+ private String messageText;
+
+ private String contentType;
+
+ public Message() {
+ }
+
+ public Message(String messageText, String contentType) {
+
+ this.messageText = messageText;
+ this.contentType = contentType;
+ }
+
+ public String getMessageText() {
+ return messageText;
+ }
+
+ public void setMessageText(String messageText) {
+ this.messageText = messageText;
+ }
+
+ public String getContentType() {
+ return contentType;
+ }
+
+ public void setContentType(String contentType) {
+ this.contentType = contentType;
+ }
+
+}
diff --git a/java-rmi/src/main/java/com/baeldung/rmi/MessengerService.java b/java-rmi/src/main/java/com/baeldung/rmi/MessengerService.java
new file mode 100644
index 0000000000..f962e4ad07
--- /dev/null
+++ b/java-rmi/src/main/java/com/baeldung/rmi/MessengerService.java
@@ -0,0 +1,11 @@
+package com.baeldung.rmi;
+
+import java.rmi.Remote;
+import java.rmi.RemoteException;
+
+public interface MessengerService extends Remote {
+
+ public String sendMessage(String clientMessage) throws RemoteException;
+
+ public Message sendMessage(Message clientMessage) throws RemoteException;
+}
\ No newline at end of file
diff --git a/java-rmi/src/main/java/com/baeldung/rmi/MessengerServiceImpl.java b/java-rmi/src/main/java/com/baeldung/rmi/MessengerServiceImpl.java
new file mode 100644
index 0000000000..ebf03d4b67
--- /dev/null
+++ b/java-rmi/src/main/java/com/baeldung/rmi/MessengerServiceImpl.java
@@ -0,0 +1,37 @@
+package com.baeldung.rmi;
+
+import java.rmi.RemoteException;
+import java.rmi.registry.LocateRegistry;
+import java.rmi.registry.Registry;
+import java.rmi.server.UnicastRemoteObject;
+
+public class MessengerServiceImpl implements MessengerService {
+
+ public String sendMessage(String clientMessage) {
+
+ String serverMessage = null;
+ if (clientMessage.equals("Client Message")) {
+ serverMessage = "Server Message";
+ }
+
+ return serverMessage;
+ }
+
+ public void createStubAndBind() throws RemoteException {
+
+ MessengerService stub = (MessengerService) UnicastRemoteObject.exportObject((MessengerService) this, 0);
+ Registry registry = LocateRegistry.createRegistry(1099);
+ registry.rebind("MessengerService", stub);
+ }
+
+ public Message sendMessage(Message clientMessage) throws RemoteException {
+
+ Message serverMessage = null;
+ if (clientMessage.getMessageText().equals("Client Message")) {
+ serverMessage = new Message("Server Message", "text/plain");
+ }
+
+ return serverMessage;
+ }
+
+}
\ No newline at end of file
diff --git a/java-rmi/src/test/java/com/baeldung/rmi/JavaRMIIntegrationTest.java b/java-rmi/src/test/java/com/baeldung/rmi/JavaRMIIntegrationTest.java
new file mode 100644
index 0000000000..66bfbe49eb
--- /dev/null
+++ b/java-rmi/src/test/java/com/baeldung/rmi/JavaRMIIntegrationTest.java
@@ -0,0 +1,44 @@
+package com.baeldung.rmi;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.fail;
+
+import java.rmi.NotBoundException;
+import java.rmi.RemoteException;
+import java.rmi.registry.LocateRegistry;
+import java.rmi.registry.Registry;
+
+import org.junit.BeforeClass;
+import org.junit.Test;
+
+public class JavaRMIIntegrationTest {
+
+ @BeforeClass
+ public static void whenRunServer_thenServerStarts() {
+
+ try {
+ MessengerServiceImpl server = new MessengerServiceImpl();
+ server.createStubAndBind();
+ } catch (RemoteException e) {
+ fail("Exception Occurred");
+ }
+ }
+
+ @Test
+ public void whenClientSendsMessageToServer_thenServerSendsResponseMessage() {
+
+ try {
+ Registry registry = LocateRegistry.getRegistry();
+ MessengerService server = (MessengerService) registry.lookup("MessengerService");
+ String responseMessage = server.sendMessage("Client Message");
+
+ String expectedMessage = "Server Message";
+ assertEquals(responseMessage, expectedMessage);
+ } catch (RemoteException e) {
+ fail("Exception Occurred");
+ } catch (NotBoundException nb) {
+ fail("Exception Occurred");
+ }
+ }
+
+}
\ No newline at end of file
diff --git a/pom.xml b/pom.xml
index 6321b0333e..4a25459fcb 100644
--- a/pom.xml
+++ b/pom.xml
@@ -87,8 +87,9 @@
jackson
vavr
- java-lite
- java-vavr-stream
+ java-lite
+ java-rmi
+ java-vavr-stream
javax-servlets
javaxval
jaxb