Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
440-620.docx
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
4.13 Mб
Скачать

9.2. Dcom

Вторая распределенная система объектов, которую мы рассмотрим, — это распре­деленная модель COM (Distributed COM, DCOM) корпорации Microsoft. Как мож­но понять из ее названия, модель DCOM выросла из модели компонентных объек­тов (Component Object Model, COM). COM — это технология, лежащая в основе различных версий операционных систем Windows от Microsoft, начиная с Win­dows 95. В противоположность CORBA, DCOM не является результатом дея­тельности комитета. Это, в частности, видно из того факта, что существует всего лишь 300-страничное черновое описание СОМ, датированное октябрем 1995 года [292]. К сожалению, то, что модель DCOM избежала обсуждения в комитете, по­влекло за собой отсутствие хорошо спроектированной архитектуры с минималь­ным набором базовых элементов, из которых строятся компоненты и службы. Наоборот, в настоящее время DCOM — крайне запутанная система, в которой множество сходных действий выполняются множеством разных способов, и по­добное сосуществование различных решений временами кажется невозможным.

Критиковать модель DCOM нетрудно. Однако сравнивая ее с CORBA, мож­но обоснованно утверждать, что DCOM — это технология, которая в значитель­ной степени доказала свое право на существование. Десятки миллионов человек каждый день используют Windows в сетевой среде, а значит, DCOM — широко распространенная система. В этом смысле CORBA или любым другим распреде­ленным системам до нее еще идти и идти.

Далее мы рассмотрим наиболее важные части DCOM, следуя тому же поряд­ку изложения материала, которого мы придерживались при изучении CORBA. Чтобы понять, что такое DCOM, лучше всего обратиться к одной из книг для программистов, такой как [357] или [386]. Хорошее введение в различные техни­ческие аспекты DCOM имеется в [132]. Обзор DCOM с точки зрения распреде­ленной модели Windows 2000 можно найти в [92].

9.2.1. Обзор

Как уже упоминалось, модель DCOM базируется на модели СОМ. Целью созда­ния СОМ была поддержка разработки компонентов, которые могли бы динамиче­ски активизироваться и взаимодействовать друг с другом. Компонент в СОМ — это исполняемый код, содержащийся в динамически компонуемой библиотеке (DLL) или исполняемой программе.

Сама по себе модель СОМ существует в виде библиотек, компонуемых с про­цессом. Изначально она разрабатывалась для поддержки так называемых со­ставных документов (compound documents). Как мы говорили в главе 3, состав­ные документы — это документы, построенные из разнородных частей, таких как текст (форматированный), изображения, электронные таблицы и т. п. Каждая из этих частей может быть отредактирована при помощи ассоциированного с ней приложения.

Для поддержки бесчисленного множества составных документов Microsoft нужен был обобщенный метод для разделения отдельных частей и объединения

их в единую сущность. Вначале это привело к технологии связывания и внедре­ния объектов (Object Linking and Embedding, OLE). Первая версия OLE использо­вала для передачи информации между частями документа примитивный и не­гибкий способ обмена сообщениями. Вскоре она была заменена следующей версией, также называвшейся OLE, но построенной на базе более гибкого меха­низма СОМ, что привело к появлению структуры, представленной на рис. 9.17.

На рисунке также показан элемент ActiveX — этим термином в настоящее время называют все, что относится к OLE, плюс некоторые новшества, к кото­рым относят гибкую (как правило) способность компонентов выполняться в разных процессах, поддержку сценариев и более или менее стандартную группи­ровку объектов в так называемые элементы управления ActiveX. Среди экспер­тов по DCOM (даже внутри Microsoft) не существует согласия по вопросу о точ­ном определении ActiveX, поэтому мы даже не будем пытаться дать подобное определение.

Модель DCOM добавила к этой структуре весьма существенную вещь — спо­собность процесса работать с компонентами, размещенными на другой маши­не. Однако базовый механизм обмена информацией между компонентами, прин­ятый в DCOM, очень часто совпадает с соответствующими механизмами СОМ. Другими словами, для программиста разница между СОМ и DCOM часто скры­та за различными интерфейсами. Как мы увидим, DCOM в первую очередь пре­доставляет прозрачность доступа. Другие виды прозрачности менее очевидны.

Объектная модель

