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

2.1.6 Архітектура Java rmi

Архітектура Java RMI представлена на рисунку 2.1.

Рисунок 2.1 - Архітектура Java RMI

В архітектурі Java RMI є інтерфейс активації, що грає таку ж роль, що об'єктний адаптер в CORBA - щоб не тримати об'єкт на сервері завжди в активному стані, тобто в оперативній пам'яті.

2.1.7 Створення віддаленого інтерфейсу

Для створення розподіленого додатка на основі java RMI необхідно виконати наступні дії.

  1. Створити віддалений інтерфейс і відкомпілювати його.

  2. Написати клас – реалізацію цього інтерфейсу й відкомпілювати його.

  3. Створити заглушки: стаб і скелетон за допомогою rmic.

  4. Створити серверний додаток, що буде надавати віддалений сервіс.

  5. Створити клієнтський додаток, що буде звертатися до сервера за сервісом.

Створимо простий розподілений RMI-додаток: клієнт передає серверу ціле число типу long і отримує результат обчислення квадрата цього числа, що потім виводиться на екран.

2.2 Завдання до лабораторної роботи

2.2.1 Створення віддаленого інтерфейсу

Код віддаленого інтерфейсу з ім'ям MyRemote має такий вигляд:

import java.rmi.*;

public interface MyRemote extends Remote

{

public long func(long a) throws RemoteException;

}

Інтерфейс MyRemote розширює java.rmi.Remote, тобто віддалений інтерфейс, що генерує винятки, що виникають при виклику віддалених методів RMI-додатка.

Крім того, в інтерфейсі MyRemote визначений метод func, що зводить числа в квадрат.

Для використання даного інтерфейсу в розподіленому RMI-додатку створіть у робочій папці файл MyRemote.java, помістіть в нього код інтерфейсу MyRemote і відкомпілюйте його:

> javac MyRemote.java

2.2.2 Створення реалізації віддаленого інтерфейсу

Код класу MyRemoteImpl, що реалізує віддалений інтерфейс MyRemote, має такий вигляд:

import java.rmi.*;

import java.rmi.server.*;

public class MyRemoteImpl extends UnicastRemoteObject implements MyRemote

{

public MyRemoteImpl() throws RemoteException

{

super();

}

public long func(long a) throws RemoteException

{

long res=a*a;

// OR

// double b=Math.pow(a,2);

// long res=(long)b;

return res;

}

}

Клас MyRemoteImpl успадковує методи класу java.rmi.server.UnicastRemoteObject для можливості з'єднання із системою RMI. Явний виклик конструктора суперкласу super() саме й забезпечує це з'єднання.

Для використання реалізації віддаленого інтерфейсу в розподіленому RMI-додатку створіть у робочій папці файл MyRemoteImpl.java, помістіть в нього код класу MyRemoteImpl і відкомпілюйте його:

> javac MyRemoteImpl.java

2.2.3 Створення стаба й скелетона

Для створення заглушок скористаємося утилітою rmic. Як параметр для rmic вкажемо клас - реалізацію віддаленого інтерфейсу.

> rmic MyRemoteImpl

У результаті в робочому каталозі з'являться файли - заглушки: MyRemoteImpl_Stub, MyRemoteImpl_Skel.

Цей крок обов'язковий, тому що без заглушок не можливо передавати дані між клієнтами й сервером.

2.2.4 Створення серверного додатка

Код класу Server, що реалізує RMI-сервер, має такий вигляд:

import java.rmi.Naming;

public class Server

{

public Server()

{

try {

MyRemote k = new MyRemoteImpl();

Naming.rebind("rmi://localhost:1099/Service", k);

}

catch (Exception e) {

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

}

}

public static void main(String args[])

{

System.out.println("Server start succesfull");

new Server();

}

}

Як видно з коду класу Server, серверний процес реєструється в середовищі rmi за допомогою методу Naming.rebind і надає віддалений сервіс «Service» з портом 1099.

Для використання RMI-сервера в розподіленому додатку створіть у робочій папці файл Server.java, помістіть в нього код класу Server і відкомпілюйте його:

> javac Server.java

Соседние файлы в папке [КОМП СИСТЕМЫ]