Эта статья предназначена для разработчиков приложений к базам данных. В ней рассказывается о том, как и в каких случаях стоит использовать Web-интерфейсы к базе данных на примере и опыте создания нескольких конкретных интерфейсов.
В последнее время появилось много публикаций на тему Internet и Web, поэтому мы не будем рассказывать о том, когда все это началось и зачем используется. Во всяком случае, в нашу жизнь эта новая технология уже вошла как "сработанный еще рабами Рима водопровод". Мы также не будем подробно останавливаться на технике и инструментах, используемых для создания Web-интерфейсов.
Собственно техника и идеология построения таких интерфейсов достаточно просты, наиболее сложным вопросом является определение того, какие задачи следует решать с помощью этой, новой для разработчиков, технологии, а какие следует оставить традиционной локальной технологии клиент-сервер.
В этой статье рассматриваются 4 Web-интерфейса к базе данных Oracle, разработанных за последний год компанией РДТеХ:
- электронный книжный магазин;
- резервирование учебных курсов;
- таможенные тарифы;
- книга "100 лет открытий в физике частиц".
Мы расскажем о назначении и месте этих интерфейсов в прикладных системах, перечислим используемые технологии и инструменты, а также попытаемся сделать их сравнительный анализ с традиционными инструментальными средствами Oracle.
Электронный книжный магазин
Для учета документации по Oracle на русском языке, издаваемой нашей компанией с 1994-го года, было разработано соответствующее приложение. Поскольку все направления деятельности РДТеХ связаны только с Oracle, естественно, это приложение использует и СУБД, и инструментальные средства (в данном случае Developer/2000) корпорации Oracle.
Приложение решает все задачи, связанные с изданием и продажей книг. В этом году после появления Oracle Web Server к нему был написан интерфейс, позволяющий заказывать книги через Internet.
В традиционной схеме обработки заказов клиент звонит по телефону или присылает запрос каким-либо иным способом, после чего ему высылают список документации, принимают обратно заказ и, наконец, посылают счет. Все эти операции выполняются через соответствующие формы, клиент (если он отсутствует) заносится в базу данных, выполняются необходимые проверки, резервируются заказанные книги, выписывается счет и т.д.
В новой схеме клиент заходит через установленный на его машине стандартный навигатор на страницу Web-сервера РДТеХ (http://www. rdtex.ru), где расположен электронный книжный магазин, и выполняет самостоятельно все предварительные операции, включая получение счета и занесение информации о себе в базу данных.
Для хранения информации, необходимой для работы электронного книжного магазина, используются следующие таблицы.
book_set
Это таблица, в которой хранятся сведения об имеющихся в наличии комплектах документации Oracle (т. е. информация о группах товаров).
CREATE TABLE book_set (id NUMBER PRIMARY KEY, set_name VARCHAR2(80), price NUMBER, num_in_list NUMBER);
book
Это таблица, в которой хранится информация об отдельных книгах, включая название, цену, краткую аннотацию и т. д.
CREATE TABLE book_set (id NUMBER PRIMARY KEY, set_name VARCHAR2(80), price NUMBER, num_in_list NUMBER);
client
Это таблица, в которую записывается информация о заказчике.
CREATE TABLE client (id NUMBER PRIMARY KEY, first_name VARCHAR2(25), second_name VARCHAR2(25), last_name VARCHAR2(30), company VARCHAR2(120), country VARCHAR2(30), zipcode NUMBER(6), city VARCHAR2(25), address VARCHAR2(250), phone VARCHAR2(20), fax VARCHAR2(20), email VARCHAR2(40));
web_order
Это таблица, в которую записываются данные о заказе.
CREATE TABLE web_order (id NUMBER PRIMARY KEY, client_id NUMBER CONSTRAINT fk_client REFERENCES client(id), order_date DATE DEFAULT SYSDATE);
item
Это таблица, содержащая информацию о составляющих заказа.
CREATE TABLE item (id NUMBER PRIMARY KEY, product_id NUMBER, order_id NUMBER CONSTRAINT fk_order REFERENCES web_order(id), quantity NUMBER, total NUMBER);
Работу электронного магазина обеспечивает пакет store, написанный на языке PL/SQL. Процедуры, входящие в этот пакет, извлекают информацию из базы данных и форматируют ее в виде страниц HTML. Интерпретировать команды HTML позволяют стандартные пакеты htf и htp.
В качестве примера рассмотрим процедуру book_list, которая формирует список книг, входящих в выбранный комплект. В этом списке названия отдельных книг оформлены в виде гипертекстовых ссылок, каждая из которых вызывает процедуру get_book с соответствующими значениями параметров. Рядом с названием каждой из книг в поле формы можно указать количество заказываемых книг.
PROCEDURE book_list(setid IN NUMBER,cookie IN VARCHAR2 DEFAULT "0") IS i INTEGER; vbook BOOK%ROWTYPE; vset BOOK_SET%ROWTYPE; CURSOR cs_book IS SELECT * FROM book WHERE book.setno=setid ORDER BY book.num_in_list; CURSOR cs_set IS SELECT * FROM book_set WHERE book_set.id=setid; BEGIN OPEN cs_set; FETCH cs_set INTO vset; CLOSE cs_set; htp.htmlOpen; htp.headOpen; htp.title(vset.set_name); htp.headClose; htp.bodyOpen("/images/ppaper.jpg"); htp.htitle("Документация СУБД ORACLE на русском языке:" ||htf.br||"комплект" ||htf.italic(vset.set_name), "2","center"); htp.print("Следуя ссылкам с названием книг, входящих в состав комплекта, можно получить краткие сведения о каждой из них. Пожалуйста, укажите количество требуемых книг в соответствующих полях и подтвердите выбор специальной кнопкой внизу страницы, выбранные книги будут занесены в Ваш счет."); htp.br; htp.br; htp.print(htf.italic("Стоимость комплекта приведена с учетом скидки, предоставляемой при покупке полного комплекта!")); htp.br; htp.hr; htp.FormOpen (owa_util.get_owa_service_path ||"store.submit_books"); htp.tableOpen; i := 1; htp.tableRowOpen; htp.tableData(""); htp.tableHeader(""); htp.tableHeader("Цена"); htp.tableHeader("Количество"); htp.tableRowClose; OPEN cs_book; htp.FormHidden("cookie", cookie); htp.FormHidden("setnum", setid); htp.tableRowOpen; htp.tableData(htf.bold(vset.set_name) || htf.italic("(комплект полностью)"), NULL, NULL, NULL, NULL, "2"); htp.tableData("$"||TO_CHAR (vset.price)); htp.tableData(htf.formText ("q0", 6, 50, ""), "center"); htp.tableRowClose; LOOP FETCH cs_book INTO vbook; EXIT WHEN cs_book%NOTFOUND; htp.tableRowOpen; htp.tableData(""); htp.tableData(""||TO_CHAR(i)||"." ||htf.anchor (owa_util.get_owa_service_path ||"store.get_book?bookno="|| TO_CHAR(vbook.id) ||chr(38) || "setname=" ||REPLACE(vset.set_name,"","+") ||chr(38)||"cookie="||cookie, vbook.title||"."||vbook.subtitle)); htp.tableData("$"||TO_CHAR (vbook.price)); htp.tableData(htf.formText("q" ||TO_CHAR(i),6,50,""), "center"); htp.tableRowClose; i := i+1; END LOOP; CLOSE cs_book; htp.tableClose; htp.br; htp.hr; htp.FormSubmit("submit", "Подтвердить выбор"); htp.FormReset("Очистить поля"); htp.FormClose; htp.bodyClose; htp.htmlClose; END book_list;
Резервирование учебных курсов
РДТеХ , являясь авторизованным учебным центром Oracle, проводит стандартные и свои собственные курсы по администрированию баз данных и разработке приложений, а также по использованию и созданию приложений Internet.
Для учета заказов и прохождения курсов также было разработано приложение, в котором использовался Ora-cle Power Objects. Основной причиной выбора этого инструмента вместо Developer/2000 было желание освоить новый в то время продукт.
К этому приложению также был написан Web-интерфейс, который позволяет ознакомиться с расписанием учебного центра, по запросу пользователя предоставляя описания интересующих его учебных курсов и рекомендации по порядку их прохождения, а также заказать места на обучение в удобное для заказчика время. При этом вся относящаяся к учебным курсам информация, включая их расписание, извлекается из базы данных. Сведения о заказе также заносятся в базу данных.
Выводы
- Эти интерфейсы полностью готовы к употреблению.
- Для того чтобы ими пользоваться нужно иметь только выход в Internet и какой-нибудь навигатор.
- Эти интерфейсы просты и глобально доступны.
- Модель программирования таких интерфейсов проста, она позволяет создавать глобальные приложения с минимумом инструментальных средств.
- Новые технологии не заменяют старые, это просто инструменты другого назначения и калибра.
Internet - это такой богатый пищей для ума океан, что каждый день работы с ним приносит новые интересные идеи и лозунги. Для вышеописанных интерфейсов ключевое слово - "самообслуживание". Обслуживание одного покупателя книг или студента обходится с учетом телефонных разговоров и факсов примерно в 12 у.е. Потому покупать в электронном магазине дешевле (и удобнее).
Другой вопрос - почему даже те, у которых с доступом в Internet все нормально, предпочитают покупать по старинке. Боятся? Не доверяют? О проблемах дальше.
Таможенные тарифы
По заказу ГТК России была выполнена работа по созданию Web-интерфейса к базе данных таможенной нормативно-справочной информации. В данном случае локальное приложение по ведению базы данных было написано не нами, мы лишь получили от заказчика исходную информацию (базовые таблицы) и написали все необходимые процедуры для представления этой информации на WWW. Система готова к реальной эксплуатации.
Электронный справочник по таможенным тарифам, удобный для использования при заполнении грузовой таможенной декларации, может служить примером построения справочной системы. Информация о товарах и соответствующих им тарифах хранится в базе данных Oracle. При обращении пользователя к приложению формируются динамические гипертекстовые страницы, содержащие информацию, извлеченную из базы данных. Таким образом, пользователь получает всегда самую свежую информацию. При этом возможности гипертекста позволяют быстро находить нужные данные, перемещаться по перекрестным ссылкам.
Выводы
Вы не можете даже представить, сколько пользователей эта система могла бы обслуживать и насколько она облегчила бы жизнь всем тем, кому приходится иметь дело с таможней. Сколько придется заплатить за растомаживание (это слово отсутствует в словаре Ожегова и спеллер его также не понимает, однако явление такое существует, и крови портит много), нужен ли сертификат качества на данный товар и где его можно получить, а также многие другие вопросы, ответ на которые можно получить очень просто. Также снимаются вопросы актуальности этой информации. Как только она изменяется в ГТК, это изменение автоматически становится доступно всем. По сравнению с традиционными АРМами таможенных брокеров и декларантов этот интерфейс предельно прост. Процедуры доступа к информации работают на сервере, а потому их не нужно тиражировать клиентам, не нужно заботиться об актуальности версий и о том, чтобы все пользователи работали в одинаковой среде. Если говорить об аппаратуре, то сетевой компьютер с навигатором - вот все, что нужно для работы с Web-приложением. Если помножить разницу в цене (и обслуживании!) между сетевым компьютером и обычным PC на вышеупомянутое невообразимое число потенциальных пользователей, получится, как говорил А. Райкин, "сумасшедшее количество денег".
Книга "100 лет открытий в физике частиц"
100 лет тому назад немецкий физик Рентген открыл Х-лучи, впоследствии названные в его честь рентгеновскими. Международная физическая общественность по этому поводу решила выпустить книгу - библиографию основных работ в физике элементарных частиц. Инициировали эту работу два крупных физических центра: Институт Физики Высоких Энергий (Россия) и Lawrence Berkeley National Laboratory (USA), которые подготовили начальный материал и редактировали статьи этой книги с помощью Web-интерфейса, созданного сотрудниками РДТеХ. В подготовке этой книги принимали участие более 20 физиков из разных стран. Они не просто просматривали информацию, но и дополняли ее своими замечаниями, которые заносились в базу данных и становились доступными для всех остальных участников коллаборации. На основании этих замечаний в статьи затем вносились изменения.
Выводы
Это приложение продемонстрировало еще одно замечательное применение технологии Internet - интерфейс для совместной работы. При этом ваш коллега может находиться где угодно - в соседней комнате или на другом континенте. Подобного рода распределенные проекты оказались весьма продуктивными. Работа над этим проектом началась в ноябре 1995 года с загрузки в базу данных Oracle текстов статей, а в марте 1996 книга уже вышла из типографии.
К слову сказать, наша компания эффективно использует Internet для совместной работы (почему-то только с зарубежными партнерами), например локализация инструментальных средств и приложений Oracle совместно с отделениями Oracle в Голландии и Ирландии.
Инструментальные средства Oracle, использующиеся в технологии Internet
Oracle WebServer представляет собой сервер HTTP с возможностью интеграции с базой данных. Oracle WebServer получает Uniform Resource Locator (URL) с помощью протокола HTTP от навигатора WWW и извлекает информацию, необходимую для ответа на запрос, из базы данных или файловой системы. Web Listener - обычный Web-сервер, который получает URL от клиента - навигатора WWW - и отвечает на запрос. При получении URL Web Listener определяет, требуется ли для выполнения запроса обращение к файловой системе, выполнение программы через интерфейс CGI или обращение к базе данных. В последнем случае Listener передает запрос диспетчеру многопотокового сервера приложений Web Request Broker (WRB) и возвращается к состоянию ожидания новых запросов HTTP. Диспетчер WRB распределяет запрос между процессами, называемыми WRB Executable Engines (WRBX). Каждый из WRBX с помощью встроенного API обращается к специальным приложениям, т. н. WRB-картриджам. WebServer 3.0 позволяет использовать следующие картриджи.
Картридж PL/SQL, позволяющий строить Web-страницы, основанные на информации, извлекаемой из базы данных. Динамические страницы создаются с помощью хранимых процедур PL/SQL, которые используют стандартный пакет функций и процедур, интерпретирующих команды языка HTML.
Картридж Java, представляющий собой интерпретатор языка Java, полностью интегрированный с базой данных Oracle.
Картридж ODBC позволяет иметь доступ к информации, хранящейся в базах данных различных типов через драйверы ODBC (Open DataBase Connectivity).
Картридж Perl дает возможность использования программ, написанных на языке Perl в архитектуре Web Request Broker.
WRB API позволяет разработчикам также создавать свои собственные картриджи, расширяющие возможности Oracle WebServer.
Архитектура Oracle WebServer
Сравнение технологий
В литературе часто противопоставляют эти технологии, называя их Internet и клиент-сервер, понимая под последней непременно работу в сети, на разных узлах которой выполняются клиентская и серверная части приложения.
На наш взгляд, это неверно. Название "клиент-сервер" происходит от программной организации взаимодействия процессов обработки, неважно, в какой аппаратной среде это происходит. При этом имеется в виду в первую очередь, независимость этих процессов. Клиент выдает запрос (непосредственно серверу или через диспетчера), а сервер этот запрос отрабатывает и возвращает результаты клиенту. Клиента "не волнует", как сервер выполняет его запрос, а серверу безразлично, что клиент потом делает с полученными данными. Такая технология действительно хорошо ложится на сетевую конфигурацию. В этом смысле технология Internet также является технологией клиент-сервер.
В иностранной литературе традиционная технология, когда специализированные клиенты работают со специализированными серверами, называется "groupware". С такими приложениями работают профессиональные обученные операторы, решая сложные и ответственные задачи предметной области. К этим приложениям предъявляются высокие требования по надежности, защите и конкурентному доступу к данным. Соответственно высокие требования также предъявляются к инструментальным средствам, на которых эти приложения создаются и эксплуатируются. Это приводит к тому, что даже самые простые приложения, созданные с помощью таких инструментов, становятся сложными, требуют излишней поддержки и обучения. А потому к ним нельзя предоставить доступ кому попало и, следовательно, нужно содержать дополнительный персонал.
Чтобы получить беглое представление о технологии Internet, ее назначении и решаемых с ее помощью задачах просто добавьте к выделенным в предыдущем параграфе словам частицу НЕ.
От специализированных клиентов и серверов - к универсальным. От сложных приложений с ограниченным доступом - к простым и глобально доступным. Сами приложения могут при этом оставаться сколь угодно сложными, использовать мониторы обработки транзакций, брокеры запросов к объектам, вызовы удаленных процедур и прочую "тяжелую артиллерию". Аудитория пользователей таких приложений безгранична. Снимаются проблемы распределенной обработки, которые в традиционной технологии трудно решить даже при наличии дорогостоящего аппаратно-программного обеспечения и сложных прикладных интерфейсов. За все это теперь отвечает глобальная операционная система Web.
Резюме
Уже после создания этих (честно говоря, не очень больших и сложных) приложений стало ясно, какие перспективы открывает доступ к этому огромному компьютеру под названием Internet. Безусловно, на пути к нему придется решать много проблем, в основном не технического характера. Как ни странно, Internet готов для использования в большей степени, чем сами пользователи. Нужно ломать психологию, нужно изменить Уголовный Кодекс и Конституцию, самое главное - нужно изменить себя.
Нам кажется, что в наступившем году в Сети произойдет следующая революция, связанная с появлением технологий, поддерживающих электронную коммерцию. РДТеХ вместе с Oracle активно пытается участвовать в этом, создавая намного более сложные приложения, связанные с виртуальным банком, оплатой с использованием пластиковых карточек и другими приложениями нового поколения, но это уже совсем другой разговор, и, возможно, мы продолжим его в следующей статье.
Ю. Сайгин, Б. Филимонов, Н. Глонти
РДТеХ, г. Протвино
saigin@chopin.rdtex.ru