 | Уровень сложности: средний Ин Чунь Го, инженер-программист, IBM Навьен Сачдева, инженер-программист консультант, IBM, Software Group
25.05.2009 В предыдущей статье этой серии на достаточно высоком уровне описывалось, как IBM® WebSphere® Service Registry and Repository и IBM WebSphere Process Server могут применяться для управления политиками использования сервисов. В данной статье описываются детали реализации - она показывает, как можно настроить WebSphere® Service Registry and Repository для поддержки управления политиками использования сервисов, реализовать процесс регистрации подписчика с использованием WebSphere Process Server и интегрировать его с WebSphere Service Registry and Repository, используя SOAP-интерфейс.
Обзор
WebSphere Service Registry and Repository - это реестр и репозиторий для метаданных сервисов. Они являются центральным узлом для поиска и управления полученными из разных источников метаданными сервисов. Примером метаданных сервиса может служить оговоренная между провайдером сервиса (SP) и подписчиком сервиса (SS) стоимость и время отклика. В WebSphere Service Registry and Repository присутствует ряд аспектов, которые могут быть настроены для SP. Например, можно определить шаблон WebSphere Service Registry and Repository с использованием XML-схемы для представления контрактной информации, специфичной для SP. Так же можно определить классификационные группы, используя Web Ontology Language (OWL) для соотношения различных сущностей WebSphere Service Registry and Repository. WebSphere Service Registry and Repository также предлагает исчерпывающие возможности настройки интерфейса. Перспективы, соответствующие роли пользователя, могут быть определены в Web-интерфейсе, для того, чтобы обеспечивать индивидуальные представления метаданных сервисов. WebSphere Service Registry и Repository обеспечивает возможность добавлять плагины проверки и извещения для обеспечения индивидуальных реакций на изменение содержимого репозитория.
 | |
