Создание приложения на базе pureXML и JSON: Часть 2. Создание сервисов Universal Services для pureXML, отображающих данные JSON

Настройка, развертывание и тестирование JSON Universal Services в хранилище JSONx

pureXML® Universal Services for JSON (в этой статье сокращено до JSON Universal Services) – это набор операций с базами данных, включая операции вставки, редактирования, удаления и запроса, представленных в виде Web-сервисов. Эти сервисы позволяют приложениям сохранять JSON в pureXML и легко обращаться к нему через HTTP и WebSphere® Application Server. В этой статье рассматривается процесс настройки и тестирования JSON Universal Services.

Фейтон (Тони) Авдиу, специалист по технической реализации DB2, IBM

Фотография Фейтона (Тони) АвдиуФейтон (Тони) Авдиу [Faton (Tony) Avdiu] – специалист по технической реализации DB2 (Co-Op), окончивший курс вычислительной техники. Учится на магистра информационных систем в Университете Пейс в Нью-Йорке. В настоящее время работает с технологиями IBM для хранения XML в DB2.



Сюзан Малайка, старший инженер, IBM

Сюзан Малайка (Susan Malaika) работает старшим инженером в отделе IBM Information Management Group (часть IBM Software Group). Специализируется на XML, Web и базах данных. Разработала стандарты, поддерживающие данные для сетевых сред на Global Grid Forum. Являясь разработчиком программных продуктов IBM, работает также в качестве интернет-специалиста, аналитика данных и разработчика приложений. Соавтор книги о Web и опубликованных статей по обработке транзакций и XML. Член IBM Academy of Technology.



Михаэл Шенкер, инженер по оптимизации программного обеспечения IBM DB2 для z/OS, IBM

Фото автора: Михаэл ШенкерМихаэл Шенкер (Michael Schenker) получил степень магистра вычислительной техники в Лейпцигском университете прикладных наук (Германия). Имеет семилетний стаж работы в IBM. За свою карьеру Михаэл работал над несколькими продуктами на основе баз данных, начав с работы стажером по DB2 Information Integration с акцентом на нереляционные оболочки. С конца 2003 года – штатный сотрудник IBM. В 2006 году вошел в штат отделения инструментов базы данных и работал над функциональными возможностями Web-сервисов DB2 в IBM Data Studio Developer. За это время приобрел богатый опыт в области SOA и Web-технологий. Недавно вошел в состав группы разработки оптимизатора DB2 для z/OS, но по-прежнему интересуется SOA и Web-технологиями, связанными с DB2.



23.11.2011

3 ноября 2009 г. – добавлен раздел Дополнительная информация об операциях JSON Universal Services и Таблица 3 с описанием параметров, кодировки и MIME-типов, относящихся к операциям JSON Universal Services.

27 апреля 2010 г. – отредактирован и заменен файл загрузки JSONUniversalServices.zip (см. раздел Загрузка) с внесением следующих изменений:

  • предотвращение исключительного состояния OutOfMemory функции xml2json(), когда в документе встречаются многобайтовые символы;
  • предотвращение отсечения хвостовых символов функцией xml2json() в результирующем CLOB, когда в документе встречаются многобайтовые символы;
  • поддержка необязательного файла свойств, определяющего выходной формат функции xml2json().

Введение

Это вторая часть цикла из трех статей, в которых показано, как построить трехуровневое приложение pureXML, использующее гаджеты JavaScript или OpenSocial. Следуя шагам, описанным в этой статье, вы сможете представить данные JSON, описанные в первой статье цикла, с помощью JSON Universal Services.

JSONx – это каноническое представление XML без потерь для JSON, которое позволяет устройствам и программам, поддерживающим XML, работать с JSON. В первой статье этой серии мы сделали введение в JSONx и проиллюстрировали, как сохранить JSONx в базе данных pureXML. pureXML позволяет хранить, индексировать данные XML и обращаться к ним на таких языках, как SQL/XML, XQuery и XPath.

