soft :: субд

СУБД Cache. Технология CSP


СУБД Cache. Технология CSP

Базы данных стали привычной атрибутикой современных динамических web-страниц. Технология CSP (Cache Server Pages) в СУБД Cache обеспечивает взаимодействие этой базы данных и web-сервера, позволяя создавать динамические страницы, в реальном времени получая данные из таблиц. Посредством CSP можно создавать довольно изящного вида скрипты для web-приложений, которые обладают хорошей масштабируемостью, быстродействием. Эта технология также значительно упрощает дальнейшее сопровождение и развитие таких приложений.

CSP представляет собой весьма гибкую технологию, позволяющую отображать в браузере данные, изменяющиеся в реальном времени. Будучи разработанной специально для использования в режиме реального времени, технология CSP позволяет одновременно поддерживать тысячи активных сеансов. Существует возможность настройки представления хранимых данных на основе пользовательских предпочтений. Технология CSP поддерживает HTML, XML, графические и двоичные файлы.

Таким образом, разработчику представляется своеобразное расширение языка гипертекстовой разметки HTML специальными тегами, которые обрабатываются сервером и заменяются динамическим содержимым из базы данных Cache при вызове данной страницы. Более того, приложения CSP позволяют сделать прозрачным взаимодействие двух основных групп разработчиков — web-дизайнеров, которые могут полностью сконцентрироваться на внешнем виде страниц и пользовательском интерфейсе, и программистов, позволяя последним сосредоточиться на бизнесе — логике и интеграции содержимого базы данных в разрабатываемое приложение. Технология CSP обеспечивает обе группы необходимыми инструментами и позволяет им взаимодействовать без проблем.
Перейдем к рассмотрению практического применения CSP. Как уже говорилось, Cache Server Pages позволяют создавать динамические web-страницы. Для совместной работы Cache и web-сервера необходимо установить на сервер средства доступа к Cache. В настоящее время доступны интерфейсы для серверов MicroSoft, Netscape и Apache Group. Схема работы CSP такая же, как и у других СУБД. При поступлении запроса от web-сервера CSP интерфейс определяет, перенаправить ли этот запрос непосредственно базе данных по расширению .csp. Сервер базы данных при получении из браузера информации обрабатывает ее и генерирует уже готовый HTML-код с внедренной туда информацией. После этого web-сервер передает код в браузер для отображения.

Интерфейс, обеспечивающий перенаправление запроса от web-сервера базе данных, является библиотекой с именем CSPms.dll и находится в каталоге csp\bin папки инсталляции СУБД Cache. В случае установки СУБД на UNIX-систему файл называется nphCSPcgi. При вызове через URL эта программа использует переданные ей параметры для определения сервера Cache, который будет обрабатывать этот запрос. Код Cache Object Script, необходимый для выполнения правил логики приложений, может размещаться не только в файлах на сервере, но и непосредственно внутри CSP-страниц. При распознавании CSP-запроса web-сервер направляет его, используя вышеуказанную библиотеку как интерфейс. Эта библиотека содержит высокоэффективный быстро выполняющийся код, посредством которого обеспечивается вызов необходимого прикладного кода из базы данных.
Базы данных и web-сервер могут находиться как на одной машине, так и на различных машинах в сети. Сетевое соединение между ними образуется с использованием протокола TCP/IP. В примерах, приводимых в этой статье, предполагается, однако, что сервер БД и web-сервер расположены на одном ПК. К сожалению, два компьютера мне пока не по карману.

Обработка CSP-страниц немного отличается от общеизвестных принципов обработки транслируемого кода будь то PHP или Perl. При запросе некоторой страницы по адресу http://hostname/<path> / <filename> .csp[?... Список параметров] файл с таким именем не обязан располагаться в одном из каталогов на сервере. В сущности, каждая страница — это отдельный класс в базе данных Cache. Такие классы можно создать любым известным способом (например, используя Cache ObjectArchitect). Если же существует необходимость динамического изменения классов, можно просто сохранять HTML-код в файле в нужном каталоге на сервере. Во втором случае СУБД производит компиляцию и порождает класс динамически, предварительно удостоверившись, что данная страница не представлена уже связанным с ней одноименным классом. В таком способе обработки данных есть свое преимущество — вызов скомпилированного класса и его работа происходят значительно быстрее.
Я не буду заострять внимание на дизайне страниц. Дизайн — личное дело каждого, так сказать. Остановлюсь лучше на интеграции логики приложения в эти страницы для обеспечения изменения их содержания. И дизайнеры, и программисты в равной степени отвечают за обработку HTML-страниц. Программисты добавляют в уже готовые страницы специальные теги. После того, как страница готова, она компилируется при первом к ней обращении и сохраняется в базе данных Cache в виде описания класса. Есть еще один способ, о котором упоминалось выше. Можно создать класс с помощью Cache ObjectArchitect, тогда код, создаваемый дизайнером, помещается в метод OnPage этого класса.
То есть, разработка страниц на CSP представляет собой создание набора статических HTML-заготовок, оживляемых во время выполнения реальной информацией из базы данных. Это позволяет, в частности, освободить программистов от необходимости исправлять ошибки непосредственно в БД. Достаточно внести изменения в страницы, и соответствующие классы будут автоматически обновлены при запуске компилятора классов после внесения изменений в CSP-страницы.