Как фактически и все остальные распределенные системы объектов, DCOM со­ответствует модели удаленных объектов. Фактически объекты в DCOM могут размещаться как в одном процессе с клиентом, так и на одной машине с ним, а также в процессе, выполняемом на удаленной машине. Позже мы рассмотрим все эти варианты.

Как и в CORBA, объектная модель в DCOM построена на реализации интер­фейсов. Грубо говоря, объект DCOM — это просто реализация интерфейса. Один объект может реализовывать одновременно несколько интерфейсов. Одна­ко в отличие от CORBA в DCOM имеются только бинарные интерфейсы (binary interfaces). Такой интерфейс, в сущности, представляет собой таблицу с указате­лями на реализации методов, которые являются частью интерфейса. Разумеется, для определения интерфейса по-прежнему удобно использовать специальный язык определения интерфейса (IDL). В DCOM также имеется такой язык под названием MIDL (Microsoft IDL — язык IDL от Microsoft), при помощи которого генерируются бинарные интерфейсы стандартного формата.

Достоинство бинарных интерфейсов состоит в том, что они не зависят от языка программирования. В случае CORBA каждый раз для поддержки нового языка программирования необходимо отображать описания IDL на конструкции этого языка. Подобная стандартизация в случае бинарных интерфейсов не нуж­на. Разницу между этими двумя подходами иллюстрирует рис. 9.18.

Каждый интерфейс в DCOM имеет уникальный 128-битный идентификатор, который называется идентификатором интерфейса (Interface Identifier, IID). Каж­дый IID абсолютно уникален, не существует двух интерфейсов с одинаковым идентификатором I ID. Этот идентификатор создается путем комбинирования большого случайного числа, локального времени и адреса сетевого интерфейса текущего хоста. Вероятность того, что два сгенерированных индикатора совпа­дут, практически равна нулю.

Объект DCOM создается как экземпляр класса. Чтобы создать такой объект, необходимо иметь доступ к соответствующему классу. Для этой цели DCOM со­держит объекты класса (class objects). Формально таким объектом может быть все, что поддерживает интерфейс IClassFactory. Этот интерфейс содержит метод Createlnstance, который похож на оператор new в языках С++ и Java. Вызов мето­да Createlnstance для объекта класса приводит к созданию объекта DCOM, со­держащего реализацию интерфейсов объекта класса.

Таким образом, объект класса представляет собой коллекцию объектов одного типа, то есть реализующих один и тот же набор интерфейсов. Объекты, принад­лежащие к одному классу, обычно различаются только в части текущего состоя­ния. Путем создания экземпляров объекта класса становится возможным обра­щение к методам этих интерфейсов. В DCOM на любой объект класса можно сослаться по его глобальному уникальному идентификатору класса (Class Iden­tifier, CLSID).

Все объекты реализуют стандартный объектный интерфейс IUnknown. Когда пу­тем вызова Createlnstance создается новый объект, объект класса возвращает ука­затель на этот интерфейс. Самый важный метод, содержащийся в IUnknown, — ме­тод Querylnterface, который на основании IID возвращает указатель на другой интерфейс, реализованный в объекте.

Важное отличие от объектной модели CORBA состоит в том, что все объекты в DCOM нерезидентные. Другими словами, как только у объекта не остается ссылающихся на него клиентов, этот объект удаляется. Подсчет ссылок произво­дится путем вызова методов AddRef и Release, входящих в интерфейс IUnknown. На­личие исключительно нерезидентных объектов делает невозможным хранение каждым из объектов своего глобально уникального идентификатора. По этой причине объекты в DCOM могут вызываться только по указателям на интер­фейсы. Соответственно, как мы увидим позднее, для передачи ссылки на объект другому процессу необходимо предпринять специальные меры.

DCOM также требует динамического обращения к объектам. Объекты, запро­сы к которым могут создаваться динамически, во время выполнения, должны иметь реализацию интерфейса IDispatch. Этот интерфейс подобен интерфейсу динамического обращения (DII) в системе CORBA.

Библиотека типов и системный реестр

Эквивалент хранилища интерфейсов CORBA в DCOM называется библиотекой типов (type library). Библиотека типов обычно ассоциируется с приложением или другим крупным компонентом, содержащим различные объекты классов. Сама по себе библиотека может храниться в отдельном файле или быть частью приложе­ния. В любом случае библиотека типов в первую очередь требуется для точного описания сигнатуры динамически вызываемых методов. Кроме того, библиотеки типов могут использоваться в системах программирования, например, для ото­бражения структуры разрабатываемых интерфейсов на экране.

