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/”