- •Интернет-программирование
- •ИП. Доступ к удаленным объектам
- •ИП. Доступ к удаленным объектам
- •ИП. Доступ к удаленным объектам
- •ИП. 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. Пример. Запуск
- •ИП. Другие способы вызова методов удаленных сервисов
ИП. RMI. Класс интерфейсов |
МИЭТ, 2017 |
Проект RMIInterface Интерфейс RMI
package miet;
import java.rmi.Remote;
import java.rmi.RemoteException;
public interface RMI extends Remote {
//Обявлем простой метод возвращающий строку
public String getData(String text) throws RemoteException;
//Обявлем метод принимающий и возвращающий кастомный объект public Result makeCalculate(BigData bd) throws RemoteException;
}
ИП. RMI. Класс пользовательских объектов |
МИЭТ, 2017 |
Проект JavaMietLib Класс BigData (который будем посылать) package miet;
import java.io.Serializable; import java.util.ArrayList;
public class BigData implements Serializable {
//класс BigData будет содержать коллекцию ArrayList private ArrayList data;
public void BigData( ArrayList temp ) { this.data = temp;
}
public ArrayList getdata() { return this.data;
}
public void setdata(ArrayList temp ) { this.data = temp;
}
}
ИП. RMI. Класс пользовательских объектов |
МИЭТ, 2017 |
Проект JavaMietLib Класс Result (который будем принимать) package miet;
import java.io.Serializable;
public class Result implements Serializable {
/*
класс Result будет хранить число типа float, которое является результатом некоего расчета */
private float Supremum;
public float getSupremum() { return this.Supremum;
}
public void setSupremum(float temp) { this.Supremum = temp;
}
}
ИП. RMI. Класс клиента |
МИЭТ, 2017 |
Проект RMIClient Класс RMIClient Метод main |
|
package miet;
import java.rmi.registry.LocateRegistry; import java.rmi.registry.Registry; import java.util.ArrayList;
public class RMIClient {
public static void main(String args[]) {
RMIClient client = new RMIClient(); //создаем экземпляр самого себя System.out.println("Client created");
client.connectServer(); //вызываем метод работы с сервером
}
ИП. RMI. Класс клиента МИЭТ, 2017
Проект RMIClient Класс RMIClient Метод connectServer
private void connectServer() { try {
//получить ссылку на реестр удаленного объекта начальной //загрузки на определенном узле (включая локальный узел) Registry reg = LocateRegistry.getRegistry("127.0.0.1", 1099); //создаем экземпляр объекта класса - заглушки
//с удаленного сервера MIETServer
RMI rmi = (RMI) reg.lookup("MIETServer"); System.out.println("Connect to server");
//Создаем объект BigData и заполняем его данными ArrayList temp = new ArrayList();
temp.add(1.0F); temp.add(2.0F); temp.add(3.0F); BigData bd = new BigData();
bd.setdata(temp);
System.out.println("-------------------------------------- |
"); |
Result rr = rmi.makeCalculate(bd); |
//выполняем метод на удал. объекте |
System.out.println(rr.getSupremum()); //печатаем результат - 6
} catch(Exception e) { System.out.println(e); }
}
ИП. RMI. Класс сервера МИЭТ, 2017
Проект RMIServer Класс RMIServerImpl Метод main
package miet;
import java.rmi.RemoteException; import java.rmi.registry.LocateRegistry; import java.rmi.registry.Registry; import java.rmi.server.UnicastRemoteObject; import java.util.ArrayList; import miet.Result;
public class RMIServerImpl extends UnicastRemoteObject implements RMI {
public RMIServerImpl() throws RemoteException{ super(); }
public static void main(String args[]) { try {
//Создает и экспортирует a Registry экземпляр на локальном узле, который принимает запросы на указанном port.
Registry reg = LocateRegistry.createRegistry(1099); //Привязываем класс RMIServerImpl к имени MIETServer reg.rebind("MIETServer", new RMIServerImpl()); System.out.println("Server started");
} catch(Exception e) { System.out.println(e);
}
}
ИП. RMI. Класс сервера |
МИЭТ, 2017 |
Проект RMIServer Класс RMIServerImpl Методы getData, makeCalculate
//Определяем метод getData
public String getData(String text) throws RemoteException { text = "Stsrt "+text;
return text;
}
//Определяем метод makeCalculate
public Result makeCalculate(miet.BigData bd) throws RemoteException { ArrayList bdArray = bd.getdata();
float suprm = 0;
Result r = new Result();
for(int i=0; i<bdArray.size(); i++) { suprm += (float) bdArray.get(i);
}
r.setSupremum(suprm); return r;
}
ИП. RMI. Работа примера |
МИЭТ, 2017 |
ИП. RMI vs CORBA |
МИЭТ, 2017 |
Технология RMI позволяет связывать только узлы сети с поддержкой JAVA Для удаленной работы с программами на других языках необходимо использовать технологию CORBA
CORBA. Common Object Request Broker Architecture
CORBA позволяет удаленно взаимодействовать программам написанным на языках:
Ada
С
C++
Cobol
Java
Lisp
Object Pascal
Smalltalk
PL/1
Python
ИП. CORBA. История |
МИЭТ, 2017 |
CORBA
Common Object Request Broker Architecture
Первая реализация — 1991 г. Текущая версия — 3.0.2, 2002 г. Сайт - http://www.corba.org/
Спецификацию CORBA поддерживает организация
OMG (Object Management Group) - сайт - www.omg.org
созданная в 1989, такими организациями как: IBM, Sun, Apple, HP и др.