Для того чтобы действительно активизировать объект, то есть гарантировать, что он создан и помещен в процесс, из которого будет в состоянии принимать обращения к методам, DCOM использует реестр Windows в комбинации со спе­циальным процессом — менеджером управления службами (Service Control Ma­nager, SCM). Кроме всего прочего, реестр используется для записи отображения идентификаторов классов (CLSID) на локальные имена файлов, содержащих реализации классов. Чтобы создать объект, процесс сначала должен убедиться, что соответствующий объект класса загружен.

Если объект выполняется на удаленном хосте, дело происходит иначе. В этом случае клиент контактирует с менеджером управления службами этого хоста, который представляет собой процесс, ответственный за активизацию объектов, подобно хранилищу реализаций в CORBA. SCM этого удаленного хоста про­сматривает свой локальный реестр в поисках файла, ассоциированного с CLSID, после чего запускает процесс, содержащий этот объект. Сервер выполняет мар­шалинг указателя на интерфейс и возвращает его клиенту, который выполняет демаршалинг указателя и передает его заместителю.

Общая архитектура DCOM, включая объекты классов, реальные объекты и заместители, представлена на рис. 9.19 [105]. Процесс клиента получает доступ к SCM и реестру, что помогает ему найти удаленный объект и выполнить при­вязку к нему. Клиенту предлагается заместитель, реализующий интерфейсы это­го объекта.

Сервер объектов содержит заглушку для маршалинга и демаршалинга обра­щений, которые он будет передавать реальному объекту. Связь между клиентом и сервером обычно реализуется путем вызовов RPC, но, как мы увидим чуть ни­же, в определенных случаях могут быть использованы и другие способы связи.

Службы DCOM

Модель DCOM можно рассматривать как расширенную за счет добавления средств сообщения с удаленными объектами модель СОМ. Однако СОМ и сама по себе стала иной, и новая ее версия называется СОМ+. Модель СОМ+ тоже можно рассматривать как расширенный вариант модели СОМ, содержащий раз­личные службы, которые ранее были полезными дополнениями к СОМ. Так, в частности, СОМ+ включает расширения, которые позволяют серверу успешно поддерживать одновременно несколько объектов. Кроме того, добавлены служ­бы, реализуемые на внешних серверах, например системы очередей сообщений.

Провести черту между COM, DCOM, СОМ+ и внешними службами часто бывает затруднительно, и подобные попытки лишь способствуют путанице. Да­лее мы будем просто ссылаться на DCOM как на расширение, включающее и СОМ, и СОМ+, и ActiveX. Там, где это возможно и имеет смысл, мы будем раз­делять службы, просто помогающие DCOM, и компоненты, фактически являю­щиеся частями DCOM. Чтобы понять, какие службы непосредственно входят в DCOM, рассмотрим табл. 9.4, в которой перечислены службы CORBA и соответ­ствующие им службы DCOM. Также в этой таблице приводятся службы Win­dows 2000, обычно доступные клиентам модели DCOM, но не являющиеся ее частями.

Ниже мы рассмотрим большую часть этих служб. Следует отметить, что сама по себе модель DCOM, в отличие от CORBA, не является законченной распре­деленной системой, поскольку требует наличия внешних служб. Так, например, очевидно, что служба именования является неотъемлемой частью распределен­ной системы. Именование в Windows 2000 поддерживается при помощи службы Active Directory. Эта служба, в сущности, состоит из набора серверов каталогов

LDAP, которые именуются и просматриваются при помощи системы DNS. Мы говорили о DNS и LDAP в главе 4. Однако Active Directory не является частью DCOM. Соответственно, при запуске приложений DCOM в среде UNIX эти приложения не в состоянии использовать ту же самую службу именования, что и в среде Windows 2000. У переносимости всегда есть некоторые границы.

Очевидно, что подобный подход препятствует межоперационной совмести­мости. С другой стороны, учитывая, что фактически все приложения DCOM рассчитаны на работу в среде Windows, непонятно, насколько этот недостаток совместимости действительно можно считать проблемой.

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