Работа с Universal Services for pureXML посредством Data Web Services

Простое решение по организации доступа к столбцу pureXML посредством операций Web-сервисов

Universal Services (универсальные сервисы) - это набор операций с базами данных, включая вставку, обновление, удаление и запросы, отображаемых как операции Web-сервисов. Эти сервисы позволяют быстро настроить операции Web-сервисов, например, для макетирования, если есть столбец pureXML™ в базе данных DB2®. Эти сервисы позволяют пользователям запрашивать и изменять XML-данные, хранящиеся в столбце pureXML, через REST или SOAP, что может служить основой для дальнейшей разработки различных приложений, таких как формы или SOA-приложения. Данная статья поможет вам начать настраивать, тестировать и изменять Universal Services. Более подробная информация приведена в пошаговых инструкциях в файле readme, сопровождающем загрузочные файлы Universal Services.

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

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



Кристиан Пичлер, младший научный сотрудник, WSO2 Inc

Кристиан Пичлер (Christian Pichler) является младшим научным сотрудником в Research Studios Austria, где работает над различными проектами, связанными с eGovernment и eBusiness. Имеет степень магистра по вычислительной технике и кандидата на степень доктора философии по вычислительной технике в Technical University of Vienna (Австрия) по теме Inter-Organisational Systems.



29.09.2010

Введение

Universal Services представляют собой простой, но фиксированный набор операций с базами данных, позволяющих запрашивать и изменять XML-данные, хранящиеся в столбце pureXML базы данных DB2. К этим операциям относятся вставка, обновление, удаление и запрос данных, отображаемые в виде Web-сервисов через механизм Data Web Service.

Data Web Services позволяют отображать операции с базой данных, такие как вставка или обновление, в виде Web-сервисов без кодирования. Data Web Services позволяют также отображать в виде Web-сервисов хранимые процедуры и определяемые пользователем функции. Разработка Data Web Services уже рассматривалась в других статьях и учебных руководствах на developerWorks. Их список приводится в разделе "Ресурсы".

На рисунке 1 представлен обзор архитектуры Universal Services.

Рисунок 1. Обзор архитектуры Universal Services
Рисунок 1. Обзор архитектуры Universal Services

Назначением Universal Services является реализация запросов и изменений любого столбца pureXML в базе данных DB2 через операции Web-сервисов, которые делаются доступными посредством простых действий по настройке и развертыванию. Более подробная информация по этим действиям приведена в файле readme загрузочного пакета Universal Services, в котором даны полные пошаговые инструкции.

В данной статье рассматривается настройка, развертывание и изменение Universal Services на примере базы данных. Поэтому статья разбита на три следующих раздела:

  • Настройка примера базы данных. Описывается настройка примера базы данных, которая будет использоваться в данной статье для демонстрации процесса настройки Universal Services.
  • Установка Universal Services. Рассматривается процесс настройки и развертывания Universal Services.
  • Изменение Universal Services. Рассматривается изменение Universal Services для соответствия вашей среде.

Подробная информация о том, где найти необходимые загрузочные файлы для каждого шага, приведена в соответствующих разделах данной статьи.

Предварительные требования

Загрузите DB2 Express-C бесплатно

Перейдите по данной ссылке, загрузите и используйте бесплатно полнофункциональный реляционный сервер данных с поддержкой XML.

Для установки и запуска Universal Services необходимо иметь установленные DB2 9.x, Java Runtime Environment 1.5.0 и Web-сервер (например, WebSphere® Application Server V6.x или Apache Tomcat V6.x). Отметим, что Java Runtime является частью установки DB2.

Вам нужно также получить два разных загрузочных файла: пакет IRS e-File 1120, являющийся частью интерактивного демонстрационного набора отраслевых форматов и сервисов (Industry Formats and Services), и сам пакет универсальных сервисов (Universal Services). Ссылки на эти загрузочные файлы приведены в разделе "Загрузка". Эти файлы необходимы для выполнения действий, рассматриваемых в данной статье.


Настройка примера базы данных

Universal Services можно настроить для любого столбца pureXML базы данных DB2. В следующем разделе рассказывается, как установить пример базы данных, которая будет использоваться на протяжении всей статьи для демонстрации процесса настройки и установки этих сервисов. Создаваемый здесь пример базы данных основан на бесплатных и общедоступных загрузочных файлах, являющихся частью интерактивных демонстрационных материалов DB2 pureXML, называемых Industry Formats and Services with pureXML.

