java tutorial - Java Удаленный вызов методов - Java RMI - учебник java - java programming - учиться java - java basics - java for beginners




1- Введение

  • RMI - это способ, которым вы можете вызывать метод (method) удаленно. Например, вызвать метод, запущенный на компьютере B, и получить возвращенный результат. Таким образом, компьютер B является сервером, предоставляющим услугу.
 RMI сервера
java - джава - учиться java - учебник java -
RMI сервера
- примеры java - java-программы

2- Создать project

  • Создать новый проект с названием RMITutorial
 RMI учебник
java - джава - учиться java - учебник java -
RMI учебник
- примеры java - java-программы
  • Это модель классов, упакованные для Client и Server:
 Клиент сервера RMI
java - джава - учиться java - учебник java -
Клиент сервера RMI
- примеры java - java-программы
  • Это рабочая модель RMI. Сервер зарегистрирует объект в Registry. Затем клиент будет искать Registry по IP-адресу и порту (Host + Port), чтобы он мог вызывать методы (method) из объектов на Сервере.
 RMI сервер читать
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:
 server java application
java - джава - учиться java - учебник java -
server java application
- примеры java - java-программы

Related Searches to Java Удаленный вызов методов - Java RMI