java tutorial - Java Удаленный вызов методов - Java RMI - учебник java - java programming - учиться java - java basics - java for beginners
1- Введение
- RMI - это способ, которым вы можете вызывать метод (method) удаленно. Например, вызвать метод, запущенный на компьютере B, и получить возвращенный результат. Таким образом, компьютер B является сервером, предоставляющим услугу.

java - джава - учиться java - учебник java -
RMI сервера
- примеры java - java-программы
2- Создать project
- Создать новый проект с названием RMITutorial

java - джава - учиться java - учебник java -
RMI учебник
- примеры java - java-программы
- Это модель классов, упакованные для Client и Server:

java - джава - учиться java - учебник java -
Клиент сервера RMI
- примеры java - java-программы
- Это рабочая модель RMI. Сервер зарегистрирует объект в Registry. Затем клиент будет искать Registry по IP-адресу и порту (Host + Port), чтобы он мог вызывать методы (method) из объектов на Сервере.

java - джава - учиться java - учебник java -
RMI сервер читать
- примеры java - java-программы
Constants.java
package com.wikitechy.tutorial.rmi;
public class Constants {
public static final String LOCATION_HANOI = "HaNoi";
public static final String LOCATION_TOKYO = "Tokyo";
public static final String LOCATION_CHICAGO = "Chicago";
public static final String WEATHER_RAIN ="rain";
public static final String WEATHER_SUNNY ="sunny";
}
нажмите кнопку ниже, чтобы скопировать код. - от - java tutorials - командаWeatherData.java
package com.wikitechy.tutorial.rmi;
import java.io.Serializable;
import java.util.Date;
public class WeatherData implements Serializable {
private static final long serialVersionUID = 1L;
private Date date;
private String location;
private String weather;
public WeatherData(Date date, String location, String weather) {
this.date = date;
this.location = location;
this.weather = weather;
}
public Date getDate() {
return date;
}
public void setDate(Date date) {
this.date = date;
}
public String getLocation() {
return location;
}
public void setLocation(String location) {
this.location = location;
}
public String getWeather() {
return weather;
}
public void setWeather(String weather) {
this.weather = weather;
}
}
нажмите кнопку ниже, чтобы скопировать код. - от - java tutorials - командаWeatherService.java
package com.wikitechy.tutorial.rmi;
import java.rmi.Remote;
import java.rmi.RemoteException;
import java.util.Date;
public interface WeatherService extends Remote {
// Method to retrieve weather information.
public WeatherData getWeather(Date date, String location)
throws RemoteException;
}
нажмите кнопку ниже, чтобы скопировать код. - от - java tutorials - командаWeatherServiceImpl.java
package com.wikitechy.tutorial.rmi.server;
import java.rmi.RemoteException;
import java.rmi.server.UnicastRemoteObject;
import java.util.Calendar;
import java.util.Date;
import com.wikitechy.tutorial.rmi.Constants;
import com.wikitechy.tutorial.rmi.WeatherData;
import com.wikitechy.tutorial.rmi.WeatherService;
public class WeatherServiceImpl extends UnicastRemoteObject implements
WeatherService {
private static final long serialVersionUID = 1L;
public WeatherServiceImpl() throws RemoteException {
super();
}
@Override
public synchronized WeatherData getWeather(Date date, String location)
throws RemoteException {
Calendar c = Calendar.getInstance();
c.setTime(date);
int dayOfWeek = c.get(Calendar.DAY_OF_WEEK);
// Sunday, Monday
if (dayOfWeek == 1 || dayOfWeek == 2) {
if (location.equals(Constants.LOCATION_CHICAGO)) {
// Rain
return new WeatherData(date, location, Constants.WEATHER_RAIN);
} else if (location.equals(Constants.LOCATION_HANOI)) {
// Sunny
return new WeatherData(date, location, Constants.WEATHER_SUNNY);
} else if (location.equals(Constants.LOCATION_TOKYO)) {
// Sunny
return new WeatherData(date, location, Constants.WEATHER_SUNNY);
}
return new WeatherData(date, location, Constants.WEATHER_SUNNY);
} else {
return new WeatherData(date, location, Constants.WEATHER_SUNNY);
}
}
}
нажмите кнопку ниже, чтобы скопировать код. - от - java tutorials - командаClient.java
package com.wikitechy.tutorial.rmi.client;
import java.rmi.registry.LocateRegistry;
import java.rmi.registry.Registry;
import java.util.Date;
import com.wikitechy.tutorial.rmi.Constants;
import com.wikitechy.tutorial.rmi.WeatherData;
import com.wikitechy.tutorial.rmi.WeatherService;
public class Client {
// Host or IP of Server
private static final String HOST = "localhost";
private static final int PORT = 1099;
private static Registry registry;
public static void main(String[] args) throws Exception {
// Search the registry in the specific Host, Port.
registry = LocateRegistry.getRegistry(HOST, PORT);
// Lookup WeatherService in the Registry.
WeatherService service = (WeatherService) registry
.lookup(WeatherService.class.getSimpleName());
Date today = new Date();
// Get Chicago weather info:
WeatherData chicagoWeather = service.getWeather(today,
Constants.LOCATION_CHICAGO);
System.out.println("Chicago weather today: "
+ chicagoWeather.getWeather());
// Get Hanoi weather info:
WeatherData hanoiWeather = service.getWeather(today,
Constants.LOCATION_HANOI);
System.out.println("Hanoi weather today: " + hanoiWeather.getWeather());
}
}
нажмите кнопку ниже, чтобы скопировать код. - от - java tutorials - командаServer.java
package com.wikitechy.tutorial.rmi.server;
import java.rmi.AlreadyBoundException;
import java.rmi.Remote;
import java.rmi.RemoteException;
import java.rmi.registry.LocateRegistry;
import java.rmi.registry.Registry;
import com.wikitechy.tutorial.rmi.WeatherService;
public class Server {
private static final int PORT = 1099;
private static Registry registry;
public static void startRegistry() throws RemoteException {
// Create server registry
registry = LocateRegistry.createRegistry(PORT);
}
public static void registerObject(String name, Remote remoteObj)
throws RemoteException, AlreadyBoundException {
// Bind the object in the registry.
// It is bind with certain name.
// Client will lookup on the registration of the name to get object.
registry.bind(name, remoteObj);
System.out.println("Registered: " + name + " -> "
+ remoteObj.getClass().getName() + "[" + remoteObj + "]");
}
public static void main(String[] args) throws Exception {
System.out.println("Server starting...");
startRegistry();
registerObject(WeatherService.class.getSimpleName(), new WeatherServiceImpl());
// Server was the start, and was listening to the request from the client.
System.out.println("Server started!");
}
}
нажмите кнопку ниже, чтобы скопировать код. - от - java tutorials - команда3- Запуск приложения
- Чтобы запустить приложение выше, вам необходимо упаковать проект в два файла jar. Первый файл jar включает классы для запуска на клиентской машине. И второй файл Jar, включая классы для запуска на сервере.Это иллюстрация:
- Тем не менее, вы можете запустить Demo на Eclipse:
- Сначала запустите класс Server:
