
- •Міністерство освіти і науки україни
- •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.3 Рівень віддаленого посилання
Рівень віддаленого посилання визначає і підтримує семантику викликів з'єднання RMI. Цей рівень надає об'єкт RemoteRef, що забезпечує з'єднання з об'єктами, які реалізують віддалені служби. Об'єкти заглушки використовують метод invoke() в об'єкті RemoteRef для направлення виклику методу. Об'єкт RemoteRef розуміє семантику виклику віддалених служб.
Перш ніж клієнт зможе використати віддалену службу, екземпляр об'єкта, що реалізує її, повинен бути створений на сервері й експортований у систему RMI - зареєстрований у реєстрі RMI.
2.1.4 Транспортний рівень
Транспортний рівень здійснює з'єднання між різними JVM. Всі з'єднання являють собою засновані на потоках мережні з'єднання, які використовують TCP/IP або UDP. Протокол TCP/IP забезпечує постійне з'єднання між двома машинами. Це з'єднання використовує адресу IP і номер порту. При цьому, замість IP-адреси можна використовувати ім'я DNS. Навіть якщо дві JVM працюють на одному фізичному комп'ютері, вони з'єднуються через стек мережних протоколів TCP/IP, наприклад 127.0.0.1 або localhost. На вершині TCP/IP RMI використовує протокол рівня з'єднання, Java Remote Method Protocol (JRMP), що має захист у процесі комутації даних.
Хоча транспортний рівень, як правило, використовує TCP/IP з'єднання, деякі мережні конфігурації дозволяють тільки одне TCP/ IP-з'єднання між клієнтом і сервером. У цьому випадку, транспортний рівень розподіляє кілька віртуальних з'єднань усередині одного TCP/IP-з'єднання.
Протокол UDP більш простий у реалізації, але він майже не захищений від помилок у процесі передачі.
2.1.5 Віддалені об'єкти
Клієнти знаходять віддалені служби, використовуючи службу імен або каталогів. Служба імен або каталогів виконується на визначеному хості й має визначений номер порту. RMI може використовувати різні служби каталогів, включаючи Java Naming and Directory Interface (JNDI). Крім того, RMI містить у собі просту службу, що називається реєстром RMI - rmiregistry (поставляється з JDK). Реєстр RMI працює на кожній машині, що містить об'єкти віддалених служб і приймає запити на їхнє обслуговування. За замовчуванням rmiregistry використовує порт 1099.
На хості програма сервера створює віддалену службу, попередньо створюючи локальний об'єкт, що реалізує цю службу. Потім вона експортує цей об'єкт в RMI. Як тільки об'єкт експортований, RMI створює службу прослуховування, що очікує з'єднання із клієнтом і запиту служби.
Після експорту сервер реєструє об'єкт у реєстрі RMI, використовуючи загальнодоступне ім'я. На стороні клієнта доступ до реєстру RMI забезпечується статичним класом Naming. Він надає метод lookup(), що використовується клієнтом для запитів до реєстру. Метод lookup() приймає URL, з ім'ям хосту й ім'ям необхідної служби. Метод повертає віддалене посилання на обслуговуючий об'єкт. URL має такий вигляд:
rmi://<host_name> [:<name_service_port>]/<service_name>
де host_name - ім'я, розпізнаване в локальній мережі (LAN), або DNS-ім'я в мережі Internet. Необхідно тільки вказати name_service_port, якщо служба імен виконується з використанням порту, відмінного від 1099.