Каждый из этих загрузочных файлов содержит набор сценариев, позволяющих пользователям легко настроить базу данных, предназначенную для конкретной отрасли, например для финансовых учреждений или организаций здравоохранения. Сценарий, использующийся в данной статье, создает пример базы данных и таблицу, содержащую столбец pureXML, а затем загружает данные примера в базу. Загрузочные файлы содержат и другие сценарии, которые могут представлять интерес (например, сценарии для регистрации XML-схемы, для проверки соответствия XML-документов зарегистрированным XML-схемам и для запроса XML-данных с использованием XQuery или SQL/XML), но они не рассматриваются в данной статье. Дополнительная информация по загрузочным файлам, предназначенным для конкретной отрасли, приведена в разделе "Ресурсы".

Создание примера базы данных

Данная статья основана на загрузочном пакете IRS e-File 1120, который является электронной версией формы налоговой декларации США IRS Tax Form 1120. Здесь предполагается, что вы загрузили и разархивировали пакет IRS e-File 1120 в локальный временный рабочий каталог. В данной статье используется каталог c:\temp\irs1120.

Рисунок 2. Содержимое загрузочного пакета IRS e-File 1120, разархивированного в локальный временный рабочий каталог
Рисунок 2. Содержимое загрузочного пакета IRS e-File 1120, разархивированное в локальный временный рабочий каталог

Сценарий, выполняющий настройку примера базы данных на вашей системе, называется "start.bat" (для пользователей Linux: "start.sh"). Чтобы выполнить этот сценарий, откройте окно процессора командной строки DB и перейдите в текущий рабочий каталог, содержащий загруженные файлы. Данный каталог содержит также файл start.bat. Выполните этот сценарий start.bat.

После завершения сценария вы должны увидеть сообщение, указывающее, что настройка базы данных завершена. Если в сообщении говорится что-то другое, просмотрите файл readme, включенный в загрузочный пакет IRS e-File 1120. Если все прошло удачно, на вашей системе установится пример базы данных DB2, содержащий столбец pureXML и данные, загруженные в столбец pureXML. Если говорить конкретнее, таблица базы данных, содержащей столбец pureXML, имеет следующую структуру:

Таблица 1. Структура таблицы примера IRS1120
Название столбцаТип столбцаОписание
IDINTEGERПредставляет собой уникальный идентификатор для каждой записи, вставляемой в таблицу.
COMMENTVARCHAR(1000)Используется для хранения комментария к каждой записи таблицы.
DOCUMENTXMLТретий столбец этой таблицы имеет тип XML и используется для хранения XML-данных. Этими данными, в частности, являются все XML-документы IRS e-File 1120 XML.

В следующих разделах мы на основе примера базы данных покажем, как настраивать и устанавливать Universal Services для конкретного столбца pureXML.

Установка Universal Services

В данном разделе предполагается, что вы загрузили и разархивировали пакет Universal Services в локальный временный рабочий каталог. В данной статье используется каталог c:\temp\UniversalServices.

Рисунок 3. Содержимое загрузочного пакета Universal Services, разархивированное в локальный временный рабочий каталог
Рисунок 3. Содержимое загрузочного пакета Universal Services, разархивированного в локальный временный рабочий каталог

Теперь, имея необходимые файлы и сценарии на вашей системе, можно приступить к процессу установки Universal Services, который в общем случае состоит из трех шагов. Эти шаги, рассмотренные более подробно ниже, демонстрируют, как:

  • Настраивать Universal Services под вашу локальную систему.
  • Развертывать Universal Services на сервере приложений.
  • Тестировать Universal Services при помощи встроенной тестовой страницы.

Настройка Universal Services

Настройка Universal Services осуществляется посредством сценария configure.bat, содержащегося в загрузочном пакете (для пользователей Linux - "configure.sh"). Однако перед выполнением сценария его необходимо настроить под вашу локальную систему, как показано в таблице 2.

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

Отметим, что три параметра в таблице 2 - DBPRIMARY, DBCOMMENT, DBXML - аналогичны параметрам таблицы 1.

