
- •Міністерство освіти і науки україни
- •1 Лабораторна робота №3 corba
- •1.1 Теоретичні відомості про corba
- •1.1.1 Загальні відомості про corba
- •1.1.2 Ior-доступ до віддалених об'єктів
- •1.1.3 Мова idl
- •1.2 Завдання до лабораторної роботи
- •1.2.1 Порядок створення java corba-додатка
- •1.2.2 З'єднання із сервером без використання служби імен
- •1.3 Контрольні питання
- •1.4 Зміст письмового звіту
- •2 Лабораторна робота №4 java-сервлети
- •2.1 Теоретичні відомості
- •2.2 Завдання до лабораторної роботи
- •2.2.1 Створення і розгортання Web-додатку на основі сервлет-технології
- •2.2.2 Перший сервлет
- •2.2.3 Завдання 1
- •2.2.4 Робота сервлетів з протоколом http
- •2.2.5 Завдання 2
- •2.2.6 Завдання 3 – самостійна робота за індивідуальним варіантом
- •2.3 Контрольні питання
- •2.4 Зміст письмового звіту
- •Література для додаткового вивчення
- •Додаток а Індивідуальні варіанти до лабораторної роботи №3
- •Додаток б Конфігурування Web-додатків з використанням сервлет-технології
- •Додаток в Основні поняття html
- •Обов'язкові мітки html-документів
- •Форми html-документів
1.2 Завдання до лабораторної роботи
1.2.1 Порядок створення java corba-додатка
Виконайте зазначену нижче послідовність дій для створення java CORBA-додатка.
1.2.1.1 Створіть окремий каталог для додатка у своєму робочому каталозі. Створіть файл Counter.idl. (текст файлу наведений вище).
1.2.1.2 Виконайте компіляцію цього файлу за допомогою java IDL-компілятора:
idlj -fall Counter.idl
У результаті в поточному каталозі повинні з'явитися файли:
Counter.java,
_CounterStub.java,
CounterHelper.java,
CounterHolder.java,
CounterOperations.java.
1.2.1.3 Створіть клас, що реалізує інтерфейс Counter. Такі класи повинні називатися так, щоб у їх імені було слово 'Servant', у нашому випадку це буде CounterServant.
// файл CounterServant.java
class CounterServant extends _CounterImplBase
{
public int count(String msg)
{
return msg.length();
}
}
Зверніть увагу, що цей клас успадковує _CounterImplBase.
Як видно, тут реалізований метод count, що у даному прикладі підраховує кількість букв у прийнятому повідомленні.
1.2.1.4 Створіть сервер java CORBA-додатка, реалізувавши в його коді ряд пунктів.
Розглянемо докладніше ці пункти.
1. Створення й ініціалізація ORB. Провадиться викликом статичного методу init класу ORB
ORB orb = ORB.init();
2. Створення екземпляра класу віддаленого об'єкта й реєстрація його в ORB
CounterServant counterRef = new CounterServant();
orb.connect(counterRef);
3. Одержання контексту імен (NamingContext)
org.omg.CORBA.Object objRef =
orb.resolve_initial_references("NameService");
NamingContext ncRef = NamingContextHelper.narrow(objRef);
У першому рядку ми одержуємо об‘єктне посилання на службу імен (NameService). Але фактично це звичайний CORBA-об'єкт і для того, щоб використати його як контекст імен (NamingContext), необхідно викликати метод narrow класу NamingContextHelper, що конкретизує даний CORBA-об'єкт.
4. Реєстрація імені віддаленого об'єкта (CounterServant)
Pеєстрація імені провадиться для того, щоб клієнт зміг знайти віддалений об'єкт. Задля цієї мети служить функція rebind(NameComponent[] nc, Object obj) інтерфейсу NamingContext.
NameComponent nc = new NameComponent("Counter", "");
//перший параметр вказує ім'я об'єкта,
//другий використовувати не обов'язково
NameComponent path[] = {nc};
ncRef.rebind(path, countRef);
5. Очікування запитів від клієнта.
java.lang.Object sync = new java.lang.Object();
synchronized (sync)
{ sync.wait(); }
Після того як сервер обробить запит від клієнта й виконає метод count він знову перейде в стан очікування.
Код сервера має вигляд (файл CounterServer.java):
// Імпортуються пакети підтримки CORBA
// Сервіс імен, виняткові ситуації сервісу імен,
// класи підтримки стандарту CORBA
import org.omg.CosNaming.*;
import org.omg.CosNaming.NamingContextPackage.*;
import org.omg.CORBA.*;
public class CounterServer {
public static void main(String args[])
{
try
{
ORB orb = ORB.init(args, null);
CounterServant counterRef = new CounterServant();
orb.connect(counterRef);
org.omg.CORBA.Object objRef =
orb.resolve_initial_references("NameService");
NamingContext ncRef = NamingContextHelper.narrow(objRef);
NameComponent nc = new NameComponent("Counter", "");
NameComponent path[] = {nc};
ncRef.rebind(path, counterRef);
java.lang.Object sync = new java.lang.Object();
synchronized (sync)
{
sync.wait();
}
}
catch(Exception e){System.out.println("Exception: "+e);
}
}
}
1.2.1.5 Створіть клієнта java CORBA-додатка, реалізувавши в його коді ряд пунктів.
Розглянемо докладніше ці пункти.
1. Створення й ініціалізація ORB.
2. Одержання контексту служби імен (NamingContext)
3. Знаходження віддаленого об'єкта
4. Виклик методу count.
Як видно, перші два пункти збігаються з етапами створення серверного додатка, тому розглядати їх не будемо.
Пункт 3 реалізується в такий спосіб. Створюється об'єкт NameComponent. Викликається метод resolve(NameComponent[] path), що розшукує по імені віддалений об'єкт (стандартний CORBA-об'єкт). За допомогою методу narrow(org.omg.CORBA.Object obj) класу CounterHelper отримуємо об'єктне посилання на інтерфейс Conter.
NameComponent nc = new NameComponent("Counter", "");
NameComponent path[] = {nc};
org.omg.CORBA.Object obj= ncRef.resolve(path);
Counter countRef = CounterHelper.narrow(obj);
Тепер можна викликати метод count (п. 4)
String msg = "Try to count";
int count = counterRef.count(msg);
Код клієнта має вигляд (файл CounterClient.java):
import org.omg.CosNaming.*;
import org.omg.CORBA.*;
import java.lang.*;
public class CounterClient
{
public static void main(String args[])
{
try
{
ORB orb = ORB.init(args, null);
org.omg.CORBA.Object objRef =
orb.resolve_initial_references("NameService");
NamingContext ncRef =
NamingContextHelper.narrow(objRef);
NameComponent nc = new NameComponent("Counter", "");
NameComponent path[] = {nc};
Counter counterRef =
CounterHelper.narrow(ncRef.resolve(path));
String msg = "try to count";
int count = counterRef.count(msg);
System.out.println("Number of chars in message is:" + count);
}
catch (Exception e)
{
System.out.println("Exception : " + e);
}
}
}
1.2.1.6 Відкомпілюйте всі файли java CORBA-додатка за допомогою команди: javac *.java
1.2.1.7 Запустіть додаток виконавши наступну послідовність.
1. Запустіть, в окремій консолі, сервер імен jdk:
> tnameserv -ORBInitialPort 900
2. Запустіть, в окремій консолі, сервер додатка:
>java CounterServer -ORBInitialPort 900
3. Запустіть, в окремій консолі, клієнта додатка:
>java CounterClient -ORBInitialPort 900 -ORBInitialHost localhost
Результатом роботи правильно написаного й установленого додатка буде:
Number of chars in message is:12