
- •Тема 1. Розподілені системи та ресурси
- •Розвиток розподілених систем.
- •Характеристики розподілених систем.
- •Приклади розподілених систем.
- •Розвиток розподілених систем.
- •Характеристики розподілених систем.
- •Приклади розподілених систем
- •Тема 2. Розподілене пз.
- •Особливості реалізації пз для розподілених систем
- •Вимоги до розподіленого пз.
- •Шаблони рішень для розподіленого пз.
- •Особливості реалізації пз для розподілених систем
- •Вимоги до розподіленого пз.
- •Шаблони рішень для розподіленого пз.
- •Тема 3. Типові архітектури розподіленого пз.
- •Архітектура Клієнт-сервер.
- •Моделі-варіації архітектури "клієнт-сервер".
- •Архітектура p2p (Peer to Peer)
- •Архітектура Клієнт-сервер
- •Моделі-варіації архітектури "клієнт-сервер".
- •Архітектура p2p (Peer to Peer)
- •Тема 4. Api java.Net
- •Основні характеристики взаємодії розподілених додатків.
- •Протокол передачі датаграм udp
- •Використання протоколу tcp
- •Практиктичне застосування api java.Net
- •Тема 5. Технологія Java rmi
- •Визначення реалізації вилученого об'єкта для віддаленого інтерфейсу.
- •Компіляція і виконання віддаленого об'єкта та клієнта.
- •Створення розподіленої системи за допомогою rmi
- •Визначення віддаленого інтерфейсу.
- •Реалізація віддаленого інтерфейсу.
- •Визначення клієнтського додатку.
- •Компіляція та виконання сервера і клієнта.
- •Використання технології rmi для обміну об’єктами.
Визначення віддаленого інтерфейсу.
При проектуванні сервера нам необхідно визначити виконувані їм функції і, відповідно, методи, які буде викликати клієнт. Оскільки операціями нашої системи є реєстрація нової карти, занесення грошей на картку, оплата карткою покупки і перегляд балансу карти, будемо вважати, що наш сервер буде володіти чотирма перерахованими методами - саме їх клієнт (каса) і буде викликати. Оскільки єдиним, що відрізняє одну карту від іншої, є її номер (код) - він і буде служити ідентифікатором, карти і тому буде присутня у всіх методах сервера в якості параметра. Оскільки цей код, взагалі кажучи, алфавітно-цифровий, будемо використовувати тип даних String для його зберігання.
Дистанційні методи, за допомогою яких клієнт взаємодіє з віддаленим об'єктом, використовуючи RMI, повинні бути визначені в віддаленому інтерфейсі. Відповідно, перший етап при створенні розподіленого додатку за допомогою RMI полягає у визначенні віддаленого інтерфейсу, який описує ці віддалені методи. Щоб створити віддаленого інтерфейс, необхідно визначити інтерфейс, який буде розширювати інтерфейс java.rmi.Remote.Інтерфейс Remote являє собою тегірующий інтерфейс - він не оголошує жодних методів, тому не обтяжений реалізацією класу. Розподілений RMI-додаток повинен експортувати об'єкт класу, який реалізує інтерфейс Remote, щоб зробити цей віддалений об'єкт доступним для прийому віддалених викликів методу з будь віртуальної машини Java, яка має з'єднання з комп'ютером, де виконується віддалений об'єкт.
Інтерфейс BillingService (приклад 5.1), який розширює інтерфейс Remote (рядок 9), представляє собою інтерфейс для нашого віддаленого об'єкта (сервера). У рядках 10-17 оголошуються методи для роботи з пластиковими картами. Віддалений об'єкт повинен реалізувати всі оголошені в віддаленому інтерфейсі методи.
1 // BillingService.java
2 // Інтерфейс BillingService оголошує методи для роботи
3 // з пластиковими картами
4 package com.asw.rmi.ex1;
5
6 // Набір базових пакетів Java
7 import java.rmi.*;
8
9 public interface BillingService extends Remote {
10 // визначення нової карти
11 public void addNewCard(String personName, String card) throws RemoteException;
12 // додати кошти на карту
13 public void addMoney(String card, double money) throws RemoteException;
14 // зняти грошові кошти з карти
15 public void subMoney(String card, double money) throws RemoteException;
16 // отримання балансу карти
17 public double getCardBalance(String card) throws RemoteException;
18 }
Лістинг 5.1. Інтерфейс BillingService (html, txt)
Коли вузли взаємодіють між собою по мережі, є ймовірність виникнення проблем при таких взаємодіях. Наприклад, комп'ютер сервера може вийти з ладу або може відмовити який небудь мережевий ресурс. Тому для контролю подібних проблем взаємодії в мережі кожен метод в інтерфейсі Remote повинен містити throws для вказівки, що метод може порушувати контрольовані виключення RemoteException. RMI використовує механізм серіалізації за замовчуванням Java для передачі параметрів методу і повернення значень через мережу. У зв'язку з цим всі параметри методу і повертаються значення повинні мати описувач Serializable або один з примітивних типів.