Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
java1.docx
Скачиваний:
8
Добавлен:
17.04.2019
Размер:
193.35 Кб
Скачать

Промежуточное программное обеспечение распределительных компьютерных систем

Промежуточное программное обеспечение распределительных компьютерных систем (midleware) программное обеспечение осуществляющее взаимодействие и сетевыми ОС.

В основе middleware лежит концепция RPC (вызовы удаленных процедур). Основная идея RPC обеспечить программистом приложений возможность вызова процедуры развернутой и выполняющейся на удаленном хосте. Таким образом как если бы вызывалась локальная процедура. При этом система RPC должна решать ряд задач:

  1. Трансформировать сложные типы данных приложений (вызовы и результаты удаленных процедур) в транспортное представление (поток байт или дейтаграммы транспортных протоколов). Этот процесс называется маршальным. Выполнить обратное преобразование – демаршальный.

  2. Как правило, клиент вызывающий процедуру и сервер ее выполняющий работают параллельно, потому система RPC должна обеспечить ее синхронизацию.

Центральным архитектурным элементом является stub. В системе RPC они выполняют синхронизацию маршальник-демаршальник и сетевые коммуникации. RPC включает в себя службу называемую реестром RPC (registry). С помощью нее серверы находят себя в сети. Интерфейс активации RPC предназначен для вызова и загрузки байт-кода сервера и программы. Во всех системах RPC используется некоторая разновидность языка интерфейса IDL. Он используется для определения удаленной процедуры. При этом состав RPC входит компилятор IDL, используемый для автоматической организации stub.

JAVA RMI

RMI – удаленный вызов методов, одна из тонкостей создания распределенных приложений на языке java. Определение удаленной службы определяется с помощью интерфейса java, а реализация удаленной службы в отдельном классе.

Архитектура java rmi

В RMI стаб и скелетон генерируются с помощью компилятора RMIС на основе интерфейса распределения удаленной службе. RMI включает в себя службу которая называется реестром RMI (RMI registry). Реестр RMI по умолчанию использует порт 1099. На стороне клиента доступ к реестру RMI осуществляется с помощью класса Naming. Он представляет собой метод lookup() который клиент использует для запроса к реестру. Метод lookup() принимает URL. Он указывает на имя хоста и имя требуемой службы (например: rmi://localhost:1099/имя службы). Метод возвращает клиенту ссылку удаленную на обслуживающий объект. Но на самом деле клиент получает ссылку на старт. Задача стаба и скелетона маршалинг-демаршалинг параметров удаленного вызова и возвращаемых значений. В JAVA маршалинг называется сериализацией. Интерфейс активации предназначен для вызова и загрузки байт-кода серверной программы.

Порядок создания распределенного rmi-приложения

Первым шагом является написание и компилирование Интерфейса RMI. Так интерфейс count определяет простой метод сложения двух чисел.

//count.java

import java.rmi

public interface count extends Remote

{public long add(long a, long b)throws Remote Exception;}

Интерфейс count наследует класс Remote. В JAVA все удаленные интерфейсы должны наследовать класс Remote. Они не содержат ни каких методов, а являются файлом того, что в приложении есть удаленный интерфейс.

Следующим шагом является реализация удаленной службы. Она осуществляется путем создания класса add. Класс countDo:

//countDo.java

import java.rmi;

import java.rmi.server*;

public class CountDo extends Unicast Remote Object implements Count{

public CountDo()throws Remote Exception

{sup object()

public long add(long a, long b)

{super

{return a+b;}}

Класс реализации наследует класс Unicast Remote Object для соединения с системой RMI. Ссылка super() выполняет это соединение и инициализирует удаленный объект. Далее используется компилятор RMI rmic для генерации стаба и скелетона, компилятор запускается с указанного файла класса.

Класс count Server сервер RMI имеет следующий вид:

import java.rmi.*;

import java.net;

public class CountServer{

public CountServer()

{try{CountDo count=newCountDo();

Naming.rebing(“rmi://localhost:1099/CountServer”,count);}

cath(Exception e){System.out.prinln(“Exception:”+e);}}

public static void main (String[]args){

new CountServer();}}

Метод Naming.rebing связывает имя URL с объектом по умолчанию в качестве хоста используется текущий хост. Код клиента RMI-приложение имеет вид:

import java.rmi.*;

import java.net.*;

public class CountClient

{public static void main(String[]args){

try{StringCountURL=

“rmi://localhost:1099/CountServer”;

Count count=(count)Naming.lookup(Count URL);

System.out.println(count.add)(4,5);}

cath(Exception e)

{System.out.println(:Exception;”+e);}}}

Метод lookup возвращает ссылку на удаленный объект. Запуск распределенного RMI-приложения осуществляется с помощью трех консолей. Первый из них запускаем реестр RMI, во второй консоли запускаем сервер, в третьей клиентскую программу. Если все выполнено верно, на экране появиться 9.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]