Буду рассматривать случай, когда сервер установлен на платформе Windows, точнее — я использовал PWS из Windows 98 SE и Small Http Server. Последний, кстати, замечательно справился со своей задачей, за что его автору большое человеческо-программерское спасибо и тонна уважения впридачу.

Последовательность действий при создании нового приложения такова. Сначала создаем каталог приложения на web-сервере. Затем само приложение создается в менеджере конфигураций Cache. И последнее — необходимо сконфигурировать CSP Web Gateway. Рассмотрим отдельно каждый шаг. Если установка СУБД производится на машину с уже установленным web-сервером, то такой каталог с именем /csp создается автоматически. Если же web-сервер устанавливается после установки СУБД, такой каталог необходимо создать вручную. Так, в MS Personal Web Server это можно сделать в Personal Web Manager. В Small Http Server на главной закладке просто надо добавить еще один параметр для того, чтобы сервер корректно распознавал страницы с расширением CSP, и прописать путь к библиотеке интерфейса, то есть к файлу CSPms.dll. Если же вы установили Apache, то необходимо создать соответствующие разделы в файле httpd.conf.

Теперь обратимся к описанию приложения в Менеджере конфигураций Cache. В данном случае что-либо объяснять не представляется целесообразным. Для тех, кто хоть чуть-чуть занимается программированием и знает азы английского языка, не должно возникнуть никаких проблем при настройке, так как названия всех параметров на закладке CSP интуитивно понятны. Например, параметр Cache Physical Path определят физический путь к файлам CSP. Параметр Custom Error Page определяет страницу с сообщением об ошибке, а Recursive отвечает за включение подкаталогов в список папок, содержащих CSP-страницы. Начиная с версии 4, СУБД Cache сама отвечает за способ обработки запросов клиентов. Это выражается в том, что база данных может обслуживать клиентов в режиме stateless и state aware. Они отличаются тем, что в первом случае сервер обслуживает всех клиентов через одно соединение. Во втором — для каждого пользователя существует свой выделенный серверный процесс. Это повышает быстродействие системы в целом и также способствует повышению безопасности.
Замолвим слово и о программировании. CSP-страницы могут быть созданы как в простом блокноте, если вам нравится все набивать ручками, так и в специализированных редакторах, таких как MS FrontPage или Macromedia Dreamweaver. Так как Cache Server Pages представляет собой расширение стандартного HTML аналогично XML, то в Dreamweaver даже появляются дополнительные пункты меню, облегчающие работу с CSP. К сожалению, о подобной интеграции в Macromedia HomeSite, который я предпочитаю использовать, ничего не известно. Никаких дополнительных пунктов меню или специальных компонентов на палитре я после установки Cache не нашел.

В процессе создания CSP-страниц программист использует специально определенные теги. Некоторые из них приведены ниже.
#(...)# — рассматриваются как код, необходимый для вычисления.
<script language=Cache runat=server> — выполняемый код на языке Cache ObjectScript для генерации содержимого в момент выполнения приложения.
#server()# — директива обращения к подпрограммам, хранимым на сервере.
Рассмотрим теперь несколько вариантов использования CSP — как статического, так и динамического. Под статическим использованием тут следует понимать использование кода, не обращающегося к информации, хранимой внутри базы данных. Например, средства CSP позволяют сделать простую подстановку функции или переменной в код страницы. Если у вас в переменной BirthDate хранится дата рождения, то выражение #(BirthDate)# заставит Cache во время выполнения подставить истинное значение этой переменной. В случае, если переменная не имеет значения, ничего подставлено не будет. Причем с самим этим выражением можно производить любые манипуляции, доступные языку HTML — можно выделить заголовок или сделать надпись курсивом. Следует только заметить, что в таких случаях все выражение вместе с фигурными скобками и решетками должно быть взято в рамки тега. Таким же образом можно использовать глобальные переменные окружения из Cache. Элементарный пример показывает, как можно использовать Cache для подсчета количества загрузок той или иной страницы.

<script language="Cache" runat="server">
Set ^VisitNum=$Get($VisitNum)+1
</script>

Эта страница была загружена #(^VisitNum)# раз.
В приведенном примере значение глобальной переменной, хранимой в базе данных, увеличивается на единицу и передается для отображения браузеру. Аналогично двум примерам в конструкции #(...)# может быть отображено любое вычисляемое значение. Но Cache позволяет использовать не только скалярные переменные, можно получить доступ и к свойствам хранимых объектов СУБД. Следующая конструкция описывает применение класса Book, в котором хранятся все данные о книгах электронного магазина.

