
- •Міністерство освіти і науки україни
- •1 Лабораторна робота №1 java-сокети
- •1.1 Теоретичні відомості
- •1.1.1 Загальні відомості про сокети
- •1.1.2 Програмні засоби Java для роботи з сокетами
- •1.2 Приклади розподілених java-додатків на основі сокетів
- •1.2.1 Приклад 1
- •1.2.2 Приклад 2
- •1.2.3 Приклад 3
- •1.3 Завдання до лабораторної роботи
- •1.3.1 Завдання 1
- •1.3.2 Завдання 2
- •1.3.3 Завдання 3
- •Завдання
- •1.4 Контрольні питання
- •1.5 Зміст письмового звіту
- •2 Лабораторна робота №2 java rmi
- •2.1 Теоретичні відомості про Java rmi
- •2.1.1 Загальні відомості
- •2.1.2 Рівень заглушок
- •2.1.3 Рівень віддаленого посилання
- •2.1.4 Транспортний рівень
- •2.1.5 Віддалені об'єкти
- •2.1.6 Архітектура Java rmi
- •2.1.7 Створення віддаленого інтерфейсу
- •2.2 Завдання до лабораторної роботи
- •2.2.1 Створення віддаленого інтерфейсу
- •2.2.2 Створення реалізації віддаленого інтерфейсу
- •2.2.3 Створення стаба й скелетона
- •2.2.4 Створення серверного додатка
- •2.2.5 Створення клієнтського додатка
- •2.2.6 Запуск розподіленого додатка
- •2.2.7 Завдання 1 – створення rmi-додатка
- •2.2.8 Завдання 2 – створення власного rmi-додатка
- •2.2.9 Завдання 3 – створення власного rmi-додатка
- •2.2.10 Завдання 4 – самостійна робота за індивідуальним варіантом
- •2.3 Контрольні питання
- •2.4 Зміст письмового звіту
- •Література для додаткового вивчення
- •Додаток а Java-методи для перетворення рядків (тип String) у числові типи даних
- •Додаток б
- •Приклад використання деяких математичних методів Java:
2.1.6 Архітектура Java rmi
Архітектура Java RMI представлена на рисунку 2.1.
Рисунок 2.1 - Архітектура Java RMI
В архітектурі Java RMI є інтерфейс активації, що грає таку ж роль, що об'єктний адаптер в CORBA - щоб не тримати об'єкт на сервері завжди в активному стані, тобто в оперативній пам'яті.
2.1.7 Створення віддаленого інтерфейсу
Для створення розподіленого додатка на основі java RMI необхідно виконати наступні дії.
Створити віддалений інтерфейс і відкомпілювати його.
Написати клас – реалізацію цього інтерфейсу й відкомпілювати його.
Створити заглушки: стаб і скелетон за допомогою rmic.
Створити серверний додаток, що буде надавати віддалений сервіс.
Створити клієнтський додаток, що буде звертатися до сервера за сервісом.
Створимо простий розподілений 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