Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
сит.docx
Скачиваний:
11
Добавлен:
26.09.2019
Размер:
353.03 Кб
Скачать
  1. Разработка rmi приложений. Примеры. Соглашения о передаче данных

1. Удаленный интерфейс должен быть public . В противном случае клиенты будут получать ошибку при попытке загрузки объекта, реализующего удаленный интерфейс. Удаленный интерфейс должен расширять интерфейс java.rmi.Remote. Каждый метод удаленного интерфейса должен объявлять java.rmi.RemoteException в своем предложении throws в добавок к любым исключениям, специфичным для приложения. AddServerIntf.java (определение интерфейса):

public interface AddServerIntf extends Remote { //расширяет интерфейс Remote, объявление абстрактного

//метода интерфейса. Здесь метод, принимающий два double-параметра, тело - в реализующем классе

double add (double d1, double d2) throws RemoteException; //все удаленные методы могут выбрасывать исключение RemoteException }

2. Серверный модуль реализующий задачу клиента. Данный класс расширяет (наследует) класс UnicastRemoteObject и реализует интерфейс AddServerIntf. (Все удаленные классы должны расширять класс UnicastRemoteObject). AddServerImpl.java:

public class AddServerImpl extends UnicastRemoteObject implements // UnicastRemoteObject – поддерживаются однонаправленые серверы

AddServerIntf

{//расширение класса UnicastRemoteObject и реализация интерфейса AddServerIntf

public AddServerImpl() throws RemoteException{

//конструктор класса AddServerImpl()все удаленные методы могут выбрасывать исключение RemoteException}

public double add(double d1, double d2) throws RemoteException//реализация удаленного метода (метод сервера вычисляет сумму параметров

{return d1+d2;}}

3. консольная (main) программа сервера, которая должна обновить RMI-реестр на машине-сервере (при помощи метода rebind() класса Naming, пакета java.rmi.*. Он связывает имя сервера с объектной ссылкой. AddServer.java:

public class AddServer{

public static void main(String args[])//консольная программа сервера

{

try {

AddServerImpl addServerImpl=new AddServerImpl();//Создается объект класса AddServerImpl

Naming.rebind("AddServer", addServerImpl);//задается имя сервера, которое связывается с объектной ссылкой

}

catch (Exception e) {

System.out.println("Exception: "+e);}}}

4. Клиент. IP- адрес (1-й параметр или имя сервера) и аргументы для инициализации входных параметров метода, выполняющегося на сервере (второй и третий параметр, задаваемый через пробел), передаются в командной строке.

public class AddClient {

public static void main(String args[]) {

try {

String addServerURL ="rmi://" + args[0] + "/AddServer";//формирование строки в синтаксисе формирования URL, в соответствии с протоколом rmi, т.е. IP-адрес сервера и строку //AddServer –имя сервера

AddServerIntf addServerIntf = (AddServerIntf)Naming.lookup(addServerURL);// Метод Naming.lookup (addServerURL) принимает rmi URL, и возвращает ссылку на объект типа AddServerIntf, которому можно направлять удаленные вызовы

System.out.println("The firt number is: " + args[1]);

double d1 = Double.valueOf(args[1]).doubleValue();//формирование первого значения

System.out.println("The second number is: " + args[2]);

double d2 = Double.valueOf(args[2]).doubleValue();//формирование второго значения

System.out.println("The sum is: " + addServerIntf.add(d1,d2));// удаленный вызов метода add, возвращающего сумму чисел

} catch (Exception e) {

System.out.println("Exceptio is: " + e );} }}

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]