Добавление свойств и методов
Добавление свойств и методов в ваш MTS-объект ничем не отличается от добавления свойств и методов в любой другой СОМ-объект.
Использование мастера MTS-объекта
Для запуска мастера выполните:
1. Выберите в главном меню пункт File/New (Файл/Новый).
2. В появившемся диалоговом окне выберите вкладку Multitier.
3. Дважды щелкните на пиктограмме MTS Object (рис. 3.34).
В результате выполнения приведенных выше шагов запустится мастер создания MTS-объекта (рис. 3.35).
В поле CoClass Name (Имя со-класса) введите имя для вашего MTS-класса, например MуMTS. В выпадающем списке Threading Model (Модель потока) выберите тип потоковой модели для вашего MTS-объекта (потоковые модели были рассмотрены в предыдущих главах). Далее выберите модель транзакции, установив нужный переключатель Transaction Model (Модель транзакции).
Остановимся на моделях транзакции более подробно. Итак, каждый MTS-объект должен иметь атрибут транзакции, который записывается в MTS-
каталог. MTS-каталог, кроме того, содержит информацию о компонентах, пакетах и ролях. Разработчик может управлять MTS-каталогом при помощи MTS -обозревателя.
Рис. 3.34. Создание нового MTS-объекта
Рис. 3.35. Мастер создания MTS-объекта
Имеются четыре значения, которые может принимать атрибут транзакции:
- Requires a transaction (Требует транзакцию). MTS-объект должен выполняться внутри области транзакции. При создании нового MTS-объекта объект наследует транзакцию от клиента. Если клиент не содержит транзакций, MTS автоматически создает транзакцию для MTS-объекта;
- Requires a new transaction (Требует новую транзакцию). MTS-объект должен выполняться внутри собственной транзакции. При создании нового
объекта MTS автоматически создает новую транзакцию для MTS-объекта, независимо от того, имеет ли клиент транзакции. Объект никогда не работает внутри области транзакций клиента. Система всегда создает независимые транзакции для новых объектов;
- Supports transactions (Поддерживает транзакции). MTS-объект может выполняться внутри области транзакций клиента. При создании нового объекта, объект наследует транзакции клиента. Если клиент не имеет транзакций, MTS-объект будет создан также без транзакций;
- Does not support transactions (He поддерживает транзакции). MTS-объект не работает в области транзакций. При создании нового объекта объект создается без транзакций, независимо от того, имеет ли клиент транзакции. Используйте данное значение атрибута транзакций для создания СОМ-объектов, обеспечивающих поддержку MTS.
Опция Generate Event support code (Создавать код поддержки событий) устанавливается, если вы хотите использовать собственный интерфейс для управления событиями вашего MTS-объекта.
После нажатия кнопки ОК в окне мастера создания MTS-объекта к вашему проекту будет добавлен новый модуль, который содержит объявление нового MTS-объекта (листинг 3.13).
Листинг 3.13
uses
ActiveX, MtsObj, Mtx, ComObj, Project2_TLB, StdVcl;
type
TMyMTS = class(TMtsAutoObject, IMyMTS)
protected
{ Protected declarations }
end;
implementation
uses ComServ;
initialization
TAutoObjectFactory.Create(ComServer, TMyMTS, Class_MyMTS, ciMultilnstance, tmApartment);
end.
В дополнение, мастер допишет библиотеку типов к проекту и откроет редактор библиотеки типов (рис. 3.36).
Рис. 3.36. Редактор библиотеки типов и MTS-объект
MTS-компоненты
MTS-компоненты обеспечивают следующие услуги низкого уровня:
- управление системными ресурсами, включая процессы, потоки и поддержку одновременного подключения к базе данных большого числа пользователей;
- автоматическое управление транзакциями;
- создание, выполнение и удаление компонентов сервера;
- обеспечение безопасности вашего приложения с помощью авторизации по ролям.
Delphi предоставляет возможность использовать в качестве клиентов MTS произвольные приложения или активные формы (ActiveForms).
MTS-компоненты - это СОМ-серверы внутри процесса, которые содержатся внутри библиотек DLL. Они отличаются от других СОМ-компонентов тем, что выполняются в специальной MTS-среде. MTS-компоненты реализованы в Delphi так же, как и остальные классы.
Обычно, MTS-серверы являются небольшими объектами и используются для различных бизнес-функций. Например, MTS-компоненты могут обеспечивать бизнес-правила приложения, а также различные виды и превращения состояний приложения. Рассмотрим, например, типичное приложение, которое может использоваться в медицинских учреждениях. Как известно, различные записи баз данных хранят сведения о пациентах, их истории болезней, группы крови и многое другое. MTS-компонент позволяет в реальном времени обновлять те изменения, которые произошли. Например, был добавлен новый пациент, введены результаты анализов и т. д.
Как показано на рис. 3.33, MTS-объект может рассматриваться как любой другой СОМ-объект. Но в дополнении к СОМ-интерфейсам MTS-объект поддерживает собственные MTS-интерфейсы.
Рис. 3.33. Простой MTS-объект
На рис. 3.33, кроме СОМ-интерфейсов, отдельно показан интерфейс IObjectControl. Для всех СОМ-объектов общим интерфейсом является IUnknown, а для всех MTS-объектов - интерфейс Iobjectcontrol. Данный интерфейс содержит методы для активации и завершения работы MTS-объектов, а также для управления ресурсами.
Клиент сервера, находящийся внутри MTS-среды, называется базовым клиентом. С точки зрения базового клиента, СОМ-объект внутри MTS-среды выглядит так же, как любой другой СОМ-объект. MTS-объекты размещаются в DLL, которые подключаются к исполняемому (ЕХЕ) файлу MTS.
По своей работе MTS-объекты очень похожи на обычные СОМ-объекты, которые мы рассматривали в предыдущих главах.
Создание MTS-объекта с помощью мастера
Для создания простого MTS-объекта вам необходимо выполнить следующие шаги:
1. Использовать мастер MTS-объекта для создания MTS-компонента.
2. Добавить свойства и методы при помощи редактора библиотеки типов.
3. Протестировать и отладить ваш MTS-компонент.
4. Установить MTS-компонент в существующий или новый пакет.
5. Управлять средой MTS при помощи MTS-проводника (MTS Explorer).
Требования, предъявляемые к MTS-компонентам
Кроме требований, которые предъявляются ко всем СОМ-объектам, MTS-компоненты должны удовлетворять следующим требованиям:
- MTS-компонент, при создании с помощью мастера, должен иметь стандартную фабрику класса, которая автоматически поддерживается Delphi;
- MTS-компонент должен экспортировать стандартный метод
DllGetClassObject;
- все интерфейсы и со-классы компонента должны быть описаны в библиотеке типов, которая также создается мастером MTS-объекта;
- MTS-компоненты должны экспортировать интерфейсы, использующие стандартный СОМ-маршалинг;
- компоненты должны экспортировать функцию DllRegisterServer и обеспечивать самостоятельную регистрацию CLSID, ProgID, интерфейсов и библиотеки типов;
- компонент, запущенный в процессе MTS, не может взаимодействовать с компонентами, не запущенными в MTS.
Установка MTS-объекта в MTS-пакет
Для установки MTS-объекта в MTS-пакет вам нужно выполнить следующие шаги:
1. Выбрать пункт главного меню Run/Install MTS Object (Запуск/Установить MTS-объект).
2. Убедиться в том, что MTS-объект был установлен.