WebSphere Process Server является контейнером для потоков задач (workflows), определенных на языке Business Process Execution Language (BPEL). Бизнес-процесс, описанный на BPEL, может быть экспортирован как Web-сервис и быть доступным из других приложений; примером может служить WebSphere Service Registry and Repository, использующий SOAP-интерфейс. Вы можете интегрировать WebSphere Process Server с WebSphere Service Registry and Repository, с тем, чтобы выполнять потоки задач при изменении состояния метаданных в WebSphere Service Registry and Repository. Как показано на рисунке 1, BPEL-процесс может быть вызван со стороны WebSphere Service Registry and Repository через определенный пользователем плагин извещений в WebSphere Service Registry and Repository. В свою очередь, BPEL-процесс может создавать или менять информацию в WebSphere Service Registry and Repository через его SOAP API.
Рисунок 1. Точки интеграции WebSphere Process Server с WebSphere Service Registry and Repository
Эта статья показывает, как настроить WebSphere Service Registry and Repository и интегрировать его с WebSphere Process Server для реализации описанного в предыдущей статье процесса регистрации подписчика.
Настройка WebSphere Service Registry and Repository
Вы реализуете описанные ниже настройки WebSphere Service Registry and Repository путем добавления шаблонов, классификаторов, ролей и перспектив в WebSphere Service Registry and Repository. Детали настройки описываются ниже.
Настройка шаблона
В первую очередь следует определить три комплексных типа в файле XML Schema Definition (XSD), как показано в листинге 1, для реализации сценария, описанного в предыдущей статье этой серии:
- Тип
Service описывает сервис (например, BatchACHService: Batch Automatic check Clearing House - групповая (пакетная) автоматическая проверка в клиринговой компании [клиринг - система взаимных расчетов и проверок между банками - прим. перев.])
-
Batch ACH Service Subscribe Endpoint (выход сервиса Batch ACH для подписки) представляет собой набор атрибутов, связанных с различными выходами (endpoints) вышеописанного сервиса Batch ACH (например, highVolumeBatchACHServiceEP и lowVolumeBatchACHServiceEP)
-
Batch ACH Service Subscribe Contract (соглашение о взаимодействии при подписке на сервис Batch ACH) представляет собой соглашение о взаимодействии между SP (провайдером сервиса) и подписчиком этого сервиса (например, JamesHuBatchACHServiceContract).
Листинг 1. Комплексные типы в XSD, используемые в процессе регистрации подписчика
<?xml version="1.0" encoding="UTF-8"?>
<xsd:schema
targetNamespace="http://f49.j2b.ibm.com/1/0/template"
xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:sdo="commonj.sdo"
xmlns:sdoxml="commonj.sdo/xml"
xmlns:tns="http://www.ibm.com/xmlns/prod/serviceregistry/
6/0/governance/SampleTaxonomy"
xmlns:srsdo="http://www.ibm.com/xmlns/prod/serviceregistry/6/0/sdo">
<xsd:complexType name="Service">
<xsd:attribute name="businessOwner" type="xsd:string" />
<xsd:attribute name="availableEndpoints" type="xsd:IDREFS" />
<xsd:attribute name="providedInterface" type="xsd:IDREFS" />
<xsd:attribute name="contractTemplate" type="xsd:IDREFS"/>
<xsd:attribute name="serviceDependencies" type="xsd:IDREFS" />
</xsd:complexType>
<xsd:complexType name="Batch ACH Service Subscribe Endpoint">
<xsd:attribute name="executionCost" type="xsd:string" />
<xsd:attribute name="responseTime" type="xsd:string" />
<xsd:attribute name="maxChecksPerBatch" type="xsd:string" />
<xsd:attribute name="minChecksPerBatch" type="xsd:string" />
<xsd:attribute name="definingWSDLPort" type="xsd:IDREFS" />
</xsd:complexType>
<xsd:complexType name="Batch ACH Service Subscribe Contract">
<xsd:attribute name="responsetime" type="xsd:string" />
<xsd:attribute name="cost" type="xsd:string" />
<xsd:attribute name="email" type="xsd:string" />
<xsd:attribute name="servicename" type="xsd:string" />
<xsd:attribute name="maxChecksPerRequest" type="xsd:string" />
<xsd:attribute name="maxRequestPerHour" type="xsd:string" />
<xsd:attribute name="isTestNeeded" type="xsd:string" />
<xsd:attribute name="service" type="xsd:IDREFS" />
</xsd:complexType>
</xsd:schema>
|
Вы можете определить шаблоны в WebSphere Service Registry and Repository, соответствующие этим комплексным типам, путем импорта XSD-документа, приведенного в листинге 1, в WebSphere Service Registry and Repository и указания этих типов как Шаблонов. Вы можете посмотреть эти шаблоны в Web-интерфейсе WebSphere Service Registry and Repository (см. рисунок 2).
Рисунок 2. Шаблоны WebSphere Service Registry and Repository, сформированные на базе комплексных типов в листинге 1
Шаблон сервиса имеет следующие атрибуты:
- Свойство
businessOwner описывает SP (например, Peter Partell).
- Связь
availableEndpoints описывает выходы (endpoints), через которые к сервису можно получить доступ (например, http://serviceprovider.com:9080/service/highVolumeBatchACH или http://serviceprovider.com:9080/service/lowVolumeBatchACH).
- Связь
providedInterface описывает интерфейс Web Services Description Language (WSDL) для сервиса (например, BatchACHServiceWSDL.xml).
- Связь
contractTemplate описывает шаблон взаимодействия между SP и SS (пример из WebSphere Service Registry and Repository: JamesHuBatchACHServiceContract сформирован на базе шаблона Batch ACH Service Subscribe Contract).
- Связь
serviceDependencies описывает связи между сервисом и его зависимыми сервисами (например, JamesHuAccountsPayableProcess).
Шаблон выхода подписки сервиса групповых (пакетных) проверок в клиринговой компании (Batch ACH Service Subscribe Endpoint) имеет следующие атрибуты:
- Свойство
executionCost показывает стоимость вызова сервиса (например, пять центов за проверку).
- Свойство
responseTime показывает время отклика при выполнении сервиса (например, две миллисекунды на проверку).
- Свойство
maxChecksPerBatch описывает максимальное число проверок, которое сервис может принять в пакете (например, highVolumeBatchACHServiceEP может обработать максимум 10000 проверок в пакете, а lowVolumeBatchACHServiceEP может обработать максимум 1000 проверок в пакете).
- Свойство
minChecksPerBatch - специфическое свойство выхода подписки сервиса Batch ACH и описывает минимальное число проверок, которое сервис может принять в пакете (например, highVolumeBatchACHServiceEP может принять минимум 1000 проверок в одном пакете, а lowVolumeBatchACHServiceEP может принять минимум одну проверку в пакете).
- Связь
definingWSDLPort описывает связь между выходом (endpoint) и определением порта в WSDL (WSDL port definition) (например, BatchACHServiceSOAPPort).
Шаблон взаимодействия при подписке сервиса групповых (пакетных) проверок в клиринговой компании (Batch ACH Service Subscribe Contract) имеет следующие атрибуты:
-
responsetime описывает время отклика сервиса, взаимно оговоренное между SP и SS (например, пять миллисекунд на проверку).
-
cost описывает стоимость вызова сервиса, взаимно оговоренную между SP и SS (например, три цента за проверку в случае количества проверок в пакете более 1000, или пять центов за проверку в случае количества проверок в пакете менее 1000).
-
email является адресом электронной почты SS (например, jameshu@servicesubscriber.com).
-
servicename - имя сервиса, на который производится подписка (например, BatchACHService).
-
maxChecksPerRequest показывает взаимно оговоренное максимальное количество проверок в одном запросе в целях контроля объемов проверок (например, 3000).
-
maxRequestPerHour показывает максимальное количество запросов в час в целях планирования инфраструктурной емкости (например, 4000).
-
isTestNeeded показывает, нужны ли выходы (endpoints) для тестирования.
- Связь
service определяет сервис, для которого применяются эти настройки взаимодействия.
Настройка классификации (taxonomy)
Вам представлены шесть классов (их систематизация) в WebSphere Service Registry and Repository:
-
Test описывает выходы (endpoints) для использования в тестовых целях (например, TestEndpoint).
-
Production описывает выходы для использования в режиме эксплуатации (например, ProxyEndpoint).
-
Public описывает выходы, афишированные подписчикам сервиса - открытые выходы (например, TestEndpoint и ProxyEndpoint).
-
Private описывает выходы, которые не афишированы подписчикам сервиса - закрытые выходы. Модули-посредники в IBM WebSphere Enterprise Service Bus направляют вызовы из открытых выходов в соответствующие закрытые выходы, руководствуясь рядом критериев, таких как maxChecksPerBatch (например, highVolumeBatchACHServiceEP и lowVolumeBatchACHServiceEP). Для более подробной информации о сценариях использования модулей-посредников в WebSphere Enterprise Service Bus, обратите внимание на статью "Make composite business services adaptable with points of variability, Part 4: Using
WebSphere Enterprise Service Bus mediation modules" (EN) (developerWorks, июль 2007).
-
Contract определяет экземпляр шаблона взаимодействия (например, Subscription for Batch ACH Service).
-
ContractTemplate определяет сущность шаблона взаимодействия в WebSphere Service Registry and Repository (например, Batch ACH Service Subscribe Contract).
Вы определяете эту классификацию в файле OWL (см. листинг 2) и импортируете его в WebSphere Service Registry and Repository, создавая тем самым новую классификацию, как показано на рисунке 3.
Листинг 2. OWL-файл классификации WebSphere Service Registry and Repository, используемой в процессе регистрации
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE rdf:RDF [
<!ENTITY wsrrgst "http://f49.j2b.ibm.com/1/0/Taxonomy#">
]?>
<rdf:RDF xml:base="http://f49.j2b.ibm.com/1/0/Taxonomy#"
xmlns:owl="http://www.w3.org/2002/07/owl#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#"
xmlns:wsrrgst="http://f49.j2b.ibm.com/1/0/Taxonomy#"
xmlns:xsd="http://www.w3.org/2001/XMLSchema#"?>
<owl:Ontology rdf:about="http://f49.j2b.ibm.com/1/0/Taxonomy"?>
<rdfs:label>Jivaro2 Taxonomy</rdfs:label?>
</owl:Ontology?>
<owl:Class rdf:about="&wsrrgst;Production"?>
<rdfs:label?>Product?</rdfs:label?>
<rdfs:comment?>Services that are published as part of products?</rdfs:comment?>
</owl:Class?>
<owl:Class rdf:about="&wsrrgst;Test"?>
<rdfs:label?>Test?</rdfs:label?>
<rdfs:comment?>Services that are published for test?</rdfs:comment?>
</owl:Class?>
<owl:Class rdf:about="&wsrrgst;Public"?>
<rdfs:label?>Public?</rdfs:label?>
<rdfs:comment?>Services that are public?</rdfs:comment?>
</owl:Class?>
<owl:Class rdf:about="&wsrrgst;Private"?>
<rdfs:label>Private</rdfs:label?>
<rdfs:comment?>Services that are private?</rdfs:comment?>
</owl:Class?>
<owl:Class rdf:about="&wsrrgst;ContractTemplate"?>
<rdfs:label?>ContractTemplate?</rdfs:label?>
<rdfs:comment?>Contract Template?</rdfs:comment?>
</owl:Class?>
<owl:Class rdf:about="&wsrrgst;Contract"?>
<rdfs:label?>Contract?</rdfs:label?>
<rdfs:comment?>Contract?</rdfs:comment?>
</owl:Class?>
</rdf:RDF?>
|
Рисунок 3. Настроенная классификация, созданная после импорта OWL-файла из листинга 2 в WebSphere Service Registry and Repository
Роли и перспективы
Две новых роли, Viewer (Читатель) и Subscriber (Подписчик), были добавлены в Web-интерфейс WebSphere Service Registry and Repository, и две новых перспективы были созданы для каждой роли. Подписчикам позволено видеть больше информации о подписанном сервисе, например, открытые выходы и зависимые сервисы. Также они могут вызывать подписанный сервис под политикой авторизации, определенной в IBM Tivoli® Access Manager, чего пользователи в роли Читателей делать не могут. Изначально все пользователи определены в роли Читателей, а после процесса регистрации подписчиков все пользователи переходят из роли Читателей в роль Подписчиков. Для конфигурации ролей и пользователей, а также для загрузки определений и конфигурационных файлов перспектив используются скрипты на языке WebSphere Service Registry and Repository Java™ Command Language (Jacl). Например, мы добавили роли Читатель и Подписчик в WebSphere Service Registry and Repository и ввели пользователя JamesHu в роль Читателя.
Так же для роли Читателя была создана новая одноименная перспектива Читатель. Эта перспектива позволяет пользователям в роли Читателя видеть все доступные для подписки сервисы и подписываться на них. Для этой перспективы были созданы файлы определений: собственно перспективы, дерева навигации (Navigation Tree), области просмотра коллекции (Collection View), области просмотра деталей (Detail View) и области запросов на отображение (View Query). Определение перспективы Читатель показано в листинге 3. В нем определяется:
- Что только члены роли Читатель могут видеть эту перспективу
- Что
ViewerNavigationTreeбудет выводиться в области навигации
- Области просмотра коллекций объектов и область просмотра деталей конкретных объектов будут выводиться в основной области.
Листинг 3. Элементы определения преспективы для роли Читателя в WebSphere Service Registry and Repository
<perspective-definition xmlns="http://www.ibm.com/xmlns/prod/serviceregistry/6/0/
PerspectiveDefinition"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.ibm.com/xmlns/prod/serviceregistry/6/0/
PerspectiveDefinition
./../schemas/PerspectiveDefinition.xsd"
perspective-definition-name="Viewer"
weight="97">
<title-message resource-bundle-name="SampleResources" message-key=
"perspective.display.name.viewer"/>
<roles>
<role>Viewer</role>
</roles>
<navigation-tree-name>ViewerNavigationTree</navigation-tree-name>
<detail-view-mappings>
......
<view-mapping display-type="Service" view-definition-name="JivaroService" />
<view-mapping display-type="Subscriber" view-definition-name="JivaroSubscriber" />
<view-mapping display-type="contract" view-definition-name="JivaroContractDetail" />
......
</detail-view-mappings>
<collection-view-mappings>
......
<view-mapping display-type="Service" view-definition-name="JivaroServices" />
<view-mapping display-type="Subscriber" view-definition-name="JivaroSubscribers" />
......
</collection-view-mappings>
</perspective-definition>
|
Определения для области дерева навигации и области запросов для перспективы Читатель показаны соответственно в листингах 4 и 5. Дерево навигации определяет узел Сервисы, показываемый в этом дереве. При щелчке мышью на узле Сервисы выполняется запрос на отображение showViewServices. Область просмотра запросов на отображение определяет запрос showViewServices, который определяется как return all the Generic Objects whose template are Service (вернуть все объекты, чьим шаблоном является шаблон Сервис).
Листинг 4. Определение дерева навигации в перспективе Читатель
<NavigationTree xmlns="http://www.ibm.com/xmlns/prod/serviceregistry/6/0/
NavigationTreeDefinition"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.ibm.com/xmlns/prod/serviceregistry/6/0/
NavigationTreeDefinition ../../schemas/NavigationTree.xsd"
name="ViewerNavigationTree">
<node id="navtree_root" node-resource-key="navigationtree.service.registry">
<node id="businessmetadata" node-resource-key="navigationtree.unified.service.metadata">
<node id="bservice" node-resource-bundle="SampleResources"
node-resource-key="navigationtree.service.business.service" view-query-id=
"showViewServices"/>
</node>
</node>
</NavigationTree>
|
Листинг 5. Определение области запросов на отображение в перспективе Читатель
<ViewQueryDefinitionSet xmlns="http://www.ibm.com/xmlns/prod/serviceregistry/6/0/
ViewQueryDefinitionSet" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.ibm.com/xmlns/prod/serviceregistry/6/0/
ViewQueryDefinitionSet ../../schemas/ViewQueryDefinitionSet.xsd">
<QueryDefinitions>
......
<Query id="showViewServices">
<ObjectType>GenericObject</ObjectType>
<DisplayType>Service</DisplayType>
<Relationship name="template">
<Target>
<Property name="name" value="Service" />
</Target>
</Relationship>
</Query>
......
</QueryDefinitions>
</ViewQueryDefinitionSet>
|
При щелчке мышью на узле Сервисы в дереве навигации отображается область просмотра коллекций. Эта область выводит информацию о наборе имен сервисов. Определение области вывода коллекций приведено в листинге 6.
Листинг 6. Определение области вывода коллекций для коллекции объектов Сервисов
<collection-view-definition xmlns="http://www.ibm.com/xmlns/prod/serviceregistry/6/0/
CollectionViewDefinition" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.ibm.com/xmlns/prod/serviceregistry/6/0/
CollectionViewDefinition ../../../schemas/CollectionViewDefinition.xsd"
view-definition-name="JivaroServices">
<messages>
<title-message resource-bundle-name="SampleResources"
message-key="sample.collection.view.business.services.title"/>
<description-message resource-bundle-name="SampleResources"
message-key="sample.collection.view.business.services.description"/>
</messages>
<column-definitions>
<column-definition filterable="true">
<heading-message message-key="collection.view.column.name"/>
<property-name>name</property-name>
<action>ViewDetail</action>
</column-definition>
<column-definition filterable="true">
<heading-message message-key="collection.view.column.description"/>
<property-name>description</property-name>
</column-definition>
<column-definition filterable="true">
<heading-message message-key="collection.view.column.version"/>
<property-name>version</property-name>
</column-definition>
</column-definitions>
<button-definitions>
</button-definitions>
</collection-view-definition>
|
При щелчке мышью на сервисе в области вывода коллекций выводится область деталей. Определение области вывода деталей для объекта Service показано в листинге 7. Область вывода деталей описывает общие свойства, такие как имя и ссылочное свойство contractTemplate. Ссылочное свойство отображается как HTML-ссылка. Щелчок по этой ссылке позволит пользователю перейти в область просмотра специфических свойств типа contractTemplate.
Листинг 7. Определение области вывода деталей для объекта Сервис
detail-view-definition xmlns="http://www.ibm.com/xmlns/prod/serviceregistry/6/0/
DetailViewDefinition" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.ibm.com/xmlns/prod/serviceregistry/6/0/
DetailViewDefinition ../../../schemas/DetailViewDefinition.xsd"
view-definition-name="JivaroService">
<messages>
<callout-message resource-bundle-name="SampleResources"
message-key="sample.detail.view.business.service.callout" />
<title-message resource-bundle-name="SampleResources" message-key=
"sample.detail.view.business.service.title" />
<description-message resource-bundle-name="SampleResources"
message-key="sample.detail.view.business.service.description" />
</messages>
<tab-definition tab-name="details" tab-content="/pages/detailContent.jsp">
<tab-title-message message-key="detail.details" />
<general-properties>
<heading-message message-key="detail.view.general.properties" />
<property>
<property-name>name</property-name>
<property-messages>
<property-message message-key="detail.view.name" />
<field-help-message message-key="detail.view.name.field.help" />
</property-messages>
</property>
......
</general-properties>
<additional-properties>
<heading-message message-key="detail.view.relationships" />
<property hide-on-new="true">
<action>ViewRelationshipDetail</action>
<property-name>contractTemplate</property-name>
<property-messages>
<property-message resource-bundle-name="SampleResources" message-key=
"sample.detail.view.contract" />
<field-help-message message-key="detail.view.version.field.help" />
</property-messages>
</property>
</additional-properties>
</tab-definition>
</detail-view-definition>
|
 |
Интеграция WebSphere Service Registry and Repository с WebSphere Process Server
Для интеграции WebSphere Service Registry and Repository с процессом управления регистрацией подписчиков создается плагин извещений (notification plug-in); поток задач (workflow) на BPEL, выполняющийся в WebSphere Process Server; клиент к WebSphere Service Registry and Repository. Более подробно шаги по интеграции описываются ниже.
Плагин извещений WebSphere Service Registry and Repository
Плагин извещений работает таким образом, что когда Читатели создают экземпляр шаблона взаимодействия (instance of the Contract Template), процесс регистрации подписчика вызывается автоматически.
Первый шаг в разработке плагина извещений - разработка Java-класса, реализующего интерфейс com.ibm.serviceregistry.ServiceRegistryNotifier. Интерфейс имеет три метода: create, update и delete, которые вызываются, когда объект в WebSphere Service Registry and Repository соответственно создается, изменяется и удаляется. Листинг 8 показывает исходный текст метода create. Метод работает таким образом, что если объект был создан как экземпляр шаблона взаимодействия, то свойства экземпляра получаются из WebSphere Service Registry and Repository API, и процесс регистрации подписчика вызывается через клиент Web-сервиса. Созданный объект так же модифицируется путем добавления классификационного соглашения (classification Contract) и установки связи с подписанным сервисом.
Листинг 8. Плагин извещений WebSphere Service Registry and Repository для вызова процесса регистрации подписчика
public void create(OriginalObject obj, boolean success.
ServiceRegistryException arg2) {
if (classificationURI==null)
initProperties();
if (!success)
return;
if ((obj==null) || (obj.getTemplate()==null) ||
(obj.getTemplate().getClassificationURIs()==null))
{
return;
}
if (!obj.getTemplate().getClassificationURIs().contains(
classificationURI)) {
return;
}
if (wsrrClient == null) {
init();
}
try {
String servicename = BSRSDOHelper.INSTANCE.getPropertyValue(obj,"servicename");
if ((servicename==null) || (servicename.trim().length()==0))
{
throw new RuntimeException("Servicename cannot be null");
}
GenericObject service = getServiceObjectFromServicename(servicename);
if (service==null) {
System.out.println("Cannot find subscribed service name");
return;
}
BSRSDOHelper.INSTANCE.setTargetObject(obj,"service",service);
((WSRR)((GenericObjectImpl)obj).getRootObject()).
getArtefacts().addAll(
((WSRR)((ComplexTypeDefinitionImpl)service.getTemplate()).getRootObject()).
getArtefacts());
obj.getClassificationURIs().add(contractClassification);
wsrrClient.update(obj);
String email="",responsetime="";
StringBuffer buffer=new StringBuffer();
List properties = obj.getUserDefinedProperties();
for (int i = 0; i < properties.size(); i++) {
UserDefinedProperty property = (UserDefinedProperty) properties.get(i);
String propertyname = property.getName();
if (propertyname.equals("email"))
{
email=property.getValue();
}
else if (propertyname.equals("responsetime"))
{
responsetime=property.getValue();
}
else if (!propertyname.equals("servicename")){
String propertyvalue = property.getValue();
if (propertyvalue!=null && propertyvalue.length()>0)
{
if (i==0)
buffer.append(property.getName()+"="+property.getValue());
else
buffer.append("&"+property.getName()+"="+property.getValue());
}
}
}
invokeEntitlementProcess(service.getName(),obj.getOwner(),
email,responsetime,buffer.toString(),obj.getBsrURI());
}
catch(Exception e)
{
System.out.println("Exception happened when add the relationship
service in contract:"+e.getMessage());
e.printStackTrace();
}
}
private String invokeEntitlementProcess(String serviceName,
String contactorUserId,
String contactorEmail,
String contractResponsetime,
String contractString,
String contractBsrURI)
{
try{
EntitlementProcessInterfaceProxy proxy = new EntitlementProcessInterfaceProxy();
proxy.setEndpoint(processendpoint);
EntitlementProcessInterface service = proxy.getEntitlementProcessInterface();
String result = service.process(serviceName,contactorUserId,contactorEmail,
contractResponsetime,contractString,contractBsrURI);
return result;
}
catch(Exception e)
{
e.printStackTrace();
}
return "";
}
|
Плагин извещений разворачивается в WebSphere Service Registry and Repository как общая библиотека (shared library). При развертывании необходимо перезапустить WebSphere Service Registry and Repository.
Процесс регистрации подписчика
Процесс регистрации подписчика, как описано в предыдущей статье (EN), создается с использованием BPEL в среде разработки IBM WebSphere Integration Developer и разворачивается в WebSphere Process Server.
Интерфейс процесса регистрации подписчика показан на рисунке 4. Входные параметры включают в себя:
-
ServiceNameимя подписываемого сервиса. Более подробная информация о сервисе может быть получена из WebSphere Service Registry and Repository по имени сервиса.
-
UserId подписчика.
-
Email подписчика.
-
ResponseTime, желаемое время отклика - responseTime, как указано в соглашении.
-
contractProperties, свойства соглашения подписки, включающие maximum number of checks per request (максимальное количество проверок на запрос) и the maximum number of requests per hour (максимальное количество запросов в час).
-
contractBsrURI, атрибут bsrURI экземпляра соглашения в WebSphere Service Registry and Repository. Экземпляр соглашения может быть найден по этому атрибуту и изменен с помощью WebSphere Service Registry and Repository API.
Рисунок 4. интерфейс процесса регистрации подписчика в WebSphere Integration Developer
Процесс регистрации подписчика взаимодействует с WebSphere Service Registry and Repository для получения информации о подписываемом сервисе, обновляет статус экземпляра соглашения и создает подписку через WSRRServiceHelper. Это процесс конфигурирует Tivoli Access Manager - обновляет списки доступа для того, чтобы подписчик сервиса мог вызывать подписанный сервис. Этот шаг реализуется с помощью задачи персонаду (human task) AdminConfigureTAM. Так же этот процесс конфигурирует WebSphere Service Registry and Repository - добавляет роль подписчика с помощью другой задачи персоналу - AdminAddSubscriberRole. Задачи персоналу и Web-сервисы объединяются в процесс регистрации подписчика на сборочной диаграмме в WebSphere Integration Developer, как показано на рисунке 5.
Рисунок 5. Сборочная диаграмма процесса регистрации подписчика
Клиент WebSphere Service Registry and Repository
The WSRRServiceHelper был создан для взаимодействия с WebSphere Service Registry and Repository через клиента Web-сервиса в WebSphere Service Registry and Repository API, это проиллюстрировано в листинге 9.
Листинг 9. Создание клиента WebSphere Service Registry and Repository с использованием WebSphere Service Registry and Repository API
System.setProperty(SYSTEM_TRUST_STORE, "C:\\DummyClientTrustFile.jks");
System.setProperty(SYSTEM_TRUST_STORE_PASSWORD, "WebAS");
System.setProperty(SYSTEM_KEY_STORE, "C:\\DummyClientKeyFile.jks");
System.setProperty(SYSTEM_KEY_STORE_PASSWORD, "WebAS");
WSRRCoreSDOClient wsrrClient = new WSRRCoreSDOClient("https://localhost:9443/
WSRRCoreSDO/services/WSRRCoreSDOPort","wpsbind","wpsbind");
|
Интерфейс и методы этого Web-сервиса показаны на рисунке 6 и в листингах 10, 11 и 12.
Рисунок 6. Интерфейс Web-сервиса WSRRServiceHelper
Листинг 10. Метод addSubscription Web-сервиса WSRRServiceHelper
Subscription sub = (Subscription)DataFactory.INSTANCE.create(Subscription.class);
sub.setTargetBsrURI(serviceInstance.getBsrURI());
sub.setEmailAddress("mailto:"+email);
sub.setString("name","Subscription for service "+serviceName);
sub.setString("owner",userid);
String bsrURI = wsrrClient.create(sub);
|
Листинг 11. Метод updateProperty Web-сервиса WSRRServiceHelper
BaseObject obj = wsrrClient.retrieve(bsrURI);
BSRSDOHelper.INSTANCE.setPropertyValue(obj,property,value);
wsrrClient.update(obj);
|
Листинг 12. Метод getAvailableEndpoint Web-сервиса WSRRHelper используем для запроса объекта сервиса по имени и получаем связанные выходы (endpoints) из отношения availableEndpoints
GraphQuery graphQuery = SdoFactory.INSTANCE.createGraphQuery();
String FIND_WSDL = "/WebSphere Service Registry and Repository/GenericObject[@name=\""
+serviceName+"\" and template(.)/@name=\"Service\"]";
graphQuery.setQueryExpression(FIND_WSDL);
List results = wsrrClient.executeQuery(graphQuery);
GenericObject serviceObj = (GenericObject)results.get(0);
List relations = serviceObj.getUserDefinedRelationships();
for(int i=0;i<relations.size();i++)
{
UserDefinedRelationship relation = (UserDefinedRelationship)relations.get(i);
if (relation.getName().equals("availableEndpoints"))
{
List targets = relation.getTargets();
......
}
}
|
Заключение
Эта статья проиллюстрировала как настроить WebSphere Service Registry and Repository с помощью определенных пользователями шаблонов, ролей и ограничений доступа, перспектив в пользовательском интерфейсе и систем классификации. Вы узнали, как интегрировать WebSphere Service Registry and Repository с процессом регистрации подписчиков, выполняющимся в WebSphere Process Server с использованием плагинов извещения и WebSphere Service Registry and Repository API. Так же вы увидели, как комбинация приемов настройки WebSphere Service Registry and Repository и приемов интеграции с WebSphere Process Server используется для реализации процесса управления регистрациями подписчиков через опубликованные сервисы.
Благодарности
Авторы хотели бы выразить признательность Эшли Бразес (Ashleigh Brothers) и Патрику Фландерсу (Patrick Flanders) за их мастерскую редактуру.
Загрузка | Описание | Имя | Размер | Метод загрузки |
|---|
| Sample code for this article | wsrrgov.zip | 7.3MB | HTTP |
|---|
Ресурсы Научиться
-
Оригинал статьи: Building SOA composite business services, Part 11: Implement the subscriber entitlement process (EN).
- Обратитесь к WebSphere Service Registry and
Repository Handbook (EN), одной из многих электронных книг IBM Redbooks®, описывающей архитектуру и функциональность IBM WebSphere Service Registry and Repository, а так же сценарии интеграции, которые могут быть использованы как примеры использования WebSphere Service Registry and Repository в сервис-ориентированной архитектуре заказчиков.
- WebSphere Service Registry and Repository Version 6.0 Information Center (EN) содержит множество информационных ресурсов об управлении сервисами и бизнес-процессами.
- IBM WebSphere Business Process Management Version 6.0 information center (EN) содержит исчерпывающую информацию об установке, поддержке и использовании IBM WebSphere Business Process Management.
- Для более подробной информации о примерах использования модулей-посредников в WebSphere Enterprise Service Bus обратитесь к статье "Make composite business services adaptable with points of variability, Part 4: Using
WebSphere Enterprise Service Bus mediation modules" (EN) (developerWorks, июль 2007).
- Раздел SOA and Web services zone на сайте IBM developerWorks содержит сотни статей и руководств базового, среднего и расширенного уровней о разработке Web-сервисов.
- Поэкспериментируйте в IBM SOA Sandbox! (EN) Получите больше навыков работы с SOA через практический опыт с вводными разделами SOA.
- IBM SOA Web site (EN) предлагает обзор SOA и рассказывает, как IBM может помочь вам в ее использовании.
- Чтобы быть в курсе последних новостей, посещайте сайт технических мероприятий и Web-трансляций developerWorks (EN). Обратите внимание на следующие материалы по SOA и Web-сервисам:
- Книги по данной и другим техническим темам можно найти в
Safari bookstore (EN).
- Посмотрите короткую демонтсрацию Web services on demand demo (EN).
- Получите RSS feed for this series. (EN) (Более подробно об RSS (EN).)
Получить продукты и технологии
- Реализуйте инновации в вашем следующем проекте разработки с открытым кодом с помощью
ознакомительного ПО IBM (EN), которое можно загрузить с сайта или заказать на DVD.
Обсудить
Об авторах  | |  | Ин Чунь Го (Ying Chun Guo) работает инженером-программистом в Китайском технологическом институте, в Китайской лаборатории IBM по разработке программного обеспечения (China Software Development Laboratory). Сейчас она занимается составными бизнес-сервисами (CBS) и сервис-ориентированной архитектурой (SOA). |
 | |  | Навьен Сачдева (Naveen Sachdeva) - инженер-програмист, консультант группы Application Integration Middleware IBM. Он имеет более чем 10 лет опыта работы в крупномасштабной системной интеграции, дизайне и развитии распределенных вычислительных систем. В настоящее время, он помогает деловым партнерам IBM в разработке технических средств и создании концепций, при помощи продуктов WebSphere. |
Выскажите мнение об этой странице
|  |