Главная » Delphi » Оперативная активизация – ЧАСТЬ 1

0

Оперативная (JIT —  Just In Time)  активизация относится к встроенным функциям

COM+,  позволяющим  удалять  и  восстанавливать  объекты  без  ведома   клиентскогоприложения. При  этом сервер потенциально окажется способен взаимодействовать с большим количеством клиентов, так как сможет  освобождать системные ресурсы, временно не используемые одним  клиентом, и предавать их другим,  которые нужда ются в них в данный момент. Тем не менее, если первому  пользователю понадобятся его объекты, то система сможет  их восстановить.

1

 

Разработчик способен полностью контролировать процесс дезактивации объекта. Кроме  того,  объект может  быть  дезактивирован только  в том случае,  если  в данный момент  нет  информации о  его  состоянии . Дезактивация объектов осуществляется при  помощи методов SetComplete() и SetAbort() интерфейса IObjectContext или метода SetDeactivateOnReturn() интерфейса IContextState.

Компоненты для работы с очередью

Обычно все  разработчики Delphi хорошо осведомлены о преимуществах  прило жений, в которых используется сокращенная  модель (briefcase model). С тех пор  как в Delphi  3 была реализована технология MIDAS, появилась возможность создавать при ложения, которые способны функционировать даже при отключении клиента от сер вера.  Разработчики Delphi быстро осознали все преимущества сокращенной модели, позволяющей пользователям приложений работать с данными даже  при  отсутствии соединения с сервером, и начали  повсеместно использовать MIDAS и другие  подоб ные  технологии. Например, если необходимо создать  приложение, позволяющее ме неджеру  вносить данные  о заказчиках в базу на портативном компьютере, а по воз вращении в офис  синхронизировать их с базой  на сервере, то вместо  того,  чтобы  пи сать длинный и сложный код, достаточно просто разместить в форме набор необходимых компонентов и написать несколько строк  кода.

Когда  дело  касается данных, то все действительно работает очень  хорошо. Но  как быть  с объектами? Для  создания приложений, предназначенных для удаленного  под ключения  к  объектам,  используются  такие   технологии,  как  DCOM,   MTS/COM+  и CORBA. Они  часто  применяются при разработке программных средств  для различных компаний и их клиентов. Еще чаще технологии удаленного подключения к объектам ис пользуются при  разработке сложных распределенных приложений. В результате при ложения с распределенными компонентами (например приложения для работы с база ми данных) также должны уметь функционировать при отключении от сервера.

Компоненты для работы с очередью: сокращенная объектная модель

В основе компонентов для работы с очередями  (queued components) лежит  техноло гия очереди сообщений Microsoft (MSMQ — Microsoft Message Queue), которая предостав ляет  клиентам COM+ возможность асинхронного вызова  методов компонентов сер вера  COM+. По существу это означает, что  клиенты могут создавать экземпляры сер верных объектов и вызывать их методы  независимо от того,  доступен  сервер или нет. Средства COM+  осуществляют управление этим  процессом, размещая вызовы мето дов в очереди, а непосредственное выполнение этих  методов происходит в дальней шем  при  восстановлении подключения к серверу.  Более  того,  серверным объектам фактически безразлично, вызываются ли их методы непосредственно или через оче 1 Т.е. объект не используется. — Прим. ред.редь COM+. Далее рассмотрим некоторые ключевые моменты использования компо

нентов, предназначенных для работы с очередью COM+.

На  рис. 18.4  схематически представлена внутренняя реализация компонентов для работы с очередью. При  обращении клиента к методу такого  компонента его вызов  пе рехватывается регистратором (recorder),  который упаковывает его вместе  со всеми  па раметрами и помещает в очередь. Поскольку клиент успешно передал вызов,  ему кажет ся, что он подключен к серверу, но фактически это не так. Таким  образом сервер реги стратора представляет собой  своего  рода прокси для настоящего сервера. Регистратор знает, как вести  себя, поскольку  он получает  информацию о сервере из

его библиотеки типов, конфигурационной или регистрационной записи. Приемник (listener) считывает и удаляет из очереди сообщение, которое содержит информацию о вызове, а затем  пе редает его  на  проигрыватель (player). И,  в заключение, проигрыватель распаковывает информацию обращения (вместе с сопутствующей информацией, например о контексте безопасности клиента) и выполняет метод, обращаясь к серверу.

На данном этапе  может возникнуть вполне закономерный вопрос: звучит неплохо, но не слишком  ли это все сложно?  В действительности в представленной архитектуре нет ничего сложного.

Преимущества компонентов для работы с очередью

Перед тем как углубиться в детали реализации, рассмотрим некоторые преимуще

ства компонентов для работы с очередью.

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

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

•  Сокращенная модель. Как уже упоминалось ранее, очереди COM+ используются в случае  удаленного обращения  к объектам при  отсутствии фактического  под ключения к серверу, наподобие того как средства MIDAS используются при уда ленном обращении к базам данных.  При  таком подходе  клиенты могут работать при  отсутствии подключения к сети,  а вызовы методов передаются на сервер сразу же после восстановления подключения.

•  Безаварийность. При  разработке приложений, для которых требуется высокая степень надежности (например виртуальный магазин), очень  важно  учитывать возможность потери связи с серверными объектами. Компоненты для работы с очередями дают идеальную  защиту  от подобных проблем, так как в случае  от ключения клиента от сервера вызовы методов будут занесены в очередь, а затем после восстановления подключения будут обработаны.

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

Создание сервера

Между  разработкой  компонента,  предназначенного  для  работы  с  очередью, и обычного компонента COM/COM+ есть некоторые различия. Они,  в основном, свя заны с тем, что все методы  интерфейсов для работы с очередью должны  иметь  только входные параметры и не должны  возвращать никаких значений. Это объясняется тем, что  клиенты не могут ожидать от сервера немедленного возврата каких либо  резуль татов  или значений параметров сразу же после вызова  методов. Кроме  того,  при уста новке  компонентов, предназначенных для работы с очередями, необходимо выпол нить некоторые дополнительные действия.

В качестве примера создадим  сервер, содержащий один  класс COM+ с одним  ин терфейсом и одним  методом. Для облегчения задачи  воспользуемся мастером Automation Object  Wizard,  вызвать который можно  в меню  File пункт  New. Новый объект будет называться QTest, а первичному интерфейсу мастер  автоматически присвоит имя IQTest. В интерфейс IQTest добавим  один  метод,  который в редакто ре библиотеки типов необходимо определить следующим образом:procedure SendText(Value: WideString;

Time: TDateTime) [dispid $00000001]; safecall;

Данный метод  принимает два параметра, первый из  которых —  это  строка сооб щения, а второй — время  вызова  метода.  В рассматриваемой реализации такого  мето да сообщение просто выводится на экран, а кроме  того,  производится запись  о вре мени обработки метода  сервером в файл  журнала c:\queue.txt. Содержимое файла реализации этого объекта автоматизации представлено в листинге 18.1.

Листинг 18.1. TestImpl.pas — реализация объекта, взаимодействующего с очередью

unit TestImpl;

interface uses

Windows, ComObj, ActiveX, Srv_TLB, StdVcl;

type

TQTest = class(TAutoObject, IQTest)

protected

procedure SendText(const Value: WideString;

Time: TDateTime); safecall;

end;

implementation

uses ComServ, SysUtils;

procedure TQTest.SendText(const Value: WideString; Time: TDateTime);

const

SFileName = ‘c:\queue.txt';

SEntryFormat = ‘Send time:      %s’#13#10 +

‘Write time: %s’#13#10 +

‘Message:                       %s’#13#10#13#10;

var

F: THandle;

WriteStr: string;

begin

F := CreateFile(SFileName, GENERIC_WRITE, FILE_SHARE_READ, nil,

OPEN_ALWAYS, FILE_ATTRIBUTE_NORMAL, 0);

if F = INVALID_HANDLE_VALUE then RaiseLastWin32Error;

try

FileSeek(F, 0, 2);        // переход к концу файла

WriteStr := Format(SEntryFormat, [DateTimeToStr(Time),

DateTimeToStr(Now), Value]);

FileWrite(F, WriteStr[1], Length(WriteStr));

finally

CloseHandle(F);

end;end;

initialization

TAutoObjectFactory.Create(ComServer, TQTest, Class_QTest,

ciMultiInstance, tmApartment);

end.

После  создания сервера необходимо установить его  в новом  приложении COM+ при  помощи либо  средства администрирования Component  Services,  либо  функций API библиотеки администрирования COM+.  Если  используется Component Services, то на первом этапе  необходимо создать  новое  пустое приложение. Для этого  следует выбрать соответствующий элемент в локальном меню узла COM+ Applications в древо видной структуре  и выполнить предлагаемые действия. После  создания приложения корректируются его свойства и оно  обозначается как приложение для работы с оче редями (рис. 18.5). Кроме  того,  необходимо активизировать режим  просмотра очере ди, чтобы  все сообщения обрабатывались сразу же после их поступления. Диалоговое окно настройки представлено на рис. 18.5.

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

По теме:

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