<CSP: OBJECT Name="BookOfTheWeek" Class= "Book" ObjectId="1">
Наша книга недели:
#(BookOfTheWeek.Cover)#
<a href=#url(BookInfo.csp?ISBN=#(BookOfTheWeek. ISBN)#)#>
#(BookOfTheWeek.Title)# #(BookOfTheWeek.Author)# </a>

Строка #(BookOfTheWeek.Cover)# подобна ссылке на переменную. Но на самом деле это ссылка на свойство Cover объекта BookOfTheWeek. Свойство Cover может быть отображено на странице аналогично другим переменным. Если рассматривать этот пример более подробно, можно заметить, что Cache позволяет использовать вложенные ссылки. Это видно на примере тега #url(...)#, в который вложена конструкция #(BookOfTheWeek.Cover)#. Стоит также обратить внимание на тег CSP: OBJECT, который задает использование объекта Cache. Этот тег вызывает загрузку объекта из базы данных и назначает ему имя для использования внутри web-страницы.
Кроме вышеописанных, существует еще масса возможностей — таких как заранее определенные запросы к БД, циклы для построения таблиц и условные конструкции.

Существует также способ, притом довольно изящный, получения данных из Cache и записи модифицированных данных обратно в базу. Это обеспечивается тегом CSP: BIND. Он позволяет связывать HTML-формы непосредственно с объектами Cache. Поскольку при этом не требуется описывать никаких действий или программировать дополнительные методы, это простейший путь связать данные, хранящиеся в виде объектов в базе данных, с web-приложением. Причем атрибут CSP: BIND может использоваться как в заголовке формы для ее привязки к конкретному объекту данных, так и в конкретных полях ввода.
Но представление имеющихся данных — это только один из аспектов динамических web-страниц. Другой аспект — это взаимодействие между пользователем и сервером. Например, пользовательский ввод может сильно влиять на данные, отображаемые в браузере. Подобное взаимодействие осуществляется с использованием CSP и форм, обслуживания запросов и сеансов работы.

При использовании форм текст, введенный пользователем в форме, может быть передан web-серверу с использованием HTTP-протокола либо методом Get в виде части URL, либо методом Post в теле запроса HTTP. В соответствии со стандартом HTML каждая форма состоит из пар типа имя-значение. Это верно в любом случае, даже если используются скрытые поля или поля с множественным выбором. Вместе с некоторой общей служебной информацией, относящейся к запросу, входные данные передаются в базу данных классу %CSP.Page, соответствующему вызываемой CSP-странице. Это выполняется с помощью объекта %CSP.Request. При каждом вызове метода Page системная переменная %request содержит ссылку на текущий объект %CSP.Request.
Рассмотрим, как функционирует ввод и обработка данных с помощью форм HTML. В случае метода POST это означает, что, когда содержимое формы передается, объект %request принимает четыре поля ввода формы, как показано на следующем примере:

<form method="post" name="customer"
action="/customer/info/customerupdate.csp?custo-merid=75934505">
Имя: <input type="text" name="name">
Улица: <input type="text" name="adress">
Город: <input type="text" name="city">
</form>

При работе с формами необходимо помнить один важный момент. Существуют специфичные для СУБД Cache элементы, имена которых начинаются с символов CSP. Чтобы избежать конфликтов, не следует использовать в именах переменных эти начальные символы.
После получения данных в запросе объекта %request с ними можно производить простейшие операции. Можно узнать количество возвращенных записей через свойство Count типа %Library.Integer. Извлечь данные, посланные в запросе методом Get. Перемещаться последовательно по всем полям ввода формы, вызывая метод Next. Кроме того, так же просто можно изменять эти данные, даже если они представляют собой наборы значений, полученные из поля ввода с множественным выбором.
К сожалению, ограниченность объема статьи и газетных полос дает возможность рассказать только о некоторых из множества возможностей Cache и CSP, да и то практически вскользь. Многие темы, к сожалению, так и не были затронуты. Например, не были рассмотрены тег CSP:SQLQUERY, свойства и назначение очень полезного объекта %SESSION, параметр script language=sql для формирования динамических запросов к базе данных и включения их результатов в CSP-страницы. Конструкция CSP:RULE позволяет создавать подобия пользовательских XML-тегов, предназначенные для использования программистами и web-дизайнерами.
Также были обделены вниманием такие вопросы как множественное наследование, ведь CSP-страницы — это тоже классы. Пропущена такая интересная и довольно нетривиальная тема как создание обработчиков сложных событий с помощью CSP. Тем, кто все-таки заинтересовался СУБД Cache и хочет самостоятельно рассмотреть эти темы, следует обратиться к документации по Cache или найти интересующую информацию в Internet.

Денис Мигачев Denver. The Marion. dtm@tut.by



© компьютерная газета