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" (см. ссылку в разделе Ресурсы).
Сервисы 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 | Идентификатор клиента |
| INFO | XML | Запись с информацией о личности клиента |
| COMMENT | VARCHAR(256) | Короткий текстовый идентификатор клиента |
Теперь все, что необходимо, установлено, таблица создана, и можно настроить и установить JSON Universal Services в специальном столбце pureXML.
Установка JSON Universal Services
В этом разделе предполагается, что вы загрузили и распаковали JSON Universal Services во временный локальный рабочий каталог. В рамках этой статьи для JSON Universal Services используется каталог C:\temp\JSONUniversalServices. Вы должны увидеть каталоги и файлы, как показано на рисунке 1.
Рисунок 1. Содержание пакета загрузки 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 (для пользователей 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, хранящиеся в базе данных в виде JSONx.
Web-сервисы вызываются кнопками на тестовой странице.
На рисунке 4 показан ответ Web-сервисов после вызова операции getPrimaryKeys кнопкой на тестовой странице.
Рисунок 4. Ответ на вызов операции Web-сервиса getPrimaryKeys
Документы 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 | Ответ |
|---|---|---|---|---|---|
| getDocumentByKey | id | id: параметр/ значение в составе URL в строке запроса | id: параметр/ значение в составе URL в сообщении | id: параметр/ значение в составе URL в строке запроса | Документ JSON (неформатированный текст) |
| getXMLDocumentByKey | id: | id: параметр/ значение в составе URL в строке запроса | id: параметр/ значение в составе URL в сообщении | id: параметр/ значение в составе URL в строке запроса | JSONx-представление документа (текст/XML) |
| insert |
id (уникальный) doc (документ JSON) | id:
параметр/ значение в составе URL в строке запроса doc: параметр/ значение в составе URL в строке запроса | id:
параметр/ значение в составе URL в сообщении doc: параметр/ значение в составе URL в сообщении | id:
параметр/ значение в составе URL в строке запроса doc: содержание сообщения POST | Число обновлений (неформатированный текст) |
| update |
id doc (документ JSON) | id:
параметр/ значение в составе URL в строке запроса doc: параметр/ значение в составе URL в строке запроса | id:
параметр/ значение в составе URL в сообщении doc: параметр/ значение в составе URL в сообщении | id:
параметр/ значение в составе URL в строке запроса doc: содержание сообщения POST | Число обновлений (неформатированный текст) |
| delete | id | id: параметр/ значение в составе URL в строке запроса | id: параметр/ значение в составе URL в сообщении | id: параметр/ значение в составе URL в строке запроса | Число обновлений (неформатированный текст) |
| runXMLQuery |
query (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 Services | JSONUniversal Services.zip | 1927 КБ | HTTP |
Научиться
- Оригинал статьи (EN).
- Universal Services for pureXML using Data Web Services (Susan Malaika and Christian Pichler, developerWorks, август 2008 г.): дополнительная информация о Universal Services для pureXML.
- Создание приложения на базе pureXML и JSON. Часть 1:
Хранение и извлечение JSON с помощью технологии pureXML в DB2 (Нуну Жоб, Сьюзен Малайка и Михаэл Шенкер; developerWorks, октябрь 2009 г.):
прочтите первую статью этого цикла и начните пользоваться преимуществами постоянных объектов JSON, которые сохраняют состояние между сеансами.
Хранение, управление и обращение к JSON с помощью DB2 pureXML и простого отображения JSON на XML
(первая часть цикла из трех статей).
- Создание приложения на базе pureXML и JSON. Часть 3: Создание гаджетов OpenSocial для pureXML (Хан Нгуен, Энди Б. Смит и Марк Д. Вейцель; developerWorks, ноябрь 2009 г.).
Определение, развертывание и тестирование гаджетов OpenSocial для взаимодействия с JSON Universal Services
(третья часть цикла из трех статей).
- IBM Data Studio:
Get Started with Data Web Services (Michael L. Pauser, developerWorks, ноябрь 2007 г.):
очень подробное и простое введение в разработку Data Web Service (EN).
- Отраслевые форматы и сервисы pureXML:
загрузите массу разнообразных примеров бесплатно!
Каждый пример иллюстрирует, как работать с отраслевыми форматами на базе XML и pureXML.
На этих примерах показано, как зарегистрировать XML-схему, как выполнить проверку XML-документов, как обращаться к XML-данным с помощью XQuery или SQL/XML и многое другое.
- Data Web Services:
Build Web Services the new way to access IBM database servers (Vijay Bommireddipalli, developerWorks, декабрь 2007 г.):
создание и настройка Web-сервиса данных с полезной теоретической базой по Data Web Services, включая обзор архитектуры.
В статье рассматриваются различные аспекты Data Web Services, такие как безопасность (EN).
- Using industry standard data formats with WebSphere ESB and DB2 Version 9 pureXML (Mohab El-Hilaly, Andre Tost, and Alaa Youssef; developerWorks, июнь 2007 г.):
сценарий, демонстрирующий, как WebSphere Enterprise Service Bus и DB2 9 pureXML может помочь фармацевтической компании выполнить правовые нормы по предоставлению стандартизированных данных о своих продуктах (EN).
- Сертификация IBM по XML:
как стать сертифицированным разработчиком IBM по XML и связанным с ним технологиям.
Получить продукты и технологии
- DB2 Express-C:
загрузите эту бесплатную общедоступную редакцию сервера данных DB2.
Обсудить

Фейтон (Тони) Авдиу [Faton (Tony) Avdiu] – специалист по технической реализации DB2 (Co-Op), окончивший курс вычислительной техники. Учится на магистра информационных систем в Университете Пейс в Нью-Йорке. В настоящее время работает с технологиями IBM для хранения XML в DB2.
Сюзан Малайка (Susan Malaika) работает старшим инженером в отделе IBM Information Management Group (часть IBM Software Group). Специализируется на XML, Web и базах данных. Разработала стандарты, поддерживающие данные для сетевых сред на Global Grid Forum. Являясь разработчиком программных продуктов IBM, работает также в качестве интернет-специалиста, аналитика данных и разработчика приложений. Соавтор книги о Web и опубликованных статей по обработке транзакций и XML. Член IBM Academy of Technology.

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