Измените конфигурационный файл Universal Services так, чтобы он соответствовал информации, приведенной в таблице 2. Например, set DBNAME=SAMPLEDB нужно изменить на set DBNAME=IRS1120. На рисунке 4 показан конфигурационный файл после изменения настроек в соответствии с таблицей 2.

Рисунок 4. Изменение конфигурационного файла configure.bat
Рисунок 4. Изменение конфигурационного файла configure.bat

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

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

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

Для настройки источника данных выполните стандартный процесс конфигурирования сервера приложений. Единственным требованием, которое необходимо учесть во время настройки, является название источника данных, которое должно соответствовать следующему шаблону: jdbc/[название базы данных]. Названием источника данных для примера, использующегося в данной статье, является jdbc/irs1120. Если для настройки источника данных вам нужна дополнительная информация, обратитесь к справочному руководству по вашему серверу приложений либо прочтите файл readme, включенный в загрузочный пакет Universal Services.

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

Созданные WAR-файлы можно найти в подкаталоге war, расположенном в рабочем каталоге Universal Services - c:\temp\UniversalServices. В частности, каталог war содержит два подкаталога: tomcat и was. Каталог tomcat содержит WAR-файл, устанавливаемый на Apache Tomcat V6.x, а каталог was содержит WAR-файл, устанавливаемый на WebSphere Application Server V6.x. Для установки WAR-файла на вашем сервере приложений выполните стандартную процедуру. Если вам нужна дополнительная информация, обратитесь к справочному руководству по вашему серверу приложений либо прочтите файл readme, включенный в загрузочный пакет Universal Services.

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

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

Для проверки успешности установки и настройки Universal Services на локальной системе необходимо протестировать сервисы. Самым простым способом сделать это является использование простой HTML-страницы, уже доступной на сервере приложений после развертывания Universal Services.

К тестовой странице Universal Services можно обратиться путем перехода в браузере по адресу URL http://localhost:8080/UniversalServices/testServices.html. Отметим, что в зависимости от настроек локальной системы имя хоста или порт могут отличаться от указанных.

Рисунок 5. Снимок экрана встроенной тестовой страницы
Рисунок 5. Снимок экрана встроенной тестовой страницы

Эта простая тестовая страница позволяет вставлять, обновлять, удалять и запрашивать XML-данные в базе данных через Universal Services. Web-сервисы активизируются при помощи кнопок, размещенных на тестовой странице. На рисунке 6 показан ответ Web-сервиса. Была активизирована операция Web-сервиса getPrimaryKeys нажатием кнопки, размещенной на тестовой странице.

Рисунок 6. Ответ после активизации операции Web-сервиса getPrimaryKeys
Рисунок 6. Ответ после активизации операции Web-сервиса getPrimaryKeys

Изменение Universal Services

Если необходимо изменить Universal Services (например, для ввода нового параметра), можно импортировать проект Universal Services Data Development Project, приведенный в загрузочном файле Universal Services Data Project, в Data Studio. В следующих разделах рассказывается, как импортировать проект в Data Studio и как настроить его (например, настроить соединение с базой данных или настроить названия схем базы данных). Для выполнения действий, приведенных ниже, запустите Data Studio.

Импорт Universal Services Data Development Project

После запуска Data Studio щелкните правой кнопкой мыши на пустой области внутри Data Project Explorer. Появится подменю. В этом подменю выберите пункт Import, как показано на рисунке 7.

Рисунок 7. Выбор опции Import для загрузки проекта Universal Services Data Development Project
Рисунок 7. Выбор опции Import для загрузки проекта Universal Services Data Development Project

В отдельном окне откроется мастер импорта Import Wizard, как показано на рисунке 8. На первом шаге выберите вариант Existing Projects into Workspace, который распложен в группе "General". Для продолжения нажмите кнопку Next.

Рисунок 8. Import Wizard - выбор источника импорта
Рисунок 8. Import Wizard - выбор источника импорта

Следующий шаг - идентификация архивного файла, содержащего проект Universal Services Data Development Project. Для этого выберите Select archive file. Затем нажмите кнопку Browse и выберите архивный файл. Архивный файл называется universal_services_data_studio_project.zip и располагается в локальном временном рабочем каталоге, в который вы разархивировали пакет Universal Services. В данной статье таким каталогом является c:\temp\UniversalServices.

