[КОМП СИСТЕМЫ] / Отчет
.docxМІНІСТЕРСТВО ОСВІТИ І НАУКИ УКРАЇНИ
ЗАПОРІЗЬКИЙ НАЦІОНАЛЬНИЙ ТЕХНІЧНИЙ УНІВЕРСИТЕТ
Факультет інформатики та обчислювальної техніки
Кафедра: «Комп’ютерні системи
та мережі»
ЗВІТ
З лабораторної роботи
З дисципліни «Комп’ютерні системи»
Виконав ст. гр. КНТз-511 _____________ Малахов Є.О.
Прийняв викладач _____________ Дьячук Т.С.
Запоріжжя 2014 ©
JAVA RMI
Мета роботи: вивчити основи RMI, створити ряд розподілених додатків на основі технології RMI
Remote method invocation (віддалений виклик методів) - одна з перших технологій створення розподілених додатків мовою java.
RMI додаток складається із трьох рівнів:
-
Рівень заглушок.
-
Рівень віддаленого посилання.
-
Транспортний рівень.
Архітектура Java RMI
В архітектурі Java RMI є інтерфейс активації, що грає таку ж роль, що об'єктний адаптер в CORBA - щоб не тримати об'єкт на сервері завжди в активному стані, тобто в оперативній пам'яті.
Створення віддаленого інтерфейсу
Для створення розподіленого додатка на основі java RMI необхідно виконати наступні дії.
-
Створити віддалений інтерфейс і відкомпілювати його.
-
Написати клас – реалізацію цього інтерфейсу й відкомпілювати його.
-
Створити заглушки: стаб і скелетон за допомогою rmic.
-
Створити серверний додаток, що буде надавати віддалений сервіс.
-
Створити клієнтський додаток, що буде звертатися до сервера за сервісом.
Створимо простий розподілений RMI-додаток: клієнт передає серверу ціле число типу long і отримує результат обчислення квадрата цього числа, що потім виводиться на екран.
Завдання 1 – створення RMI-додатка
Завдання 2 – створення власного RMI-додатка
Завдання 3 – створення власного RMI-додатка
Завдання 1 – створення RMI-додатка
Створення віддаленого інтерфейсу
Код віддаленого інтерфейсу з ім'ям MyRemote має такий вигляд:
import java.rmi.*;
public interface MyRemote extends Remote
{
public long func(long a) throws RemoteException;
}
Відкомпілюємо:
> javac MyRemote.java
Створення реалізації віддаленого інтерфейсу:
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;
return res;
}
}
Відкомпілюємо:
> javac MyRemoteImpl.java
Створення стаба й скелетона:
> rmic MyRemoteImpl
Створення серверного додатка:
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();
}
}
Відкомпілюємо:
> javac Server.java
Створення клієнтського додатка:
import java.rmi.*;
import java.net.*;
public class Client
{
public static void main(String[] args)
{
try {
MyRemote k = (MyRemote)Naming.lookup("rmi://"+args[0]+"/Service");
System.out.println(" Result = "+k.func(Long.parseLong(args[1])));
}
catch (Exception e)
{
System.out.println("Exception: " + e);
}
}
}
Відкомпілюємо:
> javac Client.java
Запуск розподіленого додатка:
Для запуску RMI-додатка необхідно виконати наступні дії.
-
Увійти в робочу папку.
-
Запустити службу реєстру RMI. Для цього виконати команду
> rmiregistry.
Реєстр RMI буде запущений в окремому консольному вікні й протягом його роботи можна використовувати службу RMI.
-
Запустити серверний додаток, для чого виконати
> java Server.
У результаті серверний додаток буде запущено в окремому консольному вікні.
-
Запустити клієнтський додаток, для чого виконати
> java Client localhost 14.
У результаті клієнт передасть серверу число 14 і отримає результат 196.
Завдання 2 – створення власного RMI-додатка
Код віддаленого інтерфейсу з ім'ям MyRemote має такий вигляд:
import java.rmi.*;
public interface Malakhov extends Remote
{
public long func(long a) throws RemoteException;
}
Відкомпілюємо:
> javac Malakhov.java
Створення реалізації віддаленого інтерфейсу:
import java.rmi.*;
import java.rmi.server.*;
public class MalakhovImpl extends UnicastRemoteObject implements Malakhov
{
public MalakhovImpl() throws RemoteException
{
super();
}
public long func(long a) throws RemoteException
{
long res=(a*a*a)*23;
return res;
}
}
Відкомпілюємо:
> javac MalakhovImpl.java
Створення стаба й скелетона:
> rmic MalakhovImpl
Створення серверного додатка:
import java.rmi.Naming;
public class Server
{
public Server()
{
try {
Malakhov k = new MalakhovImpl();
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();
}
}
Відкомпілюємо:
> javac Server.java
Створення клієнтського додатка:
import java.rmi.*;
import java.net.*;
public class Client
{
public static void main(String[] args)
{
try {
Malakhov k = (Malakhov)Naming.lookup("rmi://"+args[0]+"/Service");
System.out.println(" Result = "+k.func(Long.parseLong(args[1])));
}
catch (Exception e)
{
System.out.println("Exception: " + e);
}
}
}
Відкомпілюємо:
> javac Client.java
Запуск розподіленого додатка:
Для запуску RMI-додатка необхідно виконати наступні дії.
-
Увійти в робочу папку.
-
Запустити службу реєстру RMI. Для цього виконати команду
> rmiregistry.
Реєстр RMI буде запущений в окремому консольному вікні й протягом його роботи можна використовувати службу RMI.
-
Запустити серверний додаток, для чого виконати
> java Server.
У результаті серверний додаток буде запущено в окремому консольному вікні.
-
Запустити клієнтський додаток, для чого виконати
> java Client localhost 23.
У результаті клієнт передасть серверу число 23 і отримає результат 279841.
Завдання 3 – створення власного RMI-додатка
Код віддаленого інтерфейсу з ім'ям MyRemote має такий вигляд:
import java.rmi.*;
public interface Malakhov extends Remote
{
public float func(float a, float b) throws RemoteException;
}
Відкомпілюємо:
> javac Malakhov.java
Створення реалізації віддаленого інтерфейсу:
import java.rmi.*;
import java.rmi.server.*;
public class MalakhovImpl extends UnicastRemoteObject implements Malakhov
{
public MalakhovImpl() throws RemoteException
{
super();
}
public float func(float a, float b) throws RemoteException
{
long res=(a+b);
return res;
}
}
Відкомпілюємо:
> javac MalakhovImpl.java
Створення стаба й скелетона:
> rmic MalakhovImpl
Створення серверного додатка:
import java.rmi.Naming;
public class Server
{
public Server()
{
try {
Malakhov k = new MalakhovImpl();
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();
}
}
Відкомпілюємо:
> javac Server.java
Створення клієнтського додатка:
import java.rmi.*;
import java.net.*;
public class Client
{
public static void main(String[] args)
{
try {
Malakhov k = (Malakhov)Naming.lookup("rmi://"+args[0]+"/Service");
System.out.println(" Result = "+k.func(Float.parseFloat(args[1]), Float.parseFloat(args[2])));
}
catch (Exception e)
{
System.out.println("Exception: " + e);
}
}
}
Відкомпілюємо:
> javac Client.java
Запуск розподіленого додатка:
Для запуску RMI-додатка необхідно виконати наступні дії.
-
Увійти в робочу папку.
-
Запустити службу реєстру RMI. Для цього виконати команду
> rmiregistry.
Реєстр RMI буде запущений в окремому консольному вікні й протягом його роботи можна використовувати службу RMI.
-
Запустити серверний додаток, для чого виконати
> java Server.
У результаті серверний додаток буде запущено в окремому консольному вікні.
-
Запустити клієнтський додаток, для чого виконати
> java Client localhost 2.3 4.5.
У результаті клієнт передасть серверу число 2.3 та 4.5 і отримає результат 6.8.