Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
[КОМП СИСТЕМЫ] / metod-ks-2.doc
Скачиваний:
36
Добавлен:
07.02.2016
Размер:
421.89 Кб
Скачать

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

Соседние файлы в папке [КОМП СИСТЕМЫ]