RMI расшифровывается как Удаленный вызов метода и это объектно-ориентированный эквивалент RPC (Удаленные вызовы процедур). RMI был разработан для того, чтобы взаимодействие между приложениями, использующими объектно-ориентированную модель и работающими на разных машинах, выглядело как взаимодействие автономных программ.
Приведенный ниже код даст вам основу для Java RMI с очень простым примером модели взаимодействия Сервер-клиент.
1. Удаленный Интерфейс
Первое, что мы должны спроектировать, это Удаленный Интерфейс, который будет реализован как Сервером, так и Клиентом. Интерфейс всегда должен быть общедоступным и расширяться Удаленный . Все методы, описанные в Удаленный интерфейс должен содержать список Исключение RemoteException в их предложении throws.
Наш интерфейс RMI имеет только один метод; он получает строковый параметр и возвращает строку.
package com.mkyong.rmiinterface;
import java.rmi.Remote;
import java.rmi.RemoteException;
public interface RMIInterface extends Remote {
public String helloTo(String name) throws RemoteException;
}
2. Сервер
Наш сервер расширяет одноадресный объект и реализует Интерфейс мы делали раньше. В основном методе мы привязываем сервер на локальном хосте с именем “myserver”.
package com.mkyong.rmiserver;
import java.rmi.Naming;
import java.rmi.RemoteException;
import java.rmi.server.UnicastRemoteObject;
import com.mkyong.rmiinterface.RMIInterface;
public class ServerOperation extends UnicastRemoteObject implements RMIInterface{
private static final long serialVersionUID = 1L;
protected ServerOperation() throws RemoteException {
super();
}
@Override
public String helloTo(String name) throws RemoteException{
System.err.println(name + " is trying to contact!");
return "Server says hello to " + name;
}
public static void main(String[] args){
try {
Naming.rebind("//localhost/MyServer", new ServerOperation());
System.err.println("Server ready");
} catch (Exception e) {
System.err.println("Server exception: " + e.toString());
e.printStackTrace();
}
}
}
3. клиент
Наконец, мы создаем Клиента. Чтобы “найти” Сервер, Клиент использует Интерфейс RMI Объект, который “ищет” ссылку на удаленный объект, связанный с именем, которое мы передаем в качестве параметра. С помощью этого Интерфейса RMI объекта мы теперь можем общаться с Сервером и получать ответы.
package com.mkyong.rmiclient;
import java.net.MalformedURLException;
import java.rmi.Naming;
import java.rmi.NotBoundException;
import java.rmi.RemoteException;
import javax.swing.JOptionPane;
import com.mkyong.rmiinterface.RMIInterface;
public class ClientOperation {
private static RMIInterface look_up;
public static void main(String[] args)
throws MalformedURLException, RemoteException, NotBoundException {
look_up = (RMIInterface) Naming.lookup("//localhost/MyServer");
String txt = JOptionPane.showInputDialog("What is your name?");
String response = look_up.helloTo(txt);
JOptionPane.showMessageDialog(null, response);
}
}
4. Как его запустить
4.1 Создайте три файла java с помощью вашей любимой IDE или загрузите приведенный ниже код. Перейдите в исходную папку, как показано ниже.
4.2 Первое, что нам нужно сделать, это собрать наши исходные тексты. Запустите скомпилируйте все.bat если вы загрузили приведенный ниже код или открыли командное окно в своем каталоге и запустили:
javac src/com/mkyong/rmiinterface/RMIInterface.java src/com/mkyong/rmiserver/ServerOperation.java src/com/mkyong/rmiclient/ClientOperation.java
4.3 Подтвердите, что ваши источники были скомпилированы, обратившись к их соответствующим каталогам:
4.4 Далее нам нужно запустить регистрацию rmiregistry. Снова либо запустите startServer.bat , либо откройте командное окно и запустите:
cd src start rmiregistry java com.mkyong.rmiserver.ServerOperation
4.5 Если RmiRegistry успешно запущена, появится другое окно, которое выглядит следующим образом:
4.6 Теперь мы готовы запустить нашего Клиента:
Откройте новое окно командной строки (или запустите runClient.bat из загруженных файлов) и выполните следующее:
cd src java com.mkyong.rmiclient.ClientOperation
Клиентская операция запускается и запрашивает у нас ввод:
Мы вводим имя в поле ввода (например, “Марилена”) и нажимаем “ОК”.
4.7 На стороне сервера мы можем видеть это:
4.8 И на стороне клиента это:
4.9 Клиент закрывается после завершения обмена, в то время как сервер остается включенным, и мы можем снова общаться, если снова запустим файл клиента. Действительно, мы снова запускаем клиента и:
Сервер:
Клиент:
Скачать Исходный Код
Рекомендации
Оригинал: “https://mkyong.com/java/java-rmi-hello-world-example/”