Главная » Java, Web, XML » Система описания и обнаружения UDDI

0

Система описания, обнаружения и интеграции UDDI создана фирмами IBM (http://www-3.ibm.com/services/uddi/) и Microsoft (http://uddi.microsoft.com/).

Сейчас она развивается группой крупных компаний. На официальном сайте сообщества UDDI    приведен список около трехсот компа

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

Реестр UDDI (UDDI Business Registry) состоит из множества узлов (nodes), размещенных в Интернете. Они хранят информацию о Web-службах, доступную на всех узлах, образующих распределенный UDDI-реестр. Клиент "видит" UDDI-реестр как единое целое, совершенно не ощущая того, что он размещен на нескольких машинах. Конечно, сами узлы организованы как Web-службы, а реестр UDDI — как слабо связанное распределенное приложение.

Многие крупные компании организовали и содержат свои UDDI-реестры, например, реестр фирмы IBM расположен по адресу 3.ibm.com/services/uddi/v2beta/protect/registry.html, адрес реестра компании Hewlett Packard https://uddi.hp.com/uddi/index.jsp, реестр корпорации Microsoft находится на сайте https://uddi.rte.microsoft.com/register.aspx. Эти UDDI-реестры связаны между собой и постоянно обмениваются информацией. Кроме того, это открытые (public) реестры. Любой желающий может зарегистрировать в них свою Web-службу или отыскать нужную Web-услугу. Фирмы могут организовать и закрытые частные (private) реестры, доступные только зарегистрированным участникам. Список       можно

посмотреть на сайте проекта UDDI.

Реестр UDDI разбивает хранящуюся в нем информацию на несколько групп.

Четыре основные группы состоят из следующих элементов.

?         Бизнес-информация — XML-элемент <businessEntity> — описание фирмы-поставщика Web-услуг: ее ключ UUID (Unique Universal Identifier), уникальный в пределах реестра и описанный атрибутом businessKey, название фирмы — вложенный элемент <name>, краткое описание сферы ее деятельности, типы предоставляемых услуг, контактная информация, ссылки URL. Эта информация предназначена для всех, кто хочет воспользоваться услугами фирмы.

?         Бизнес-услуги — элемент <businessServices>, вложенный в элемент <businessEntity> – список услуг, оказываемых фирмой. Каждая услуга описывается вложенным элементом <businessService>. В описание входит ключ UUID каждой услуги, описанный атрибутом serviceKey, имя услуги — вложенный элемент                                                   ее краткое описание и ссылки на подробную информацию. Услуги могут быть любыми, не обязательно Web-услугами.

?        Указатели на услуги — элемент <bindingTemplates>, вложенный в элемент <businessservice> – способы получения каждой услуги. Они могут быть прямыми, например, URL-адрес Web-службы, или косвенными, например, описание WSDL или IDL. Каждый способ описывается элементом   Его атрибут bindingKey определяет уникальный ключ UUID указателя. Элемент <bindingTemplate> содержит ссылку на соответствующий элемент

?         Модель услуги — элемент <tModeI> (technical Model) — подробное формальное описание каждой услуги. Оно используется программным обеспечением узла. Обычно это отдельный документ XML.

В реестре есть еще несколько дополнительных элементов.

?        Утверждение — элемент <publisherAssertion> — описание установленных ранее отношений между фирмами (утверждение peer-peer) или фирмой и ее подразделениями (утверждение parent-child). Фирма утверждает, что она тесно связана с перечисляемыми фирмами или что это — ее подразделения. Третий вид утверждения — identity — отношение между одинаковыми фирмами — это фактически псевдоним. Отношение входит в силу, когда его утвердят оба участника. Это отдельный документ, использующий элементы <businessEntity> обеих фирм.

?         Подписка — элемент <subscription> — список фирм и сведений, которые надо послать перечисленным фирмам при каких-либо изменениях в деятельности фирмы.

Итак, схема одного из документов XML, хранящихся в UDDI-реестре, такова: <businessEntity businessKey="Krao4 UUID"> <businessServices>

<businessService serviceKey="Krao4 UUID"> <bindingTemplates>

<bindingTemplate bindingKey="KJiio4 UUID">

< ! — Описание указателя –> </bindingTemplate>

< ! — Описания других указателей —> </bindingTemplates> </businessService> < ! — Описания других услуг —> </businessServices> </businessEntity>

Клиент обращается к UDDI-реестру для того, чтобы зарегистрировать свою Web-службу, изменить ее, или для того, чтобы отыскать нужную Web- услугу. Реестр предоставляет необходимый для этого интерфейс. Регистрация и последующие изменения выполняются методами save_xxx (), поиск Web-службы и получение услуги — методами f ind_xxx () и get_xxx {). Все эти методы описаны в спецификации UDDI.

Есть уже много реализаций интерфейса UDDI на различных языках. В технологии Java наиболее популярен пакет классов UDDI4J (UDDI for Java), разработанный фирмой IBM (http://www.uddi4j.org/). Классы, входящие в этот пакет, обеспечивают выполнение всех действий клиента в UDDI- реестре.

UDDI-интерфейс реализован в пакете UDDI4J классом UDDlProxy. Точнее говоря, этот класс служит посредником (proxy), обращающимся к соответствующим методам интерфейса UDDI. Методы этого класса возвращают объекты классов, предоставляющих дополнительную информацию. Мы рассмотрим подробно пакет UDDI4J в главе 5.

В листинге 2.7 показано, как можно зарегистрировать нашу метеослужбу в том или ином UDDI-реестре, а потом найти ее.

Листинг 2.7. Регистрация метеослужбы в UDDI-реестре

import com.ibm.uddi.* ;

import com.ibm.uddi.datatype.business.*;

import import import import import

public class SaveMeteoService{

public static void main (String[] args){

SaveMeteoService app = new SaveMeteoService(); UDDlProxy proxy = new UDDlProxy();

try{

// Выбираем UDDI-реестр:

// Тестовый реестр IBM proxy.setInquiryURL("http://www-3.ibm.com/services/" +

"uddi/testregistry/inquiryapi");

proxy.setPublishURL("https://www-3.ibm.com/services/" + "uddi/testregistry/protect/publishapi");

// Официальный реестр IBM // proxy.setlnquiryURL("http://www-3.ibm.com/services/" +

/ /     "uddi/inquiryapi");

// proxy.setPublishURL("https://www-3.ibm.com/services/" +

//

// Тестовый реестр Microsoft

//

//      "http://test.uddi.microsoft.com/inquire");

//

//

// Официальный реестр Microsoft

// //

// Реестр Hewlett Packard

// //

// Отладочный локальный реестр из пакета WSTK

// // // //

// Заходим на сайт UDDI-реестра. AuthToken token = proxy.get_authToken(

"userid", "password");

System.out.println(

"Регистрационный код: " + token.getAuthlnfoStringO);

System.out.println("Регистрируем Meteo Service") ;

Vector entities = new vector () ;

// Создаем элемент <businessEntity>. // Первый аргумент — ТОЮ — пока неизвестен. BusinessEntity be = new

entities.addElement(be);

// Регистрируем Web-службу BusinessDetail bd =

proxy.save_business(token.getAuthlnfoString(), entities) ;

// Для проверки получаем UUID. Vector businessEntities =

BusinessEntity returnedBusinessEntity =

(BusinessEntity)(businessEntities.elementAt(0));

System.out.println("Получили UUID: " +

returnedBusinessEntity.getBusinessKey());

System, out. println ("Список Web-служб: " ) ;

// Получаем список зарегистрированных // Web-служб, чьи имена начинаются с буквы "М". BusinessList Ы = proxy.find_business("М", null, 0) ;

Vector businesslnfoVector =

bl.getBusinessInfos().getBusinessInfoVector();

for (int i = 0; i < businesslnfoVector.size(); i++){

Businesslnfo businesslnfo =

(Businesslnfo)businesslnfoVector.elementAt(i);

System.out.println(businesslnfo.getNameStringO);

}

}catch(UDDIException e) {

DispositionReport dr = e. getDispositionReport () ;

if (dr != null) {

System.out.println(

"UDDIException faultCode:" + e.getFaultCodeO +

"\n operator:" + dr.getOperator() +

"\n generic:" + dr.getGeneric() +

"\n errno: " + dr. getErrno () +

"\n errCode:" + dr.getErrCode () +

"\n errlnfoText: " + dr. getErrlnfoText () ) ;

}

e.printStackTrace() ;

}catch(Exception e) {

System.err.println ("From proxy: " + e) ;

}

}

}

Литература:

Хабибуллин И. Ш. Разработка Web-служб средствами Java. — СПб.: БХВ-Петербург, 2003. — 400 с: ил.

По теме:

  • Комментарии