
- •Интернет-программирование
- •ИП. Доступ к удаленным объектам
- •ИП. Доступ к удаленным объектам
- •ИП. Доступ к удаленным объектам
- •ИП. RMI. Клиент. Классы-заглушки
- •ИП. RMI. Клиент. Удаленные объекты
- •ИП. RMI. Клиент. Удаленные объекты
- •ИП. RMI. Состав примера
- •ИП. RMI. Соглашения именования
- •ИП. RMI. Класс интерфейсов
- •ИП. RMI. Класс пользовательских объектов
- •ИП. RMI. Класс пользовательских объектов
- •ИП. RMI. Класс клиента
- •ИП. RMI. Класс клиента МИЭТ, 2017
- •ИП. RMI. Класс сервера МИЭТ, 2017
- •ИП. RMI. Класс сервера
- •ИП. RMI. Работа примера
- •ИП. RMI vs CORBA
- •ИП. CORBA. История
- •ИП. CORBA. Идея
- •ИП. CORBA. Архитектура
- •ИП. CORBA. Пример
- •ИП. CORBA. Пример
- •ИП. CORBA. Пример. Файл интефейса IDL
- •ИП. CORBA. Пример. Файл интефейса IDL
- •ИП. CORBA. Пример. Компиляция IDL
- •ИП. CORBA. Пример. Классы имплементации. RCalcImpl
- •ИП. CORBA. Пример. Классы имплементации. ResultImpl
- •ИП. CORBA. Пример. Класc клиента RcalcClient. Страница 1
- •ИП. CORBA. Пример. Класc клиента RcalcClient. Страница 2
- •ИП. CORBA. Пример. Класc сервера RСalcServer. Страница 1
- •ИП. CORBA. Пример. Класc сервера RСalcServer. Страница 2
- •ИП. CORBA. Пример. Запуск
- •ИП. CORBA. Пример. Запуск
- •ИП. CORBA. Пример. Запуск
- •ИП. Другие способы вызова методов удаленных сервисов

ИП. CORBA. Идея |
МИЭТ, 2017 |
Общее для всех языков
описание удаленных
методов
IDL
компилято
(interface definition language)
С++ р
Компиляция по IDL кода методов для
`обмена
Спец.
протокол
обмена
брокера
компилято
р Java
Компиляция по IDL кода методов для обмена
Скомп. |
Брокер |
Брокер |
Скомп. |
код обмена |
обмена |
обмена |
код обмена |
Код |
С++ |
|
|
Java |
Код |
приложения |
|
|
приложения |
||
Зона ответственности ORM |

ИП. CORBA. Архитектура |
МИЭТ, 2017 |
Клиент |
Сервер |
|
Класс-реализующий (Impl) |
|
методы для |
Класс-заглушка (Stub), |
удаленного доступа |
|
|
ссылающийся |
|
на объект на сервере |
Сервант, связывающий |
|
класс Impl с сервером |
ORB |
|
ORB |
Object Request |
|
Object Request |
Broker |
IIOP |
Broker |
|
|
|
|
(Internet Inter-ORB Protocol) |
|
Классы ORM |
Зона компиляции |
То, что должен |
|
из файла IDL |
написать программист |
ИП. CORBA. Пример |
МИЭТ, 2017 |
Рассмотрим для примера реализацию на CORBA такой-же функциональности, что и для RMI
В примере RMI требовалось реализовать удаленный вызов двух методов:
GetData |
— |
возвращает модифицированную строку |
MakeCalcultae |
— |
возвращает сумму элементов |
Код интерфейса RMI
public interface RMI extends Remote { //Обявлем простой метод возвращающий строку
public String getData(String text) throws RemoteException;
//Обявлем метод принимающий и возвращающий кастомный объект public Result makeCalculate(BigData bd) throws RemoteException;
}
ИП. CORBA. Пример |
МИЭТ, 2017 |
Процесс создания CORBA-объектов
Написание интерфейса на IDL
Компилирование заглушек из IDL (Stub)
Реализация классов-серверов (Impl)
Создание программы-сервера Server
Создание программы-клиента Client
Запуск службы имен программы-сервера ORB
Запуск сервера
Запуск клиента
ИП. CORBA. Пример. Файл интефейса IDL
Файл RemoteCalculate.idl
module RemoteCalculate {
valuetype Result {
private float Supremum; float getSupremum();
void setSupremum(in float temp);
};
typedef sequence <float, 20> BigData;
interface RCalc {
string getData(in string text);
Result makeCalculate(in BigData bd);
};
};
МИЭТ, 2017
Язык IDL имеет ограниченный список типов
т. к. предназначен для организации универсального межязыкового обмена.
Кроме простых типов вида: int, string, float и т.д. разрешены или
могут быть описаны типы:
последовательность — sequence; структура — structure; тип-значение — valuetype
(может содержать свойства и методы)
ИП. CORBA. Пример. Файл интефейса IDL |
МИЭТ, 2017 |
Компиляция файла idl выполняется командой
idlj -fall RemoteCalculate.idl
idlj - «компилятор» - входящий в состав JDK и JRE Этот компилятор есть для каждого из языков CORBA.
В результате для Java создается ряд *.java файлов, кроме:
Файла сервера
Файла клиента
Файлов имплементации

ИП. CORBA. Пример. Компиляция IDL |
МИЭТ, 2017 |
ИП. CORBA. Пример. Классы имплементации. RCalcImpl |
МИЭТ, 2017 |
package RemoteCalculate; import org.omg.CORBA.*;
public class RCalcImpl extends RCalcPOA {
private ORB orb;
public void setORB(ORB orb_val) { orb = orb_val; }
@Override
public String getData(String text) { //реализация getData text = "Stsrt "+text;
return text;
}
@Override
public Result makeCalculate(float[] bd) { //реализация makeCalculate Result r = new Result();
float suprm = 0;
for(int i=0; i<bd.length; i++) { suprm += bd[i]; }
r.setSupremum(suprm); return r;
}
ИП. CORBA. Пример. Классы имплементации. ResultImpl |
МИЭТ, 2017 |
package RemoteCalculate;
import java.io.Serializable;
public class ResultImpl extends Result implements Serializable {
public ResultImpl() {
}
}
ИП. CORBA. Пример. Класc клиента RcalcClient. Страница 1 |
МИЭТ, 2017. |
package RemoteCalculate;
import java.util.ArrayList; import org.omg.CosNaming.*; import org.omg.CORBA.*;
public class RCalcClient {
static RCalc RCImpl;
public static void main(String args[]) { try {
// создаем объект ORB
ORB orb = ORB.init(args, null);
// Создаем объект пространства имен ORB
org.omg.CORBA.Object objRef = orb.resolve_initial_references("NameService"); NamingContextExt ncRef = NamingContextExtHelper.narrow(objRef);
// Получем ссылку на пространство имен ORB String name = "RCalc";
RCImpl = RCalcHelper.narrow(ncRef.resolve_str(name));
//Теперь можно вызывать удаленные методы
String _rtemp = RCImpl.getData("Test"); //С русскими буквами не сработало System.out.println("--------------------------------------"); System.out.println(_rtemp);