Universal Services для pureXML – это простой фиксированный набор операций с базами данных, который позволяет вызывать и редактировать XML-данные, хранящиеся в столбце pureXML базы данных DB2®. Эти операции с базой данных, в число которых входят вставка, редактирование, удаление и запросы, представляются в виде Web-сервисов, возвращающих клиенту данные XML. Чтобы получить доступ к Universal Services, нужно выполнить несколько простых операций настройки и развертывания. Более подробная информация о Universal Services содержится в статье DeveloperWorks "Universal Services for pureXML using Data Web Services" (см. ссылку в разделе Ресурсы).

Используемые сокращения

  • HTML: HyperText Markup Language
  • HTTP: Hypertext Transfer Protocol
  • JSON: JavaScript Object Notation
  • SOA: Service Oriented Architecture
  • URL: Uniform Resource Locator
  • WAR: Web ARchive files
  • XML: Extensible Markup Language

Сервисы JSON Universal Services аналогичны Universal Services, за исключением того, что они работают с данными JSONx, хранящимися в столбце pureXML. Как упоминалось выше, в число операций с базами данных входят вставка, редактирование, удаление и запросы, однако данные возвращаются клиенту в формате JSON, а не XML.

При этом клиентские приложения JavaScript (и другие) «не знают», что XML-хранилище используется для JSON. По отношению к сохраненным объектам JSON можно применять собственные возможности DB2 по работе с XML, которые позволяют просматривать, запрашивать и манипулировать данными с помощью декларативных языков, таких как XPath, значительно сокращая время разработки.

В этой статье мы рассмотрим процесс настройки, развертывания и тестирования JSON Universal Services в хранилище JSONx на примере базы данных DB2, описанном в первой статье этого цикла «Создание приложения на базе pureXML и JSON. Часть 1: Хранение и извлечение JSON с помощью технологии pureXML в DB2» (см. ссылку в разделе Ресурсы).

Если вам нужна более подробная информация по этим шагам, обращайтесь к документу README.pdf из комплекта загрузки JSON Universal Services, где содержатся полные иллюстрированные пошаговые инструкции. (Распаковав пакет, вы найдете файл README.pdf в каталоге JSONUniversalServices.)

Предварительные замечания

Перед установкой JSON Universal Services необходимо выполнить операции, описанные в первой статье этого цикла. Комплект JSONx создаст базу данных и зарегистрирует в DB2 необходимые определяемые пользователем функции Java™ (UDF), которые позволяют преобразовывать JSON в JSONx и наоборот. Вам также потребуются DB2 9.5 или 9.7, Java Runtime Environment 1.5.0 и Web-сервер (например, WebSphere Application Server V6.х или Apache Tomcat V6.х). Отметим, что Java Runtime входит в установку DB2. Если вы еще не установили эти продукты, читайте первую статью (см. ссылку в разделе Ресурсы).

В первой статье этого цикла мы создали таблицу CUSTOMER, которую будем использовать для установки и тестирования JSON Universal Services. Обзор таблицы CUSTOMER приведен в таблице 1.

Таблица 1. Обзор таблицы JSONXMLADMIN.CUSTOMER
Имя столбца Тип данных Описание
CID INTEGER Идентификатор клиента
INFOXML Запись с информацией о личности клиента
COMMENTVARCHAR(256)Короткий текстовый идентификатор клиента

Теперь все, что необходимо, установлено, таблица создана, и можно настроить и установить JSON Universal Services в специальном столбце pureXML.


Установка JSON Universal Services

В этом разделе предполагается, что вы загрузили и распаковали JSON Universal Services во временный локальный рабочий каталог. В рамках этой статьи для JSON Universal Services используется каталог C:\temp\JSONUniversalServices. Вы должны увидеть каталоги и файлы, как показано на рисунке 1.

Рисунок 1. Содержание пакета загрузки JSON Universal Services
Содержание пакета загрузки JSON Universal Services

В число каталогов входят classes, services и war. Файлы: configure.bat, configure.sh и README.pdf.

Когда в системе есть все необходимые файлы и сценарии, можно приступить к установке JSON Universal Services, которая в основном состоит из трех этапов:

  • настройка JSON Universal Services в соответствии с параметрами локальной системы;
  • развертывание JSON Universal Services на сервере приложений;
  • тестирование JSON Universal Services.

Настройка JSON Universal Services

