Заглавная страница Избранные статьи Случайная статья Познавательные статьи Новые добавления Обратная связь FAQ Написать работу КАТЕГОРИИ: АрхеологияБиология Генетика География Информатика История Логика Маркетинг Математика Менеджмент Механика Педагогика Религия Социология Технологии Физика Философия Финансы Химия Экология ТОП 10 на сайте Приготовление дезинфицирующих растворов различной концентрацииТехника нижней прямой подачи мяча. Франко-прусская война (причины и последствия) Организация работы процедурного кабинета Смысловое и механическое запоминание, их место и роль в усвоении знаний Коммуникативные барьеры и пути их преодоления Обработка изделий медицинского назначения многократного применения Образцы текста публицистического стиля Четыре типа изменения баланса Задачи с ответами для Всероссийской олимпиады по праву Мы поможем в написании ваших работ! ЗНАЕТЕ ЛИ ВЫ?
Влияние общества на человека
Приготовление дезинфицирующих растворов различной концентрации Практические работы по географии для 6 класса Организация работы процедурного кабинета Изменения в неживой природе осенью Уборка процедурного кабинета Сольфеджио. Все правила по сольфеджио Балочные системы. Определение реакций опор и моментов защемления |
Статическое и динамическое удаленное обращение к методамСодержание книги
Поиск на нашем сайте
После того как клиент свяжется с объектом, он может через заместителя обратиться к методам объекта. Подобное удаленное обращение к методам {Remote Method Invocation, RMI) в части маршалинга и передачи параметров очень напоминает RPC. Основное различие между RMI и RPC состоит в том, что RMI, как говорилось ранее, в основном поддерживает внутрисистемные ссылки на объекты. Кроме того, отпадает необходимость в клиентских и серверных заглушках общего назначения. Вместо них мы можем использовать значительно более удобные в работе и специфические для объектов заглушки, которые мы также обсуждали. Стандартный способ поддержки RMI — описать интерфейсы объектов на языке определения интерфейсов, так же как в RPC. Однако с тем же успехом мы можем использовать объектный язык, например Java, который обеспечивает автоматическую генерацию заглушек. Такой подход к применению предопределенных определений интерфейсов часто называют статическим обращением {static invocation). Статическое обращение требует, чтобы интерфейсы объекта при разработке клиентского приложения были известны. Также оно предполагает, что при изменении интерфейса клиентское приложение перед использованием новых интерфейсов будет перекомпилировано. В качестве альтернативы обращение к методам может осуществляться более динамичным образом. В частности, иногда удобнее собрать параметры обращения к методу во время исполнения. Этот процесс известен под названием динамического обращения {dynamic invocation). Основное его отличие от статического обращения состоит в том, что во время выполнения приложение выбирает, какой метод удаленного объекта будет вызван. Динамическое обращение обычно выглядит следующим образом: invoke(object. method. input_parameters. output_parameters);
118 Глава 2. Связь Здесь object идентифицирует распределенный объект; method — параметр, точно задающий вызываемый метод; input_parameters — структура данных, в которой содержатся значения входных параметров метода; output_parameters — структура данных, в которой хранятся возвращаемые значения.
В качестве примера рассмотрим добавление целого числа int к объекту fobject файла. Для этого действия объект предоставляет метод append. В этом случае статическое обращение будет иметь вид: Здесь операция id(append) возвращает идентификатор метода append. Для иллюстрации динамического обращения рассмотрим браузер объектов, используемый для просмотра наборов объектов. Предположим, что этот браузер поддерживает удаленное обращение к объектам. Это будет означать, что браузер в состоянии выполнить привязку к распределенному объекту и предоставить пользователю интерфейс с объектом. Пользователю после этого может быть предложено выбрать метод и ввести значения его параметров, после чего браузер сможет произвести действительное обращение. Обычно подобные браузеры объектов разрабатываются так, чтобы они поддерживали любые возможные интерфейсы. Такой подход требует исследования интерфейсов во время выполнения и динамического создания обращений к методам. Другая область применения динамических обращений — службы пакетной обработки, для которых запросы на обращение могут обрабатываться в течение всего того времени, пока обращение ожидает выполнения. Служба может быть реализована в виде очереди запросов на обращение, упорядоченных по времени поступления. Основной цикл службы просто ожидает назначения очередного запроса, удаляет его из очереди и, как это было показано ранее, вызывает процедуру invoke. Передача параметров Поскольку большинство систем RMI поддерживает ссылки на объекты в пределах системы, возможности по передаче параметров при обращениях к методам обычно не столь ограничены, как в случае RPC. Однако существуют определенные тонкости, которые могут усложнить обращения RMI по сравнению с первоначальным представлением. Ниже мы кратко обсудим этот вопрос. Сперва рассмотрим ситуацию, когда все объекты — распределенные. Другими словами, все объекты в системе доступны с удаленных машин. В этом случае при обращениях к методам мы постоянно используем ссылки на объекты как параметры. Ссылки передаются по значению и копируются с одной машины на другую. Если процесс получает ссылку на объект в качестве результата обращения к методу, он легко может выполнить привязку к объекту, на который указывает ссылка, позже, если ему это понадобится. К сожалению, использование исключительно распределенных объектов обычно слишком неэффективно, особенно если эти объекты малы и просты, как, на-
2.3. Обращение к удаленным объектам 119 пример, целые числа и логические значения. Каждое обращение клиента, если он не находится на том же сервере, что и объект, порождает запрос между различными адресными пространствами или, что еще хуже, между различными машинами. Поэтому работа со ссылками на удаленные и локальные объекты обычно происходит по-разному. При обращении к методу с использованием ссылки на объект в качестве параметра эта ссылка копируется и передается как параметр-значение только тогда, когда она относится к удаленному объекту. Именно в этом случае происходит передача объекта по ссылке. Однако если ссылка относится к локальному объекту, то есть к объекту в адресном пространстве клиента, то объект, на который указывает ссылка, целиком копируется и в процессе обращения передается клиенту. Другими словами, объект передается по значению. Эти две ситуации показаны на рис. 2.17, на котором изображены клиентская программа, выполняемая на машине А, и программа-сервер, выполняемая на машине С. Клиент обладает ссылкой на локальный объект 01, который используется в качестве параметра при вызове серверной программы на машине С. Кроме того, он обладает ссылкой на находящийся на машине В удаленный объект 02, который также используется в качестве параметра. При вызове сервера на машину С передается копия всего объекта 01 и копия ссылки на объект 02. Отметим, что независимо от того, работаем ли мы со ссылкой на локальный или глобальный объект, эта работа может быть весьма прозрачна, как, например, в Java. В Java разница будет заметна только в том случае, если локальные объекты будут иметь типы данных, отличные от типов данных удаленных объектов. В противном случае оба типа ссылок будут трактоваться почти одинаково [494]. С другой стороны, в традиционных языках программирования, таких как С, ссылками на локальные объекты могут быть простые указатели, использовать которые в качестве ссылок на удаленные объекты будет невозможно.
120 Глава 2. Связь Дополнительный эффект обращения к методам с использованием в качестве параметра ссылки на объект состоит в возможности копирования объектов. Скрыть это невозможно, и в результате мы вынуждены явно указывать на различие между локальными и распределенными объектами. Понятно, что это различие не только разрушает прозрачность распределения — оно также затрудняет написание распределенных приложений. Пример 1 — удаленные объекты DCE DCE — это пример распределенной системы, появившейся хотя и в правильном месте, но не совсем в нужное время. Она была одной из первых распределенных систем, реализованных в виде промежуточного уровня поверх существующих операционных систем, и достаточно долго вынуждена была доказывать свою состоятельность. К сожалению, время доказательств совпало с «рождением» удаленных объектов и объявлением их панацеей распределенных систем. Поскольку среда DCE была традиционной, основанной на RPC системой, для нее наступили тяжелые времена. Она была признана устаревшей еще до того, как потребители успели установить достаточное число копий. Нет объектов — нет и разговора, а среда DCE их никогда не имела. Команда, создававшая среду DCE, долго убеждала адвокатов объектных технологий, что в ней реализована поддержка объектов. Так, они утверждали, что системы RPC по определению основаны на объектах, поскольку все вопросы реализации и распределения скрыты за интерфейсами. Однако эти аргументы не котировались, и DCE была вынуждена перейти на более явную объектную технологию. В этом пункте мы рассмотрим, как DCE поддерживает распределенные объекты. Объекты DCE интересны для нас тем, что они являются прямым продолжением модели клиент-сервер, основанной на RPC, и представляют собой мост от вызовов удаленных процедур к обращениям к удаленным объектам. Модель распределенных объектов DCE Распределенные объекты были добавлены в DCE в форме расширений языка определения интерфейсов (IDL) вместе с привязками на языке C++. Другими словами, распределенные объекты в DCE описываются на IDL и реализуются на C++. Распределенные объекты имеют вид удаленных объектов, реализация которых находится на сервере. Сервер отвечает за локальное создание объектов C++ и обеспечение доступа к их методам с удаленных клиентских машин. Других способов создания распределенных объектов не существует. Поддерживаются два типа распределенных объектов. Динамические распределенные объекты {distributed dynamic objects) — это объекты, которые создаются сервером локально по требованию клиента и к которым в принципе имеет доступ только один клиент. Для создания такого объекта сервер должен получить запрос от клиента. Это означает, что каждый класс, чтобы иметь возможность создавать динамические объекты, должен содержать процедуру create, которую можно вызвать, используя стандартный механизм RPC. После создания динами-
2.3. Обращение к удаленным объектам 121 ческого объекта управление им переходит к исполняющей системе DCE, связывающей его с тем клиентом, по требованию которого он был создан. В противоположность динамическим объектам, именованные распределенные объекты (distributed named objects) не предназначены для работы с единственным клиентом. Они создаются сервером для совместного использования несколькими клиентами. Именованные объекты регистрируются службой каталогов, так что клиент может найти объект и выполнить привязку к нему. Регистрация означает сохранение уникального идентификатора объекта, а также информации о том, как соединиться с сервером объекта. Разницу между динамическими и именованными объектами иллюстрирует рис. 2.18.
|
|||||||
Последнее изменение этой страницы: 2016-09-19; просмотров: 475; Нарушение авторского права страницы; Мы поможем в написании вашей работы! infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 18.220.86.253 (0.011 с.) |