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-операции:
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.