DCOM
О технологии DCOM. Я написал 3-звенное распределенное RDBMS-приложение, используя новые модули удаленных данных (Remote Data Modules) из поставки Delphi3. Я добавил некоторые собственные интерфейсы и методы в мой удаленный модуль данных для поддержки пользовательских SQL-запросов от клиента. (Была такая необходимость.) Все заработало просто замечательно, но самая отрадная весть - вся клиентская часть приложения представляла собой всего-лишь 2 файла! Без BDE! Без RDBMS-клиента! Без конфигурации! Классно, правда? Всего два файла - my.exe и 'dbclient.dll'.
Мой проект всего-лишь демонстрирует данную технологию и на момент написания совета он все же медленнее, чем 2-звенный метод, но я потратил на кодирование всего лишь 2 дня, а оптимизация кода потребует еще некоторе время. Я также подозреваю, что медленная работа моего ORB связана с функционированием его на той же сильно загруженной машине, на какой я и разрабатываю свои программы.
Кто-нибудь еще разрабатывал DCOM-объекты? Я хотел бы здесь начать цикл статей (советов) о применении Delphi для создания распределенных приложений. В течение ближайших месяцев я должен разработать несколько распределенных приложений уровня предприятия. Для пользы дела я берусь опубликовать все ваши наработки, подсказки, хитрости и ньюансы технологии, присланные по электронной почте.
Приведу пример:
Экспорт DB-компонентов из модулей удаленных данных
После того, как Вы создали приложение с использованием пункта меню New->Remote Data Module при создании модуля данных сервера приложений, Вам необходимо экспортировать все необходимые для него TDataSet и TProviders-компоненты. Для этого щелкните на них правой кнопкой мыши и выберите пункт экспорта их Вашего модуля данных.
Добавление Ваших собственных методов в модули удаленных данных
Есть два пути решения задачи. При нажатии правой кнопки мыши в окне исходного кода, возникающего при просмотре исходников модулей удаленных данных, вызывается контекстное меню, содержащее пункт "Add to Interface". Это мини-Мастер, позволяющий создать процедуру, функцию или декларацию какого-либо свойства. Он последовательно предложит заполнить необходимые поля на нескольких экранах (каждый экран содержит поясняющую информацию). Не забывайте о том, что Вы просто не сможете ввести какие-либо данные для Ваших параметров. OLE/COM/DCOM/ActiveX/Whatever в Delphi поддерживают только некоторое подмножество типов данных. (например, тип WideString вместо типа String) Полный список поддерживаемых типов доступен в разделе 'types:type libraries' электронной справки.
После прохождения всех этапов Мастера, Delphi переместит курсор в правую часть страницы для генерации кода нового метода.
Второй способ заключается в использовании редактора библиотеки типов (меню View->Type Library). Это лучшее решение в случае, если Вам необходимо добавить большое количество новых методов. Сначала Вы можете разместить их здесь и включить в свой код позже. При записи кода на диск, в отличие от создаваемых в Delphi заголовков обработчиков событий, редактор библиотеки типов не удалит их даже в случае, если тело метода остается пустым.
Доступ к методам из модуля удаленных данных (или другого COM-объекта)
Единственное мною обнаруженное решение состоит в использовании компонента TRemoteServer (закладка Data Access). Установите в свойствах компонента имя компьютера и имя сервера. После этого можно обратиться к любому существующему методу, например:
MyDataModule.MyRemoteServer.AppServer.MyCustomMethod( myParam,myParam2 ); |
Проблема с добавлением Ваших собственных методов с интерфейсами в библиотеку типов.
При добавлении методов в модуль удаленных данных через новые интерфейсы, я столкнулся со странной проблемой. После создания новых интерфейсов, кодирования, сохранения, закрытия и повторного открытия проекта, Delphi иногда добавляет ключевое слово 'const' к спискам параметров новых интерфейсов. При этом Delphi -не делает- обновления списка параметров в коде модуля удаленных данных, поэтому при компиляции вновь открытого проекта компилятор ругается на противоречивые декларации метода. Затем мне приходится вручную добавлять ключевое слово 'const' к декларациям данных и определений методов модуля. После все работает как часы. Так что не забывайте про ключевое слово 'const'. По крайней мере это выработало во мне определенный рефлекс, и я "на автопилоте" добавляю его во все списки параметров моего метода.
Это может служить проблемой для методов, модифицирующих какие-либо параметры. Может DCOM это не поддерживает? Какие идеи?
[000073]