Настройка Web-сервисов осуществляется с помощью сценария, который присутствует в загрузке под именем configure.bat (для пользователей Linux® - configure.sh). Этот сценарий модифицирован для работы с комплектом JSONx. Поэтому, если вы изменили комплект JSONx или решили использовать другую базу данных, то прежде чем выполнять сценарий configure.bat, его необходимо отредактировать. Возможно, потребуется изменить некоторые параметры в соответствии с настройкой локальной системы. Параметры, используемые в данной конфигурации сценария, приведены в таблице 2.

Таблица 2. Обзор параметров, используемых в сценарии настройки
Имя параметраОписаниеЗначение (согласно примеру базы данных)
DB2INSTALLDIRПуть к каталогу установки DB2. C:\Program Files\IBM\SQLLIB
DBSCHEMAИмя схемы базы данных, к которой принадлежит таблица, содержащая столбец XML. JSONXMLADMIN
DBNAME Имя базы данных, с которой используются Universal Services. JSONSMPL
DBTABLEИмя таблицы, содержащей столбец XML. CUSTOMER
DBPRIMARY Имя основного столбца таблицы, указанной в DBTABLE. Этот столбец может быть типа INTEGER или VARCHAR. CID
DBCOMMENT Имя столбца комментария таблицы, указанной в DBTABLE. COMMENT
DBXML Имя столбца XML таблицы, указанной в DBTABLE. Это столбец содержит данные XML. INFO

Обратите внимание, что значения трех параметров таблицы 2 - DBPRIMARY, DBCOMMENT и DBXML - совпадают с именами столбцов таблицы 1.

На рисунке 2 показан файл конфигурации, отредактированный в соответствии со значениями из таблицы 2 (см. текстовую версию рисунка 2.)

Рисунок 2. Редактирование файла configure.bat
Редактирование файла configure.bat

Когда файл configure.bat (для пользователей Linux - configure.sh) изменен нужным образом, можно выполнить сценарий настройки JSON Universal Services. Он создает файл архива Web-приложения (WAR), содержащий все необходимые файлы для Web-приложения JSON Universal Services, который можно развернуть на сервере приложений. Помните, что сценарий должен выполняться в процессоре командной строки DB2.

Развертывание JSON Universal Services

Как описано в предыдущем разделе, редактирование и выполнение сценария configure.bat приводит к созданию файла WAR, который теперь можно развернуть на сервере приложений. Перед развертыванием файла WAR на сервере приложений необходимо настроить источник данных на сервере приложений, что позволит Universal Services обращаться к базе данных DB2.

Для настройки источника данных выполните стандартную процедуру конфигурирования сервера приложений. Единственное особое требование при установке заключается в том, что имя источника данных должно соответствовать следующей схеме: jdbc/имя базы данных. Для примера, используемого в этой статье, имя источника данных будет jdbc/jsonsmpl. Если вам нужна дополнительная информация о том, как создать источник данных, обращайтесь к документации своего сервера приложений или прочтите файл README.pdf, включенный в пакет загрузки JSON Universal Services (в каталоге JSONUniversalServices).

На втором шаге файл WAR развертывается на сервере приложений. Однако ввиду различий в артефактах Web-сервисов, требуемых для WebSphere Application Server V6.х и Apache Tomcat V6.х, сценарий конфигурации создает два отдельных файла WAR, по одному для каждого из серверов приложений.

Файлы WAR можно найти в подкаталоге war, расположенном в рабочем каталоге C:\temp\JSONUniversalServices JSON Universal Services. В частности, каталог содержит два подкаталога: tomcat и was. Каталог tomcat содержит файл WAR для установки на Apache Tomcat V6.х, а каталог was – файл WAR для установки на WebSphere Application Server V6.X. Для того чтобы установить файл WAR на сервер приложений, выполните соответствующую стандартную процедуру. Если необходима более подробная информация, обратитесь к документации сервера приложений или прочтите файл README.pdf, содержащийся в комплекте загрузки JSON Universal Services.

Теперь можно проверить набор Web-сервисов с помощью тестовой страницы JSON Universal Services, которая доступна после развертывания файла WAR.


Тестирование JSON Universal Services

