Встроенные приложения Firebird
Встроенные приложения Firebird
Firebird предоставляет две различные встраиваемые модели: приложения встроенного SQL (Embedded SQL) и встраиваемые серверы.
Приложения встроенного SQL
В этой модели программа приложения включает в себя интерфейс клиент-сервер и уровень приложения конечного пользователя- все в одном исполняемом модуле. Операторы SQL находятся непосредственно в исходном коде программы, написанной на С, C++ или другом языке программирования. Затем исходный код приложения обрабатывается препроцессором gpre, который отыскивает блоки кода, содержащие операторы SQL. Он подставляет макровызовы функций, которые функционально эквивалентны функциям динамической библиотеки API. Когда работа препроцессора завершается, все выполненные преобразования операторов SQL компилируются вместе с приложением. Такие операторы перед компилированием называются статическим SQL.
В таком стиле приложений доступно специальное расширенное подмножество исходных команд, похожих на SQL. Встроенный SQL (Embedded SQL, ESQL) предоставляет программисту простой язык высокого уровня в виде "черного ящика", в то время как gpre выполняет всю работу по преобразованию сложных языковых структур в эквивалентные вызовы API. Эти статические операторы дают незначительное увеличение скорости по сравнению с динамическим SQL, поскольку не требуют дополнительных затрат на синтаксический разбор и интерпретацию операторов SQL во время выполнения.
Язык и техники ESQL подробно не обсуждаются в данной книге. Документ "InterBase Embedded SQL Guide" ("Руководство по встроенному SQL InterBase", EmbedSQL.pdf), доступный в Borland, содержит описания, необходимые для разработки встроенных приложений Firebird.
Приложения встраиваемого сервера
В модели встраиваемого сервера не существует преобразований операторов SQL. Клиент и сервер объединяются в одну компактную динамическую библиотеку для получения независимого приложения. Приложение загружает библиотеку во время запуска точно так же, как обычное приложение Firebird будет загружать клиентскую библиотеку, функции API вызываются во время выполнения. При этом нет необходимости инсталлировать внешний сервер, потому что такой клиент внутренне связывается со своим собственным экземпляром серверного процесса Firebird. Когда приложение завершается, оно выгружает встраиваемый сервер, так что не сохраняется никакого серверного процесса.
Хотя здесь не используется и не эмулируется сетевое соединение, объединенное приложение клиент-сервер получает доступ к базе данных тем же способом, что и другие динамические приложения клиентов Firebird. Существующий код приложений, написанный для использования в обычной сети клиент-сервер, работает без каких-либо изменений со встраиваемым сервером.
Встраиваемый сервер под Windows
Библиотека встраиваемого сервера fbembed.dll, включенная в инсталлятор Firebird 1.5 для Windows, имеет архитектуру, аналогичную Firebird SuperServer. Если вы планируете инсталлировать и использовать fbembed.dll, обратите внимание на специальные инструкции по размещению библиотек и исполняемых программ Firebird. Измененные файлы README и другие заметки обычно размещаются в каталоге /doc серверной инсталляции.
Вы можете инсталлировать встраиваемый сервер и выполнять приложения встраиваемого сервера на машине Windows, на которой также находится Суперсервер или Классический сервер Firebird, хотя удаленные клиенты не могут соединяться с базой данных, с которой работает приложение встраиваемого сервера. В релизе 1.5, где не лучший протокол IPSERVER все еще используется для связи клиента и сервера, возможно использование библиотеки встраиваемого сервера в качестве клиента других серверов. В более поздних версиях, где протокол IPSERRVER заменен на XNET, это невозможно.
Firebird 1.0.x не содержит варианта встраиваемого сервера для Windows.
Встраиваемый сервер под Linux/UNIX
Встраиваемый сервер является "родным" режимом доступа локального клиента к Классическому серверу Firebird в Linux/UNIX, включая и версию Firebird 1.0.x. Библиотека встраиваемого сервера для локального доступа- libfbembed.so для Firebird 1.5 и выше и libgds.so для Firebird 1.0.x.
Как и версия IPSERVER для Windows, встроенный клиент в Linux/UNIX может так же работать, как удаленный клиент с другим Классическим сервером Firebird. При этом клиент не будет потокобезопасным (thread-safe). Для многопоточных приложений необходимо использовать обычный клиент libfbclient.so. В Firebird 1.0.x удаленный клиент поставляется в комплекте Суперсервер для Linux и двусмысленно назван libgds.so, как и встроенный клиент Классического сервера.
! ! !
ВНИМАНИЕ! Клиент Суперсервера для Linux является клиентом, поддерживающим потоки для многопоточных приложений, однако он не поддерживает выполнения нескольких потоков в одном и том же соединении с базой данных. Отдельные экземпляры соединения должны быть созданы для каждого потока.
. ! .