После выбора архивного файла мастер Import Wizard выводит список всех доступных в архиве проектов, как показано на рисунке 9. Поскольку архивный файл, поставляемый в загрузочном пакете, содержит только Data Development Project for the Universal Services, в разделе Projects перечисляется только один проект. Отметим, что если в рабочей области уже имеется проект с названием ("services"), аналогичным Universal Services, мастер Import Wizard не отобразит проект в разделе Projects. То есть мастер Import Wizard не позволит вам импортировать проект Universal Services Data Development.

Рисунок 9. Import Wizard - выбор архивного файла
Рисунок 9. Import Wizard - выбор архивного файла

После выбора архивного файла и проектов нажмите кнопку Finish для завершения процедуры импорта. После этого импортированный проект Universal Services Data Development появится в Data Project Explorer, как показано на рисунке 10.

Рисунок 10. Импортированный проект Data Development Project в Data Project Explorer
Рисунок 10. Импортированный проект Data Development Project в Data Project Explorer

Настройка соединения с базой данных

После импорта проекта Universal Services Data Development Project в рабочую область необходимо настроить соединение с базой данных. На рисунке 10 показан проект, использующий соединение с базой данных, называющееся "Universal Services Database Connection". Кроме того, можно заметить, что соединение ссылается на базу данных SAMPLEDB, доступную на локальном хосте (localhost), порт 50000. Для настройки параметров соединения с базой данных под вашу локальную конфигурацию щелкните правой кнопкой мыши на соединении Universal Services Database Connection в Database Explorer и выберите Edit Connection, как показано на рисунке 11.

Рисунок 11. Доступ к параметрам соединения с базой данных через Database Explorer
Рисунок 11. Доступ к параметрам соединения с базой данных через Database Explorer

Откроется отдельное окно, позволяющее настраивать подробности соединения с базой данных, такие как название базы данных, имя хоста, номер порта, информация о пользователе и много других параметров, как показано на рисунке 12. Отметим, что можно также сразу протестировать настройку, нажав кнопку Test Connection.

Для пользователей Linux. При импорте проекта в Data Development Project в Data Studio на системе Linux необходимо настроить параметр Class location:, определяющий местоположение драйвера базы данных DB2. Драйвер базы данных расположен в подкаталоге java каталога установки DB2 (например, /home/db2inst1/sqllib/java).

Рисунок 12. Параметры соединения с базой данных
Рисунок 12. Параметры соединения с базой данных

Настройка названия схемы базы данных

Все SQL-операции, отображаемые в виде операций Web-сервисов и предварительно импортированные в рабочую область, используют полностью определенные SQL-выражения. Это означает, что, например, для указания названий таблиц используется название схемы базы данных (например, SELECT ID FROM IRS1120ADMIN.IRS1120).

Альтернативным подходом является отказ от кодирования названий схемы базы данных в SQL-выражениях и использование названия схемы по умолчанию. Одним из способов настройки названия схемы базы данных является изменение свойств проекта Universal Services Data Development Project. Для этого щелкните правой кнопкой мыши на проекте Universal Services Data Development Project и выберите Properties (как показано на рисунке 13).

Рисунок 13. Доступ к свойствам проекта Data Development Project
Рисунок 13. Доступ к свойствам проекта Data Development Project

Откроется окно Properties для проекта Universal Services Data Development Project. После выбора Development в меню, расположенном в левой стороне окна, можно настроить название схемы базы данных, использующееся в SQL-выражениях.

Рисунок 14. Настройка названия схемы базы данных
Рисунок 14. Настройка названия схемы базы данных

Дополнительные сведения

После настройки импортированного проекта под конфигурацию локальной системы можно изменить и развернуть измененные сервисы Universal Services через Data Studio. Отметим, что одна операция, а именно runxqueryXML, требует регистрации определенной пользователем функции. Для этого в Data Studio Development Project предоставляется SQL-сценарий "createXQueryXMLUDF.sql".

Ссылки на дополнительную информацию о создании и отображении новых операций с использованием Data Studio можно найти в разделе "Ресурсы" данной статьи.

Дополнительные параметры

При настройке операций с базой данных для подключения входных и выходных параметров используются маркеры параметров (parameter markers). Universal Services поддерживают два типа маркеров параметров. Первый вариант - использование маркера параметров "?", при котором ассоциированное с параметрами имя по умолчанию генерируется автоматически, например "p1" или "p2". Второй вариант - использование маркера параметров ":", при котором параметр идентифицирует ассоциированная строка символов, например ":id".

