Пример Java RMI Hello World
RMI означаетRemote Method Invocation и является объектно-ориентированным эквивалентом RPC (удаленных вызовов процедур). RMI was designed to make the interaction between applications using the object-oriented model and run on different machines seem like that of stand-alone programs.
Приведенный ниже код даст вам основу для Java RMI с очень простым примером модели взаимодействия сервер-клиент.
1. Удаленный интерфейс
Первое, что нам нужно спроектировать, - это интерфейсRemote
, который будут реализовывать и сервер, и клиент. Interface
всегда должен быть открытым и расширятьRemote
. Все методы, описанные в интерфейсеRemote
, должны указыватьRemoteException
в своем предложении throws.
У нашегоRMIInterface
есть только один метод; он получает параметр String и возвращает String.
RMIInterface.java
package com.techfou.rmiinterface; import java.rmi.Remote; import java.rmi.RemoteException; public interface RMIInterface extends Remote { public String helloTo(String name) throws RemoteException; }
2. Сервер
Наш Сервер расширяетUnicastRemoteObject
и реализуетInterface
, которые мы сделали ранее. В основном методе мы привязываем сервер на localhost с именем MyServer.
ServerOperation.java
package com.techfou.rmiserver; import java.rmi.Naming; import java.rmi.RemoteException; import java.rmi.server.UnicastRemoteObject; import com.example.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. Клиент
Наконец, мы создаем клиента. Чтобы «найти» Сервер, Клиент использует объектRMIInterface
, который «ищет» ссылку на удаленный объект, связанный с именем, которое мы передаем в качестве параметра. С этим объектомRMIInterface
теперь мы можем разговаривать с Сервером и получать ответы.
Файл: ClientOperation.java
package com.example.rmiclient; import java.net.MalformedURLException; import java.rmi.Naming; import java.rmi.NotBoundException; import java.rmi.RemoteException; import javax.swing.JOptionPane; import com.example.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 Create the three java files with your favorite IDE or Download the code below. Перейдите в исходную папку, как показано ниже.
4.2 First thing we need to do is compile our sources. ЗапуститеcompileEverything.bat
, если вы загрузили код ниже, или откройте командное окно в своем каталоге и запустите:
Терминал
javac src/com/example/rmiinterface/RMIInterface.java src/com/example/rmiserver/ServerOperation.java src/com/example/rmiclient/ClientOperation.java
4.3 Confirm that your sources were compiled by accessing their respective directories:
4.4 Next we need to start the rmiregistry. Снова либо запуститеstartServer.bat
, либо откройте командное окно и запустите:
Терминал
cd src start rmiregistry java com.example.rmiserver.ServerOperation
4.5 If RmiRegistry started successfully, there will be another window that looks like this:
4.6 Now we are ready to run our Client:
Откройте новое окно командной строки (или запуститеrunClient.bat
из загруженных файлов) и запустите это:
Терминал
cd src java com.example.rmiclient.ClientOperation
ClientOperation
запускается и запрашивает ввод:
Мы вводим имя в поле ввода (например, «Марилена») и нажмите «ОК».
4.7 On Server side we can see this:
4.8 And on the Client side this:
4.9 The client closes after the exchange is over, while the server stays on and we can communicate again if we run the client file again. Действительно, запускаем клиент снова и:
Сервер:
Клиент:
Скачать исходный код
Скачать -SimpleRmiExample.zip (4 КБ)