В этой главе описано приложение-образец videoapp,
иллюстрирующее использование службы LiveWire Database Service. Рассмотрено, как
сконфигурировать рабочую среду для запуска приложений videoapp и oldvideo.
Netscape-серверы поставляются с двумя приложениями-образцами для работы с базами
данных, videoapp и
oldvideo, которые иллюстрируют работу LiveWire Database Service.
Эти приложения весьма похожи; они отслеживают прокат видео в воображаемом
видео-салоне. Приложение videoapp демонстрирует использование
объектов DbPool и Connection.
Приложение oldvideo демонстрирует использование предопределённого
объекта database.
Есть несколько небольших ограничений на использование этих
приложений:
Приложение videoapp не может
базироваться на БД Informix. Приложение oldvideo может
использоваться с Informix.
Поскольку эти
приложения могут использоваться с ODBC и SQL Server,
если драйвер на Вашей платформе не поддерживает обновляемые курсоры, приложения работать не будут.
О том, какие драйверы поддерживают обновляемые курсоры, см. раздел "Поддерживаемые
Клиенты БД и ODBC-Драйверы"
.
Приложение videoapp использует курсоры, захватывающие несколько HTML-страниц.
Если ваш драйвер БД - однопоточный, эти курсоры могут иметь блокировки для БД
и препятствовать доступу к ним других пользователей.
О том, какие драйверы являются однопоточными, см. .
Конфигурирование Среды
Прежде чем Вы сможете запустить эти приложения,
необходимо сделать незначительные изменения в исходных файлах и создать базу
данных для видео. В данном разделе указывается, какие файлы Вы обязаны изменить
и какие процедуры выполнить, чтобы внести эти изменения и создать БД для каждого
из поддерживаемых серверов БД. См. конкретную информацию в разделе, посвящённом Вашему серверу БД.
ПРИМЕЧАНИЕ:
Ваш сервер БД обязан быть настроен и запущен перед началом создания видео-БД, и
Вы обязаны сконфигурировать сервер и клиента БД так, как указано в
Главе 10, "Конфигурирование Базы Данных".
Кроме того, скрипты создания БД используют утилиты БД,
поставляемые с Вашими БД. Вы уже должны знать, как пользоваться этими утилитами.
Соединение с БД и Рекомпиляция
Приложение videoapp находится в директории
$NSHOME\js\samples\videoapp, где $NSHOME это
директория установки Netscape-сервера. Приложение oldvideo находится в директории
$NSHOME\js\samples\oldvideo.
Для каждого приложения Вы обязаны изменить строку с информацией о соединении в
исходном HTML-файле start.htm,
чтобы настроиться на среду окружения Вашей БД. О параметрах соединения см. раздел
"Пул Соединений Базы Данных"; дополнительно см.
также описание метода connect в книге Серверный JavaScript. Справочник.
Сохраните изменения и рекомпилируйте приложение. Для рекомпиляции приложения из
командной строки запустите его build-файл, расположенный в директории приложения.
Убедитесь, что переменная окружения PATH содержит путь к
компилятору (обычно это $NSHOME\bin\https).
Рестартуйте приложения в JavaScript Application Manager'е.
Создание Базы Данных
Имеются два набора скриптов создания БД для videoapp и oldvideo,
находящиеся в соответствующих этим приложениям директориях. Наборы скриптов
идентичны. Если Вы запустите один набор, оба приложения смогут использовать БД.
При первом запуске скриптов Вы можете получать ошибки,
касающиеся стирания БД или таблиц, которые ещё не существуют. Это нормально;
можно спокойно игнорировать эти сообщения.
Informix
Прежде чем использовать нижеуказанные инструкции, Вы
обязаны сконфигурировать Ваш Informix-клиент, как указано в разделе "Informix."
Кроме того, убедитесь, что переменная окружения PATH содержит путь
к $INFORMIXDIR\bin и что Ваш клиент сконфигурирован для использования утилит Informix.
SQL-файлы для создания видео-БД (lw_video)
в Informix находятся в двух директориях:
Не забудьте, что пути в этом учебнике, если они относятся и к NT, и к Unix,
даются в формате NT. В Unix Вы используете $NSHOME/js/samples/videoapp/ifx.
В Unix войдите в систему как пользователь "informix" и запустите скрипт оболочки
ifx_load.csh для videoapp и для oldvideo.
В NT дважды щёлкните в группе программ Informix Server
иконку Command-Line Utilities, чтобы открыть окно DOS, затем запустите
следующие команды:
cd c:\netscape\server\js\samples\videoapp\ifx ifx_load.bat
Вы можете также запустить эти команды из директории oldvideo\ifx:
Прежде чем использовать нижеуказанные инструкции, Вы обязаны сконфигурировать
Ваш Oracle-клиент, как указано в разделе
"Oracle." Помимо этого, Ваш клиент обязан
быть сконфигурирован для запуска утилит Oracle. Чтобы запускать SQL Plus, Вам
может понадобиться установить переменную окружения ORACLE_SID.
SQL-файлы для создания видео-БД в Oracle, находятся в двух директориях:
Вы можете также запустить этот скрипт из директории oldvideo. Этот SQL-скрипт
не создаёт новую БД. Он создаёт таблицы Oracle в текущем экземпляре.
В Unix: запустите скрипт-файл ora_load для загрузки видео-таблиц с
данными. В NT: запустите пакетный файл
ora_load.bat для загрузки видео-таблиц с данными. Вы обязаны
отредактировать соответствующий файл для подключения к Вашему серверу;
инструкции об этом содержатся в файле.
Прежде чем использовать нижеуказанные инструкции, Вы обязаны сконфигурировать
Ваш Sybase-клиент, как указано в разделе
"Sybase." Кроме того, в Unix убедитесь, что
переменная окружения PATH содержит $SYBASE\bin и DSQUERY указывает на ваш сервер.
SQL-файлы для создания видео-БД в Sybase, находятся в двух директориях:
Если у Вас на машине установлены и Sybase, и MS SQL Server или DB2,
потенциально может возникнуть конфликт имён. Эти производители поставляют утилиты с
одинаковыми названиями (bcp и isql). При запуске
этих скриптов убедитесь, что переменная окружения настроена для запуска корректной утилиты.
Microsoft SQL Server (только для NT)
Прежде чем использовать нижеуказанные инструкции, Вы обязаны сконфигурировать
Ваш Sybase-клиент, как указано в разделе
"ODBC." Кроме того, в Unix установите DSQUERY
так, чтобы она указывала на Ваш сервер.
SQL-файлы для создания видео-БД в MS SQL Server, находятся в двух директориях:
Если у Вас на машине установлены и Sybase, и MS SQL Server или DB2,
потенциально может возникнуть конфликт имён. Эти производители поставляют
утилиты с одинаковыми названиями (bcp и isql). При запуске
этих скриптов убедитесь, что переменная окружения настроена для запуска корректной утилиты.
DB2
SQL-файлы для создания видео-БД в DB2, находятся в двух директориях:
(Только в Unix) Ваша переменная окружения PATH
обязана содержать директории $DB2PATH/bin, $DB2PATH/misc
и $DB2PATH/adm.
Прежде чем запустить
эти скрипты, Вы обязаны уже иметь установленный DB2
Software Developer's Kit (DB2 SDK).
Также, прежде чем Вы сможете запустить скрипты для создания таблиц, Вы обязаны
отредактировать их, чтобы изменить некоторые параметры.
В Unix это скрипт db2_load.csh; в NT это скрипт db2_load.bat.
Отредактируйте соответствующий файл db2_load и измените следующие
параметры, отражающие Ваше окружение:
<nodename>:
псевдоним имени узла/node name alias
<hostname>: имя хоста узла, где находится целевая БД
<service-name>:
имя службы или имя экземпляра из файлов службы
<database-name>:
имя БД
<user>: авторизованный
пользователь
<password>: пароль пользователя
Убедитесь, что Ваши файлы /etc/services
имеют вхождения для экземпляра или имени службы, если Вы создаёте БД на удалённом DB2-сервере.
Запустите соответствующую версию скрипта из окна команд DB2.
Скрипт db2_load запускает скрипты db2_video.sql и import.sql.
Эти вспомогательные скрипты создают видео-таблицы и загружают их данными из
файлов *.del.
Они не создают новую БД. Они создают таблицы DB2 в псевдониме локальной БД,
специфицированном в скрипте db2_load.
ПРИМЕЧАНИЕ:
Если у Вас на машине установлены и DB2, и Sybase или MS SQL Server,
потенциально может возникнуть конфликт имён. Эти производители поставляют
утилиты с одинаковыми названиями (bcp и isql). При запуске
этих скриптов убедитесь, что переменная окружения настроена для запуска корректной утилиты.
Запуск Videoapp
В этом разделе говорится о запуске приложения videoapp. Это
значительно более сложный пример, нежели образцы, рассмотренные в
Главе 4, "Быстрое Начало с Примерами Приложений". В этой главе дан только его
обзор. Вы должны просмотреть также некоторые файлы, чтобы получше познакомиться с приложением.
После создания видео-БД и изменения параметров соединения
с БД Вы можете запустить приложение:
http://server.domain/videoapp
После соединения с БД менеджер Application Manager выводит домашнюю страницу videoapp,
как показано на Рисунке 13.1.
Рисунок 13.1 Домашняя страница Videoapp
Если соединение с БД невозможно установить, Вы увидите
сообщение об ошибке. Убедитесь, что введены корректные параметры соединения с БД, как указано в разделе
"Соединение с Базой Данных и Рекомпиляция", приложение
рекомпилировано и рестартовало.
Первое, что нужно сделать при установлении соединения,
это создать нового потребителя/customer. Пока Вы этого не сделаете, нет ни
одного потребителя, который может использовать другие функции приложения.
Вы можете использовать videoapp как customer или как administrator.
Как customer Вы можете:
Арендовать клип
Показать все клипы/movies, арендованные Вами
Как administrator Вы можете:
Показать все клипы и тех, кто их арендует
Вернуть video потребителю
Добавить нового
потребителя
Удалить потребителя
Изменить потребителя
Запустите приложения и сделайте несколько выборов для выполнения различных действий.
Взгляд на Исходные Файлы
Исходные HTML-файлы videoapp,
перечисленные в следующей таблице, обильно комментируются.
Страница по умолчанию. Имеет ссылки на pick.htm,
status.htm, rentals.htm, customer.htm и
delete.htm. Если нет соединения с БД, эта страница перенаправляет клиента на страницу
start.htm.
start.htm
Соединяет приложение с БД, стартует транзакцию и переводит обратно на home.htm.
abort.htm
Отменяет одну транзакцию и начинает новую.
save.htm
Подтверждает/Commits транзакцию и начинает новую.
pick.htm
Позволяет потребителю взять клип напрокат. Содержит
фрэймы для
category.htm, videos.htm и pickmenu.htm.
Файл category.htm показывает категории видео.
Файл videos.htm показывает все видео в выбранной категории и
соединён с
rent.htm для аренды определённых видео.
Файл pickmenu.htm показывает другие страницы.
status.htm
Выводит видео, имеющиеся
у потребителя в данный момент. Если потребитель не выбрал ID, перенаправляет его
на страницу client.htm, на которой можно выбрать customer ID.
rentals.htm
Выводит список всех
взятых видео. Когда администратор щёлкает на названии одного их них, выбранная
позиция отправляется на return.htm, которая выполняет действия по
возвращению видео, затем направляет обратно на rentals.htm.
customer.htm
Администратор может
ввести здесь нового потребителя.
Отправляет введённые в форму данные на add.htm, где выполняются
действия по вводу нового потребителя, затем возвращает на customer.htm.
delete.htm
Здесь администратор
может удалить потребителя.
Выводит список потребителей со ссылками на remove.htm, где
удаляется специфицированный ряд из таблицы потребителей, затем возвращает на delete.htm.
modify.htm
Администратор может изменить здесь данные потребителя.
Выводит список из первых 5 потребителей со ссылками на страницы modify1.htm
и modify2.htm. Эти страницы обновляют специфицированный ряд в
таблице потребителей и возвращают обратно на modify.htm.
Файл modify3.htm выводит следующих потребителей, 5 за один раз.
Архитектура Приложения
Этот раздел ориентирует Вас на реализацию некоторой функциональности в videoapp.
Он описывает, как приложение работает с БД и детали процедуры аренды видео.
Другие задачи похожи.
Соединение и Процесс Работы
Когда пользователь инициирует сессию с приложением videoapp,
входя на начальную страницу (home.htm), videoapp
проверяет, имеется ли уже соединение с БД. Если это так, videoapp
предполагает, что не только приложение, но и пользователь уже соединены с БД, и продолжает работу.
Если соединение не установлено, videoapp перенаправляет на страницу start.htm.
На ней приложение создаёт единый пул соединений с БД, используемый всеми
потребителями, получает соединение для пользователя и стартует транзакцию с БД
для этого соединения. Затем перенаправляет обратно на home.htm для
продолжения. Пользователь никогда не видит перенаправления.
Транзакция базы данных стартует на странице start.htm
и остаётся открытой, пока пользователь явно не сохранит или не отменит изменения,
щёлкнув кнопку Save Changes или Abort Changes. При этом запускается
save.htm или abort.htm. Эти страницы подтверждают или
откатывают изменения открытой транзакции, а затем немедленно начинают новую
транзакцию. Поэтому соединение потребителя всегда остаётся открытым.
Получив соединение с БД, videoapp выводит
пользователю главную страницу. С неё пользователь может сделать выбор - такой
как аренда клипа или добавление нового потребителя. Каждая из этих опций выводит
разные страницы, которые содержат операторы серверного
JavaScript. Многие страницы имеют операторы, использующие соединение для
взаимодействия с БД, выводя информацию или внося изменения в БД.
Первое, что Вы обязаны сделать при первом соединении, это добавить нового
потребителя. Пока Вы этого не сделаете,
отсутствуют потребители для выполнения других действий программы.
Взятие Клипа Напрокат
Страница pick.htm содержит набор фрэймов,
где пользователь может взять клип напрокат. Набор фрэймов состоит из страниц
category.htm, videos.htm и pickmenu.htm.
Страница category.htm запрашивает в БД список известных категорий
клипов. Затем выводит эти категории в виде списка ссылок в таблице левого фрэйма.
Если пользователь щёлкает на одной из ссылок,
videoapp выводит video.htm в правом фрэйме. Есть
несколько интересных моментов, касающихся серверного кода, выполняющего эти
задачи. На странице Вы можете найти такие строки:
var userId = unscramble(client.userId)
var bucket = project.sharedConnections.connections[userId] var connection = bucket.connection
Эти операторы имеются на большинстве страниц videoapp.
Они запрашивают соединение из того места, где оно хранится в объекте project.
Следующая строка получает новый курсор, применимый для данной задачи:
cursor = connection.cursor("select * from categories");
Вариант этого оператора имеется в начале большинства задач.
Вот следующий интересный набор операторов:
<SERVER> ... while (cursor.next()) {
catstr = escape(cursor.category) </SERVER>
Когда пользователь щёлкает на ссылке, сервер переходит на
страницу videos.htm и устанавливает значение свойства category
объекта request в Comedy.
Страница videos.htm может обрабатываться
из pick.htm или из category.htm. В первом случае
свойство category не устанавливается, поэтому страница выводит сообщение,
предлагающее пользователю выбрать категорию. Если category
правильно установлено, videos.htm входит в БД для вывода информации
обо всех клипах данной категории. Эта страница использует ту же технику, что и category.htm,
для конструирования информации и создания ссылок на странице
rent.htm.
Страница rent.htm фактически записывает
взятые пользователем напрокат клипы. Она получает информацию из запроса и
обновляет таблицу в БД для отражения новой аренды. Эта страница выполняет
обновление, но не подтверждает изменения, пока пользователь не
выберет Save Changes или Abort Changes.
Страница pickmenu.htm просто выводит кнопки для возврата на
домашнюю страницу или на страницу для добавления нового потребителя.
Модифицирование videoapp
Как способ применения функциональности LiveWire
рассмотрим пример модернизации videoapp. Вот что можно сделать:
Изменить предположение о том, что существование массива
sharedConnections предполагает наличие соединения у пользователя.
Вы можете изменить start.htm, чтобы выполнять проверку наличия ID у данного
пользователя в этом массиве и проверить, хранится ли соединение в нужном месте.
См. раздел "Совместное Использование Массива Пула Соединений".
Это приложение никогда не возвращает соединения обратно в пул.
Следовательно, если некоторое количество пользователей соединились, больше
никто соединиться не сможет. Вы можете изменить это двумя путями: добавить
новую команду, позволяющую пользователю указывать на завершение работы, или
реализовать схему зачистки неиспользуемых соединений. См. "Запрашивание
Свободного Соединения".