Главная » Delphi » Структура COM+

0

Вышеупомянутый класс  TMtsAutoObject является  базовым для  всех  объектов COM+, создаваемых при помощи мастера Delphi. Он относительно прост  и определен в модуле MtsObj следующим образом:

type

TMtsAutoObject = class(TAutoObject, IObjectControl)

private

FObjectContext: IObjectContext;

protected

{ IObjectControl }

procedure Activate; safecall;

procedure Deactivate; stdcall;

function CanBePooled: Bool; stdcall;

procedure OnActivate; virtual;

procedure OnDeactivate; virtual;

property ObjectContext: IObjectContext read FObjectContext;

public

procedure SetComplete;

procedure SetAbort;

procedure EnableCommit;

procedure DisableCommit;

function IsInTransaction: Bool;

function IsSecurityEnabled: Bool;

function IsCallerInRole(const Role: WideString): Bool;

end;

Класс TMtsAutoObject — это, по существу, класс TAutoObject, к которому добав

лены возможности по управлению инициализацией и очисткой контекста.

В нем реализован интерфейс IObjectControl, отвечающий за инициализацию и очистку компонентов COM+. Он обладает следующими методами:•  Activate() —   позволяет объекту  выполнять инициализацию контекста при активизации. Этот  метод  вызывается средствами COM+ прежде любых  других пользовательских методов компонента.

•  Deactivate() —   позволяет  выполнять  очистку   контекста  при   деактивации объекта.

•  CanBePooled() —  в MTS не  использовался, однако  поддерживается в COM+.

Описан в настоящей главе ранее.

Класс TMtsAutoObject содержит виртуальные методы  OnActivate() и OnDeac- tivate(), которые происходят от закрытых методов Activate() и Deactivate(), используемых для активизации и деактивации контекста.

Кроме того,  класс  TMtsAutoObject использует указатель   на  интерфейс COM+ IObjectContext в виде свойства ObjectContext. Класс  TMtsAutoObject позволя ет  пользователям  создавать  реализации  любых   методов  интерфейса IObjectContext. Например, в реализации метода  TMtsAutoOb- ject.SetComplete() просто сравнивается значение поля  FObjectContext со зна чением nil, а затем вызывается метод FObjectContext.SetComplete().

Ниже перечислены все методы интерфейса IObjectContext с кратким описани

ем каждого  из них:

•  CreateInstance() — создает  экземпляр еще одного  объекта COM+. Этот метод выполняет ту же  операцию, что  и метод  IClassFactory.CreateInstance() при использовании спецификации COM.

•  SetComplete() —  извещает средства COM+  о  том,  что  компонент завершил работу и больше  не будет поддерживать информацию о внутреннем состоянии. Если компонент является транзакционным, то данный метод  указывает  также на завершение транзакции. После  его вызова  средства COM+ могут дезактиви ровать объект, а затем освободить ресурсы  для повышения масштабируемости.

•  SetAbort() — аналогичен методу SetComplete(). Извещает средства COM+ о том,  что  компонент завершил работу  и больше  не будет поддерживать инфор мацию  о состоянии. Данный метод  вызывается в случае возникновения ошиб ки, поэтому все незавершенные транзакции должны  быть прерваны.

•  EnableCommit() — указывает  на то, что компонент находится в состоянии, ко гда транзакция может  быть  закрыта вызовом метода  SetComplete(). Это  со стояние компонента устанавливается по умолчанию.

•  DisableCommit() —  указывает  на то,  что  компонент находится в некоррект ном состоянии и для завершения транзакции требуется вызов  дополнительных методов.

•  IsInTransaction() —   позволяет компоненту  определить,  находится ли  он внутри контекста транзакции.

•  IsSecurityEnabled() —  позволяет компоненту  определить, доступна  ли для него  система безопасности  COM+.  Этот  метод   всегда  возвращает  значение True, кроме  тех случаев,  когда компонент работает в пространстве клиентско го процесса.•  IsCallerInRole() — позволяет компоненту определить, принадлежит ли его клиент заданной роли  COM+. Данный метод является ключевым в ролевой сис теме  безопасности COM+. Более  подробно вопрос ролей будет рассмотрен не сколько позднее.

Ядро средств  поддержки COM+ определено в модуле Mtx. Этот модуль является вариантом файла  заголовка mtx.h для  языка  Pascal.  Он  содержит типы  (например IObjectControl и IObjectContext) и функции, которые используются при  работе с API COM+.

Источник: Тейксейра, Стив, Пачеко, Ксавье.   Borland Delphi 6. Руководство разработчика. : Пер.  с англ. — М. : Издательский дом “Вильямс”, 2002. —  1120 с. : ил. — Парал. тит. англ.

По теме:

  • Комментарии