Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
RMI.docx
Скачиваний:
3
Добавлен:
09.11.2019
Размер:
27.07 Кб
Скачать

Реализация удаленного интерфейса

Класс UnicastRemoteObject (пакет java.rmi.server) представляет базовые

функциональные возможности, которые необходимы удаленным объектам для

обслуживания удаленных запросов.

Конструкторы и методы класса UnicastRemoteObject возбуждают контролируемое

исключение RemoteException,поэтому подклассы класса UnicastRemoteObject должны

определять конструкторы, которые также возбуждают исключение RemoteException.

Конструктор класса UnicastRemoteObject экспортирует объект, чтобы сделать его

доступным для приема удаленных вызовов. Экспорт объекта дает возможность удаленному

объекту ожидать соединений с клиентами на анонимном порту (т.е. порту, выбираемом

компьютером, на котором выполняется удаленный объект). Это дает возможность объекту

осуществлять однонаправленное взаимодействие (взаимодействие точка-точка между двумя

объектами посредством вызовов методов) с использованием стандартных соединений через

сокеты. Классам удаленных объектов не нужно расширять этот класс, если эти классы

используют статический метод exportObject класса UnicastRemoteObject для экспорта

удаленных объектов. Предполагается, что клиенты RMI должны осуществлять соединение

на порту 1099 при попытке найти удаленный объект в реестре RMI.

РЕАЛИЗАЦИЯ

public class CalculatorImpl

extends

java.rmi.server.UnicastRemoteObject

implements Calculator {

// Реализации должны иметь

// явный конструктор для

// того, чтобы объявить

// исключительную ситуацию RemoteException

public CalculatorImpl()

throws java.rmi.RemoteException {

super();// Выполняет RMI-соединение и инициализацию удаленного объекта

}

public long add(long a, long b)

throws java.rmi.RemoteException {

return a + b;

}

public long sub(long a, long b)

throws java.rmi.RemoteException {

return a - b;

}

public long mul(long a, long b)

throws java.rmi.RemoteException {

return a * b;

}

public long div(long a, long b)

throws java.rmi.RemoteException {

return a / b;

}

Сервер

import java.rmi.Naming;

public class CalculatorServer {

public CalculatorServer() {

try {

Calculator c = new CalculatorImpl();

Naming.rebind("

rmi://localhost:1099/

CalculatorService", c);

} catch (Exception e) {

System.out.println("Trouble: " + e);

}

}

public static void main(String args[]) {

new CalculatorServer();

}

}

Клиент

import java.rmi.Naming;

import java.rmi.RemoteException;

import java.net.MalformedURLException;

import java.rmi.NotBoundException;

public class CalculatorClient {

public static void main(String[] args) {

try {

Calculator c = (Calculator)

Naming.lookup(

"rmi://remotehost

/CalculatorService");

System.out.println( c.sub(4, 3) );

System.out.println( c.add(4, 5) );

System.out.println( c.mul(3, 6) );

System.out.println( c.div(9, 3) );

}

catch (MalformedURLException murle) {

System.out.println();

System.out.println(

"MalformedURLException");

System.out.println(murle);

}

catch (RemoteException re) {

System.out.println();

System.out.println(

"RemoteException");

System.out.println(re);

}

catch (NotBoundException nbe) {

System.out.println();

System.out.println("NotBoundException");

System.out.println(nbe);

}

catch (

java.lang.ArithmeticException

ae) {

System.out.println();

System.out.println(

"java.lang.ArithmeticException");

System.out.println(ae);

}

}

}

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