Чтобы убедиться, что установка и настройка JSON Universal Services на локальной системе прошли успешно, необходимо протестировать эти сервисы. Простейший способ – воспользоваться простой страницей HTML, уже имеющейся на сервере приложений после развертывания JSON Universal Services.

Чтобы получить доступ к тестовой странице JSON Universal Services, направьте браузер по адресу URL http://localhost:8080/JSONUniversalServices/testServices.html. Имейте в виду, что если вы установили пакет на Apache Tomcat, используется порт 8080. Если же установлен сервер приложений WebSphere, для доступа к странице нужно использовать порт 9080. Отметим, что в зависимости от локальной системы может потребоваться адаптация имени хоста или порта. Вы должны увидеть страницу, как на рисунке 3.

Рисунок 3. Страница тестирования JSON Universal Services
Страница тестирования JSON Universal Services

Эта простая тестовая страница позволяет вставлять, редактировать, удалять и запрашивать данные JSON, хранящиеся в базе данных в виде JSONx. Web-сервисы вызываются кнопками на тестовой странице. На рисунке 4 показан ответ Web-сервисов после вызова операции getPrimaryKeys кнопкой на тестовой странице.

Рисунок 4. Ответ на вызов операции Web-сервиса getPrimaryKeys
Страница тестирования JSON Universal Services

Документы JSON преобразованы и вставлены в столбец в виде XML-документов. Эти документы можно извлечь как в JSON-, так и в XML-формате.

Например, обратившись к методу getJSONDocumentByKey, вы получите JSON-представление документа (листинг 1).

Листинг 1. Информация о клиенте Kathy Smith в формате JSON
{
  "customerinfo" : {
    "cid" : 1000 ,
    "name" : "Kathy Smith" ,
    "addr" : {
      "country"    : "Canada" ,
      "street"     : "5 Rosewood" ,
      "city"       : "Toronto" ,
      "prov-state" : "Ontario" ,
      "pcode-zip"  : "M6W 1E6"
    } ,
    "phone" : {
      "work" : "416-555-1358"
    }
  }
}

Если же обратиться к методу getXMLDocumentByKey, можно получить XML-документ (формат JSONx) в том виде, в каком он хранится в базе данных pureXML DB2 (листинг 2).

Листинг 2. Информация о клиенте Kathy Smith в формате JSONх
<json:object xmlns:json="http://www.ibm.com/xmlns/prod/2009/jsonx">
  <json:object name="customerinfo">
	<json:number name="cid">1000</json:number>
	<json:string name="name">Kathy Smith</json:string>
	<json:object name="addr">
	  <json:string name="country">Canada</json:string>
	  <json:string name="street">5 Rosewood</json:string>
	  <json:string name="city">Toronto</json:string>
	  <json:string name="prov-state">Ontario</json:string>
	  <json:string name="pcode-zip">M6W 1E6</json:string>
	</json:object>
	<json:object name="phone">
	  <json:string name="work">416-555-1358</json:string>
	</json:object>
  </json:object>
</json:object>

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

Подробнее об операциях JSON Universal Services

В этот раздел мы включили таблицу 3, в которой описываются параметры, их обозначения и типы MIME, связанные с операциями JSON Universal Services. Операции доступны посредством типов HTTP GET, HTTP POST с URL-кодом и неформатированного текста MIME.

  • Для операций getDocumentByKey и getXMLDocumentByKey можно указать ID и получить данные, которые хранятся в формате JSON или XML соответственно.
  • Для операций insert и update можно указать идентификатор документа JSON, подлежащего вставке или редактированию, или же новый документ. Если запрос выполнен успешно, число обновлений будет равно 1. В противном случае число обновлений будет равно 0.
  • Для операции delete можно указать идентификатор документа, подлежащего удалению из хранилища pureXML. Если запрос на удаление выполнен успешно, число обновлений будет равно 1. В противном случае число обновлений будет равно 0.
  • Операция runXMLQuery передает XQuery или входные данные для XMLQUERY (подмножество SQL/XML), получая XML-данные, которые можно распространить по многим хранящимся документам. На тестовой странице приведены некоторые примеры.
