Разработка контента курса дистанционного обучения "DB2 универсальная база данных", страница 19

EJB – Enterprise JavaBeans – высокоуровневая, базирующаяся на использовании компонентов технология создания распределенных приложений. В разработанном примере с помощью EJB было организовано помещение данных, полученных при разборе XML файла, в базу данных.

Инициатором процесса репликации в приложении является пользователь уровня линейного района. Пользователь обращается к стартовой JSP-странице приложения, которая предоставляет ему HTML-форму для загрузки XML-документа на сервер дорожного уровня через WEB-браузер. Пользователь выбирает нужный документ и отправляет серверу еще один HTTP-запрос. На этот раз запрос содержит в себе XML-документ с данными для репликации. XML-документ в данном случае - массив строк реплицируемых таблиц и информация о том, что с каждой строкой необходимо сделать: вставить, удалить или изменить соответствующую строку в базе данных на уровне дороги. Обрабатывающий этот запрос сервлет выделяет из него XML-файл и передает его XML-парсеру. XML-парсер сверяет документ со схемой DTD. Затем сервлет при помощи парсера создает массив готовых к исполнению SQL-запросов (строковые переменные), соответствующих данным XML-документа и передает этот массив EJB-компоненту. EJB-компонент устанавливает соединение с DB2 и выполняет полученные запросы, попутно сохраняя результаты их выполнения в журнал (лог) репликации. Сервлету возвращается ответ о результатах работы EJB-компонента (“все в порядке”, “не найден источник данных”, “источник данных не смог установить соединение с DB2”). На этом процедура репликации считается завершенной. Результаты выполнения SQL-операций EJB-компонентом можно узнать, обратившись к журналу репликации посредством еще одного сервлета. Этот сервлет получает от DB2 данные таблицы журнала репликации и предоставляет их пользователю. Таблица журнала репликации содержит SQL-код выполнения операции над строкой XML-документа и данные, необходимые для идентификации XML-документа и строки, соответствующей SQL-коду. В случае если SQL-код есть код ошибки, эта информация позволяет увидеть исходные данные реплицированной с ошибкой строки.

2.7.3. Разработанная структура XML-документа. Схема DTD

XML-документ для репликации представляет собой набор строк, который возможно использовать для разных таблиц. Документ идентифицируется уникальным атрибутом - отметкой времени. Это может быть время создания документа, или время отправки на дорожный уровень - по договоренности. Ниже приведена схема DTD, описывающая разработанную структуру XML-файлов.

<?xml version="1.0" encoding="windows-1251"?>

<!ENTITY % sqlOperations "INSERT|UPDATE|DELETE">

<!ENTITY % insert "column-value+">

<!ENTITY % update "key,column-value+">

<!ENTITY % delete "key">

<!ENTITY % sqlTypes "CHAR|SMALLINT|INTEGER|DATE|TIME|TIMESTAMP|BIGINT">

<!ELEMENT rowset (row+)>

<!ELEMENT row (%insert;|(%update;)|%delete;)>

<!ELEMENT key (column-value+)>

<!ELEMENT column-value (#PCDATA|EMPTY)*>

<!ATTLIST rowset

    timeStamp CDATA #REQUIRED

<!ATTLIST row

    id ID #REQUIRED

    schemaName NMTOKEN #IMPLIED

    tableName NMTOKEN #REQUIRED

    sqlOperation (%sqlOperations;) #REQUIRED

<!ATTLIST column-value

    columnName NMTOKEN #REQUIRED

    sqlType (%sqlTypes;) #REQUIRED

Прокомментируем эту схему: корневой элемент носит название "rowset" и имеет один обязательный уникальный атрибут "timeStamp" (о нем говорилось выше). Элемент “rowset” должен содержать как минимум один элемент "row".

Элемент "row", имеет обязательный уникальный атрибут "id" – идентификатор строки, обязательный атрибут "tableName" - имя таблицы, необязательный атрибут "schemaName" - имя схемы авторизации, обязательный атрибут "sqlOperation" – название SQL-операции. Допустимые значения для этого атрибута: INSERT, UPDATE и DELETE. Этого набора операций достаточно для выполнения репликации. Набор внутренних элементов для элемента "row" зависит от SQL-операции: