Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Опорний-констпект_ПРР_Манжула.doc
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
1.23 Mб
Скачать
  1. Визначення віддаленого інтерфейсу.

При проектуванні сервера нам необхідно визначити виконувані їм функції і, відповідно, методи, які буде викликати клієнт. Оскільки операціями нашої системи є реєстрація нової карти, занесення грошей на картку, оплата карткою покупки і перегляд балансу карти, будемо вважати, що наш сервер буде володіти чотирма перерахованими методами - саме їх клієнт (каса) і буде викликати. Оскільки єдиним, що відрізняє одну карту від іншої, є її номер (код) - він і буде служити ідентифікатором, карти і тому буде присутня у всіх методах сервера в якості параметра. Оскільки цей код, взагалі кажучи, алфавітно-цифровий, будемо використовувати тип даних 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 або один з примітивних типів.