Таблица 3. Обзор операций JSON Universal Services
ОперацияВходной параметрHTTP GET HTTP POST MIME_TYPE application/x-www-form-urlencoded HTTP POST MIME-TYPE text/plain, application/jsonОтвет
getDocumentByKeyidid: параметр/ значение в составе URL в строке запросаid: параметр/ значение в составе URL в сообщенииid: параметр/ значение в составе URL в строке запроса Документ JSON (неформатированный текст)
getXMLDocumentByKeyid:id: параметр/ значение в составе URL в строке запросаid: параметр/ значение в составе URL в сообщенииid: параметр/ значение в составе URL в строке запроса JSONx-представление документа (текст/XML)
insertid (уникальный)
doc (документ JSON)
id: параметр/ значение в составе URL в строке запроса
doc: параметр/ значение в составе URL в строке запроса
id: параметр/ значение в составе URL в сообщении
doc: параметр/ значение в составе URL в сообщении
id: параметр/ значение в составе URL в строке запроса
doc: содержание сообщения POST
Число обновлений (неформатированный текст)
updateid
doc (документ JSON)
id: параметр/ значение в составе URL в строке запроса
doc: параметр/ значение в составе URL в строке запроса
id: параметр/ значение в составе URL в сообщении
doc: параметр/ значение в составе URL в сообщении
id: параметр/ значение в составе URL в строке запроса
doc: содержание сообщения POST
Число обновлений (неформатированный текст)
deleteidid: параметр/ значение в составе URL в строке запросаid: параметр/ значение в составе URL в сообщенииid: параметр/ значение в составе URL в строке запроса Число обновлений (неформатированный текст)
runXMLQueryquery
(XQuery или входные данные для XMLQUERY)
query: параметр/ значение в составе URL в строке запросаquery: параметр/ значение в составе URL в сообщенииquery: Содержание сообщения POST XML-документ с результатами (текст/XML)

Заключение

Эта статья дала вам представление о Web-сервисах JSON Universal Services, охватив процессы настройки, развертывания и тестирования JSON Universal Services в хранилище JSONx на примере базы данных DB2.

В первой статье этого цикла вы познакомились с новым форматом JSONx, который позволяет хранить JSON как XML в базе данных pureXML DB2. Был рассмотрен типичный случай JSON и выделены преимущества использования pureXML для хранения JSON.

Следующая статья этого цикла посвящена созданию уровня представления с помощью гаджетов Open-Social, которые опираются на JSON Universal Services как на сервер.


Загрузка

ОписаниеИмяРазмер
Пакет JSON Universal ServicesJSONUniversal Services.zip1927 КБ

Ресурсы

Научиться

Получить продукты и технологии

  • DB2 Express-C: загрузите эту бесплатную общедоступную редакцию сервера данных DB2.

Обсудить

Комментарии

developerWorks: Войти

Обязательные поля отмечены звездочкой (*).


Нужен IBM ID?
Забыли Ваш IBM ID?


Забыли Ваш пароль?
Изменить пароль

Нажимая Отправить, Вы принимаете Условия использования developerWorks.

 


Профиль создается, когда вы первый раз заходите в developerWorks. Информация в вашем профиле (имя, страна / регион, название компании) отображается для всех пользователей и будет сопровождать любой опубликованный вами контент пока вы специально не укажите скрыть название вашей компании. Вы можете обновить ваш IBM аккаунт в любое время.

Вся введенная информация защищена.

Выберите имя, которое будет отображаться на экране



При первом входе в developerWorks для Вас будет создан профиль и Вам нужно будет выбрать Отображаемое имя. Оно будет выводиться рядом с контентом, опубликованным Вами в developerWorks.

Отображаемое имя должно иметь длину от 3 символов до 31 символа. Ваше Имя в системе должно быть уникальным. В качестве имени по соображениям приватности нельзя использовать контактный e-mail.

Обязательные поля отмечены звездочкой (*).

(Отображаемое имя должно иметь длину от 3 символов до 31 символа.)

Нажимая Отправить, Вы принимаете Условия использования developerWorks.

 


Вся введенная информация защищена.


static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=40
Zone=XML, Information Management
ArticleID=776684
ArticleTitle=Создание приложения на базе pureXML и JSON: Часть 2. Создание сервисов Universal Services для pureXML, отображающих данные JSON
publish-date=11232011