Эти две альтернативы иллюстрирует приведенный далее пример. Пример основан на операции Universal Services с базой данных, удаляющей запись из таблицы. Обе операции, представленные ниже, имеют одинаковое предназначение, но используют различные типы маркеров параметров:

  • Вариант 1: DELETE FROM DB2ADMIN.SAMPLETABLE WHERE ID = ?
  • Вариант 2: DELETE FROM DB2ADMIN.SAMPLETABLE WHERE ID = :id

На основании операций с базой данных генерируется WSDL-файл (Web Service Description Language), например, через Data Studio. WSDL-файл описывает операции Web-сервисов, включая их параметры. Сгенерированный WSDL-файл зависит от типа используемых в операциях с базой данных маркеров параметров. Для варианта 1 названия параметров в операциях Web-сервисов генерируются автоматически, например, "p1" или "p2" (см. листинг 1).

Листинг 1. Фрагмент WSDL-файла, сгенерированного при использовании варианта 1
...
<element name="deleteDocument">
  <complexType>
    <sequence>
      <element name="p1" nillable="true" type="xsd:string"/>
    </sequence>
  </complexType>
</element>
<element name="deleteDocumentResponse">
  <complexType>
    <sequence>
      <element name="updateCount" type="xsd:int"/>
    </sequence>
  </complexType>
</element>
...

В варианте 2 названия параметров в операциях Web-сервиса используют те же символьные строки, которые указываются в операциях с базой данных, например, "id" или "document" (см. листинг 2).

Листинг 2. Фрагмент WSDL-файла, сгенерированного при использовании варианта 2
...
<element name="deleteDocument">
  <complexType>
    <sequence>
      <element name="id" nillable="true" type="xsd:string"/>
    </sequence>
  </complexType>
</element>
<element name="deleteDocumentResponse">
  <complexType>
    <sequence>
      <element name="updateCount" type="xsd:int"/>
    </sequence>
  </complexType>
</element>
...

Пакет, выбранный в качестве основы для данной статьи, использует вариант 1. Но загрузочный пакет, сопровождающий статью, содержит также еще один пакет Universal Services и проект Data Development, которые используют вариант 2. Если вы предпочитаете работать с вариантом 2, найдите архивный файл universal_services_alternative_2.zip, как показано на рисунке 15, внутри загрузочного пакета, сопровождающего данную статью. Затем вы можете использовать содержимое архивного файла в качестве основы для настройки, развертывания, тестирования и изменения Universal Services.

Рисунок 15. Содержимое загрузочного пакета Universal Services, разархивированного в локальный временный рабочий каталог
Рисунок 15. Содержимое загрузочного пакета Universal Services, разархивированного в локальный временный рабочий каталог

Заключение и перспективы

В данной статье показано, как можно просто и естественно отобразить столбцы pureXML базы данных DB2 через операции Web-сервисов с использованием сценариев без запуска отдельной инструментальной программы. Установленные сервисы Universal Services можно использовать для создания своих собственных прототипов или приложений.

В трех приведенных ниже примерах в качестве основы уже используются Universal Services:

Надеемся, что Universal Services и информация, представленная в данной статье, помогут вам быстро приступить к разработке своего собственного проекта DB2 pureXML.


Загрузка

ОписаниеИмяРазмер
Пакет Universal ServicesUniversalServices.zip8 МБ

Ресурсы

Научиться

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

  • IBM Data Studio. Загрузите бесплатно среду разработки для разработки Data Web Services.
  • DB2 Express-C. Загрузите бесплатную версию DB2, в которую включена базовая функциональность, аналогичная имеющейся в других серверах данных, например технология pureXML. DB2 Express-C бесплатна для разработки, развертывания и распространения.(EN)
  • Используйте в своем следующем проекте разработки ознакомительное программное обеспечение IBM, которое можно загрузить непосредственно с developerWorks.(EN)

Обсудить

Другие файлы для загрузки

  • Образец кода: IRS e-File 1120 (Доступен как часть интерактивной демонстрации Industry Formats and Services with pureXML - перейдите по ссылке Download.)

Комментарии

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=Information Management, SOA и web-сервисы, XML, Технология Java
ArticleID=548506
ArticleTitle=Работа с Universal Services for pureXML посредством Data Web Services
publish-date=09292010