首页 文章 Java基础 WSRR 6.2 应用系列,第 6 部分: WSRR API 的功能及使用

邮件订阅

WSRR 6.2 应用系列,第 6 部分: WSRR API 的功能及使用 E-mail
用户评价: / 0
好 
作者:Administrator   
2009-02-09 23:25

引言

要阅读更多关于 WSRR 应用系列文章的信息,请访问以下链接:

作为 IBM? SOA 战略的重要组成部分,IBM WebSphere Service Registry and Repository (以下称为 WSRR)提供了服务及其元数据的注册和管理功能,通过和其他产品及工具的集成,可以方便地实现服务运行时动态选择以及服务生命周期管理等。本文主要向您介绍了 WSRR API 对外提供的功能及其调用方式。用户可以根据自己的需求选择合适的调用方式实现应用程序和WSRR 的集成。





回页首


WSRR 信息模型

在介绍 WSRR API 功能之前,首先需要了解一下 WSRR 的信息模型。因为 WSRR API 所操作的对象都由该信息模型来定义。


图 1. WSRR 信息模型

如图 1 所示,WSRR 中所存储的信息包括两类:服务描述实体和服务描述元数据。服务描述实体包括物理文档,从物理文档中解析出来的逻辑对象以及 GenericObject。其中逻辑对象只能随着物理文档的创建而自动生成,随着物理文档的删除而删除。以 WSDL 文档为例,解析出来的逻辑对象如图 2 所示:


图 2. WSDL 逻辑对象

所以当使用 API 向 WSRR 中发布一个 WSDL 文档时,系统会自动生成图 2 所示的逻辑对象,但是用户不能使用API单独创建或删除一个逻辑对象,只能进行更新操作。而 GenericObject 不依赖于任何物理文档,可以自行创建和删除。服务描述元数据包含:属性,关系,分类这三类信息,这些信息可以添加到任何一个服务描述实体上。在此基础上,WSRR 还提出了业务模型的概念,用来表示企业中商业层面的数据,例如应用,流程,服务,合同等,通过和 IT 层面数据之间的绑定,可以将他们关联到具体的实现。业务模型的具体介绍可以参考本系列的第 1 部分,更多与信息模型相关的信息,可以参考如下资料:





回页首


WSRR API 的结构

WSRR API 所提供的功能可以分为三部分:注册(Registry & Repository),内容治理(Governance) 和系统管理(Admin),如图 3 所示。

注册功能

主要提供对内容的创建、删除、更新和查询操作,这些功能封装在 ServiceRegistrySessionBean中。注册功能还包括对 WSRR 中分类系统的查询及类之间关系的判定等功能,这些功能被单独封装在 ServiceRegistryOntologyBean 中。

内容治理功能

主要提供和 SOA 治理相关的功能,例如:服务生命周期管理,影响分析(Impact Analysis)等,这些功能封装在 ServiceRegistryGovernanceBean 中。

系统管理

主要提供配置文件的创建与修改,数据的导入导出,分类系统的创建与更新以及用户权限的设置与修改等功能,这些功能都由 JMX 的方式来实现。


图 3. WSRR 架构

WSRR API 的调用方式分为四种,包括 EJB, Web Service, JMX 和 REST。相关的客户端代码被封装在 ServiceRegistryClient.jar 中,该 jar 包的结构如图 4 所示,图中 Core 相关的模块与注册功能对应,ServiceRegistryClient.jar 中包含了 ServiceRegistrySessionBean,ServiceRegistryOntologyBean,ServiceRegistryGovernanceBean 的客户端代码,以及 JMX 调用的客户端代码和注册功能相关的 Web Service 客户端代码,而其他 Web Service 的客户端代码以及 Rest 调用相关的代码需要用户自己创建。


图 4. WSRR API的结构

下面将从一个证券公司的实例出发,介绍 WSRR API 的使用,本文只列举了 WSRR API 中的一些主要功能,更加全面的关于 API 的描述可以参考 WSRR V6.2 information center





回页首


WSRR API 的应用

JK 证券公司营销策划部根据中国用户的需求,计划与境外投资机构合作,开发一个全新的投资海外市场的 QDII 基金产品,并成立了一个新的部门——QDII 产品运行部,它隶属于中国分公司,主要从事 QDII 产品的设计,推广与售后服务。为了尽可能的重用已有的服务以及境外投资机构所提供的服务,公司采用 WSRR 作为其服务管理平台,统一管理公司所有的服务。这项新基金服务的推出需要以下几个步骤:

  1. 境外投资机构将他们的服务注册到 WSRR
  2. 新部门与原有公司组织结构的融合
  3. 新部门的角色和权限设置
  4. 在分类系统中添加 QDII 产品的分类标志——China QDII
  5. 营销策划部在 WSRR中创建一个新的服务
  6. QDII 产品运行部根据营销策划部的需求描述,设计具体的服务接口
  7. 产品开发部门根据 QDII 产品运行部设计的接口实现并部署具体的服务
  8. 营销策划部宣布产品上线,正式运行

目前 WSRR 支持 EJB client, Web service, REST 和 JMX 这四种客户端交互方式。其中境外投资机构考虑到平台异构性以及对跨防火墙通信的较高要求,决定采用 web service 的方式与 WSRR 进行交互。而本公司开发人员在开发过程中由于对运行性能,事务处理以及并发控制等要求比较高,一般采用 EJB 的方式与 WSRR 进行交互。终端用户想实时了解有哪些新发布的服务,但又不想涉及复杂的编程,可以采用轻量级的 REST 方式与 WSRR 交互。最后所有和系统管理相关的功能,例如:分类系统的创建与更新,用户权限的设置与更改等都需要通过 JMX 的方式与 WSRR 交互。下面将结合具体场景详细介绍每一种交互方式。

Web service 客户端的建立与使用

Web service 客户端的建立

WSRR 所提供的各个Web service 的地址如下表所示:


表 3-1. Web service 地址
功能 URL
注册功能 http://host:port/WSRR6_2/services/WSRRCoreSDOPort
内容治理 http://host:port/WSRR6_2/ services /WSRRGovernancePort
分类系统 http://host:port/WSRR6_2/ services/WSRROntologyPort

Web service 客户端的建立需要如下两个步骤:

  1. 根据 Web service 地址生成相应的客户端代码。
  2. 配置正确的 web service 运行时环境,对于 WAS(WebSphere Application Server),需要 com.ibm.ws.webservices.thinclient_6.1.0.jar,该 jar 包可以在 WAS 安装目录下的 runtimes 目录下找到。

以注册功能为例,创建这部分功能的Web service的客户端代码如下所示:

String WSRRCoreURL = "http://host:port/WSRR6_2/services/WSRRCoreSDOPort";
try {
WSRRCoreSDOServiceLocator serviceLocator = new WSRRCoreSDOServiceLocator();
WSRRCoreSDOPortType webServiceClient = 
serviceLocator.getWSRRCoreSDOPort(new URL(WSRRCoreURL));
} catch (Exception e) {
// do something
}

其中 WSRRCoreSDOServiceLocator 和 WSRRCoreSDOPortType 是根据 web service 的地址由RSA 自动生成的。

Web service 客户端的使用

境外投资机构发布服务

境外投资机构通过 Web service 方式发布 WSDL 文档需要如下三个步骤:

  1. 创建 WSDLDocument 对象,设置 name, content, location 等属性。
  2. 将 WSDLDocument 对象转化为相应的 datagraph。
  3. 通过 webServiceClient 的 create 方法将该 datagraph 保存到 WSRR。

具体的实现可以参考代码下载中类 WSRRWSClient.java 中的 publishWSDL(String url, String name) 方法。

该方法包含两个参数,其中 url 是该 WSDL 文档的地址,name 是该 WSDL 文档的名称。采用类似的方法可以调用 Web service 提供的其他功能。

另一方面,公司内部开发人员需要将新成立的部门信息录入到 WSRR,并分配角色和权限,为即将推出的新服务在 WSRR 中创建新的分类;在服务开发过程中,需要将服务的描述文档发布到 WSRR,同时还需要根据开发的进度,结合服务的生命周期,实时的修改服务所处的状态。在整个过程当中,有些需要使用 EJB 的方式进行调用,例如:

  1. 新部门信息录入
  2. 创建新的服务
  3. 服务生命周期的管理

有些需要 JMX 的方式进行调用,例如:

  1. 新部门角色和权限设置
  2. 更新分类系统

下面将具体介绍这两种调用方式:

EJB 客户端的建立和使用

EJB 客户端的建立

EJB 客户端的建立需要四个 jar 包,包括 ServiceRegistryClient.jar、sdo-int.jar、com.ibm.ws.admin.client_6.1.0.jar 和 com.ibm.ws.webservices.thinclient_6.1.0.jar,前两个 jar 包可以在 WSRR 的安装目录下找到,后两个 jar 包可以在 WAS 的安装目录下找到。建立 EJB 客户端的示例代码如下:

protected static void init() throws Exception {
Properties properties = new Properties();
properties.put(Context.PROVIDER_URL, "corbaloc:iiop:" + server + ":" +jndiPort);
properties.put(Context.INITIAL_CONTEXT_FACTORY,
"com.ibm.websphere.naming.WsnInitialContextFactory");// 设置 IIOP 的地址及端口
Context ctx = null;
ctx = new InitialContext(properties);
if (useSecurity){ // 配置安全相关的信息
System.out.println("WAS security is ON"); 
System.setProperty("java.security.auth.login.config", "file:C:/wsjaas_client.conf");
System.setProperty("com.ibm.CORBA.ConfigURL","file:C:/sas.client.props");
System.setProperty("com.ibm.SSL.ConfigURL", "file:C:/ssl.client.props");
ORB.init();
ctx.lookup("");
LoginContext loginContext = new LoginContext("WSLogin", 
		new WSCallbackHandlerImpl(username, password));
loginContext.login();
Subject subject = loginContext.getSubject();
ContextManagerFactory.getInstance().setInvocationSubject(subject);
}
ejbHome = (ServiceRegistrySessionHome) PortableRemoteObject.narrow
(ctx.lookup("<ServiceRegistrySessionHome>"),ServiceRegistrySessionHome.class);
serviceRegistry = ejbHome.create();
SDOUtil.registerStaticTypes(com.ibm.serviceregistry.governance.sdo.SdoFactory.class); 
SDOUtil.registerStaticTypes(com.ibm.serviceregistry.ontology.sdo.SdoFactory.class);
}

不同功能模块所对应的 jndi 名称可以在 WSRR 的 information center 里面找到。

EJB 客户端的使用

新部门信息录入

根据 WSRR 业务模型的定义,部门组织结构是 Business Service View 中的一部分,它对应于OWL 中类 http://www.ibm.com/xmlns/prod/serviceregistry/6/1/GovernanceProfile#Organization 的定义,该定义指出了 organization 对象所拥有的属性和关系,当在 WSRR 中创建新的 organization 对象时,有专门的 validater 根据 OWL 中 organization 类的定义做属性和关系的检查,只有符合定义的 organization 对象才能保存到WSRR中。

向 WSRR 中添加一个新的部门 QDII 产品运行部,也就是要创建符合类http://www.ibm.com/xmlns/prod/serviceregistry/6/1/GovernanceProfile#Organization 定义的一个新的数据对象,示例代码可以参考代码下载中类 WSRREjbProxy.java 中的createDepartMent(String name) 方法,其中 name 是所需创建的部门的名称。 在创建的过程中,需要根据 WSRR 业务模型的定义,在数据对象上添加必须的属性和关系,例如在创建 organization 对象时,就必须添加关系 wsrrgp_documentation,wsrrgp_childOrganizations 和属性 wsrrgp_contact,wsrrgp_email。

在创建完该对象以后,还要把它和中国分公司建立起关联关系,首先需要从 WSRR 中找出中国分公司所对应的对象。WSRR 提供四种查询方式:

  1. PropertyQuery:用来查询对象的属性,只返回用户感兴趣的一组属性,而非对象本身。
  2. GraphQuery:用于查询 WSRR 中所保存的数据对象,可以通过设置查询深度来控制返回对象所包含的关系深度。
  3. Predefined persisted queries:提供了一组预先定义好的查询,用户只需提供查询的名称就可以进行相应的查询。
  4. User-defined persisted queries:用户可以把经常使用的查询持久化到 WSRR 中,并赋予他们唯一的名称,这样可以通过引用他们的名称来执行相应的查询。

由于需要获取中国分公司所对应的数据对象,所以采用 GraphQuery,通过名称来查找,示例代码如下:

String queryStr = "/WSRR/GenericObject[@name = '中国分公司']";
GraphQuery query = SdoFactory.INSTANCE.createGraphQuery();
query.setQueryExpression(queryStr);
BserviceRegistry.executeQuery(query);

在找到中国分公司所对应的对象以后,通过添加关系wsrrgp_childOrganizations将 QDII 产品运行部设置为中国分公司的子部门,示例代码可以参考代码下载中类 WSRREjbProxy.java 中的addChildOrganization(BaseObject parentOrganizaion,BaseObject childOrganization) 方法,其中 parentOrganizaion 对象为中国分公司,childOrganization 对象为 QDII 产品运行部。

创建新服务

公司营销策划部在 WSRR 中创建一个新的 Business service 对象用来表示新开通的服务,其分类为 ChinaQDII,并将一个详尽的需求文档与该对象关联起来,需求文档以 BinaryDocument 的形式发布到 WSRR,示例代码如下:

String docURL = "http://localhost:9086/Sample/Requirement.doc";
Document requirement = SRXMLHelperImpl.INSTANCE.loadFromUrl
(docURL,TypeConstants.TYPE_GENERICDOCUMENT);
serviceRegistry.create(requirement);

然后创建一个名为 ChinaQDIIService 的 Business service 对象,将它的分类设置为 ChinaQDII,并将其关联到该需求文档,示例代码可以参考代码下载中类 WSRREjbProxy.java 中的 createBusinessService(String name) 方法,其中 name 为所要创建的 Business service 对象的名称。根据 Business Service 对象在 WSRR 业务模型中的定义,在创建的过程中需要添加一些必需的属性和关系,例如 wsrrgp_serviceDependencies,wsrrgp_providedInterface 等。

Business service 对象创建完成以后,还需要对该对象进行管理,WSRR 为 Business service 对象定义了专门的生命周期,营销策划部需要将对象放入该生命周期进行管理,根据 Business service 对象的不同状态,将由 QDII 产品运行部负责服务的设计,然后由产品开发部门负责服务的具体实现与部署,下面将具体介绍服务生命周期管理。

服务生命周期管理

在 WSRR 的治理概要中总共定义了四种类型的生命周期,包括:Business Service Lifecycle, Service Interface lifecycle ,Service Version lifecycle 和 Policy lifecycle. 本文主要介绍前两种生命周期,其他两种生命周期可以参考本系列第 4 部分。如图 5 所示。

Business Service Lifecycle 由四个状态组成,分别为 Model, Assemble, Deploy 和 Manage,通过名为 AuthorizedForDevelopment 的 transition 可以将对象的状态由 Model 转换为 Assemble,不同的 transition 将实现不同的状态转换。

Service Interface Lifecycle 由两个状态组成,分别为 Specify 和 Published,它们也可以通过 transition 实现相互转换。

状态之间的转换通常需要满足一些限制条件,这些条件通常为该对象必须具有特定的属性、关系或者分类,但有时还包括对他所关联的其它对象在它所属的生命周期中所处状态的限制,例如一个 Business Service 对象想要从 Model 状态转变为 Assemble 状态,那么与它关联的 Service Interface 对象所处的状态必须为 Published。所以如果 QDII 产品运行部需要将服务的状态改为 Assemble,那么首先需要将与该服务关联的 Service Interface 对象的状态设为 Published。下面将具体介绍和生命周期管理相关的 API 的操作。


图 5. 生命周期示例

生命周期管理一般包含以下三种操作:

  • MakeGovernable

该操作将 WSRR 中的对象放入一个特定的生命周期,通过调用 ServiceRegistryGovernance EJB 的 makeGovernable() 方法来实现,如果该对象存在多个可能的生命周期,那么需要通过指定参数 initialTransition 来控制该对象进入哪个生命周期的初始化状态。如果该对象已经处于监理状态,继续调用该方法将会抛 exception:GSR0053E: The object is already under governance control. 所以在调用该方法之前,最好先判断对象是否已经处于监理状态,可以通过调用 ServiceRegistryGovernance EJB 的 getGovernanceRecord 来实现,如果该方法返回空(NULL),说明该对象不在任何的生命周期里面。

  • State transition

该操作根据 WSRR 中生命周期的定义,转换被监理对象的状态,可以通过调用ServiceRegistryGovernance EJB 的 transition() 方法来实现。该方法包含两个参数,一个是需要进行状态转换的对象的唯一标志 bsrURI,另一个是所要执行的状态变迁的 URI,该对象当前所有有效的状态变迁可以通过调用 getTransitions() 方法来获得。

  • RemoveGovernable

该操作将对象从特定的生命周期中移除,通过调用 ServiceRegistryGovernance EJB 的 remove Governance() 方法来实现,所传递的参数 bsrURI 必须是 governance collection 中 root object 的 bsrURI,该 bsrURI 记录在GovernanceRecord 的 entityBsrURI 属性当中。

营销策划部为了管理它新建的服务,需要将它放入 business service 生命周期,示例代码可以参考代码下载中类 WSRREjbProxy.java 中的 governBusinessService() 方法,该方法将 ChinaQDIIService 对象置于 Model 状态,QDII 产品运行部可以根据需求说明书,设计出服务接口 openAccount,并以WSDL文档的方式将接口描述信息发布到 WSRR,openAccount 对象通过 Service Interface 生命周期进行管理,经过审核,该服务接口的状态最终可以被设置为 Published,表示该服务接口将对用户开放。示例代码可以参考代码下载中类 WSRREjbProxy.java 中的 governServiceInterface () 方法。

这时QDII产品运行部还需要修改 ChinaQDIIService 对象,指出 ChinaQDIIService 服务实现了接口 openAccount。只有这样营销策划部才可以将 ChinaQDIIService 对象的状态设置为Assemble 状态,并通知产品开发部门实现相应的接口并部署服务。示例代码可以参考代码下载中类 WSRREjbProxy.java 中的 addServiceInterface() 方法。

这时 ChinaQDIIService 对象处于 Assemble 状态,当开发部门完成了服务的开发和部署,同样它也需要修改 ChinaQDIIService 对象,将其关联到具体的 serviceBinding 和 serviceEndpoint,这样营销策划部才可以将 ChinaQDIIService 对象的状态设置为 Manage,表明服务作为产品正式对外开放。

从上述过程中可以看到,ChinaQDIIService 对象由营销策划部创建并负责它的生命周期管理,由 QDII 产品运行部和产品开发部门对其进行修改,将它绑定到具体的实现。在服务的整个生命周期中,不同部门对该对象具有不同权限,这些可以通过 WSRR 中的访问控制(Access control)机制来实现,下面将具体介绍如何通过 JMX client 来设置用户权限。

JMX 客户端的建立与使用

JMX 客户端主要用于 WSRR 的系统管理,包括配置文件管理,分类系统管理,数据导入导出和用户权限管理。这些功能由 ServiceRegistryClient.jar 中的客户端代理程序 ServiceRegistryRepositoryProxy 来提供,它封装了与 MBean 进行交互的具体细节,通过它可以很方便的连接到 WSRR 的 MBean,并执行相应的操作。

JMX 客户端的建立

JMX client 的建立所需要的环境设置和 EJB client 相同,其示例代码如下:

public static void init()throws Exception{
Properties properties = new Properties();
try {
properties.put(AdminClient.CONNECTOR_HOST, host);
properties.put(AdminClient.CONNECTOR_PORT, soapPort);
properties.put(AdminClient.CONNECTOR_TYPE, 
AdminClient.CONNECTOR_TYPE_SOAP);
properties.put("javax.net.ssl.trustStore", 
"C:/DummyClientTrustFile.jks");
properties.put("javax.net.ssl.keyStore", 
"C:/DummyClientKeyFile.jks");
properties.put("javax.net.ssl.trustStorePassword", "WebAS");
properties.put("javax.net.ssl.keyStorePassword", "WebAS");
properties.put("wasHome", "D:/ibm/WebSphere/AppServer");

if (securityOn){
properties.put(AdminClient.CONNECTOR_SECURITY_ENABLED,
  new Boolean(securityOn).toString());
properties.put(AdminClient.USERNAME, userName);
properties.put(AdminClient.PASSWORD, password);
}else {
properties.put(AdminClient.CONNECTOR_SECURITY_ENABLED,
	new Boolean(securityOn).toString());
}
mbeanProxy = new ServiceRegistryRepositoryProxy(properties);
}catch (Exception e){
e.printStackTrace();
}
}

JMX 客户端的使用

新部门角色和权限设置

WSRR 的管理员或者 QDII 产品运行部的上级部门可以通过 JMX 客户端的方式为它分配权限,权限的分配是通过 WSRR 的访问控制来实现,有关访问控制的原理在本系列的其他文章中有专门的介绍。

假定新部门的角色是 QDIIExecuter,它拥有对处于 Model 状态的 Business service 对象进行修改的权限。该设置的示例代码如下:

public static void addRole() throws Exception{	
mbeanProxy.addRole("QDIIExecuter");
String target = "/WSRR/GenericObject[@primaryType =
'http://www.ibm.com/xmlns/prod/serviceregistry/6/1/GovernanceProfile#Service' 
and classifiedByAnyOf(
'http://www.ibm.com/xmlns/prod/serviceregistry/6/1/GovernanceProfileLifecycle#Model'
)]";	
mbeanProxy.addPermissionToRole("QDIIExecuter", "srrUpdate",
 "updateBusinessServiceModel", target);
}

添加 QDII 产品分类标志

另外新服务所使用的分类 ChinaQDII 在 WSRR 的领域分类系统中并不存在,当营销策划部创建新服务的时候,还需要创建一个新的分类,示例代码如下:

FileInputStream stream = new FileInputStream("C:/domain.owl");
byte[] b = new byte[stream.available()];
stream.read(b);
mbeanProxy.replaceOntologySystem(
"http://www.ibm.com/xmlns/prod/serviceregistry/6/1/GovernanceProfileTaxonomy", b);

其中 domain.owl 文件是包含 ChinaQDII 分类的新的分类系统定义文件,可以通过 JMX 客户端将该新的分类系统的定义更新到 WSRR 中。

当新服务正式对外开放的时候,终端用户可以通过 REST 方式获取该服务的信息,下面将具体介绍 Rest client 的建立与使用。

Rest 客户端的建立与使用

WSRR 提供 Rest 服务,用户可以利用 HTTP 方法,例如:GET、POST、PUT 和 DELETE对 WSRR 中的资源进行操作。WSRR 6.2 所支持的 Rest 功能包括如下几个方面:

  1. 创建文档
  2. 删除文档
  3. 获取文档内容
  4. 更新文档内容
  5. 创建元数据信息
  6. 删除元数据信息
  7. 获取元数据信息
  8. 更新元数据信息
  9. 查询元数据信息

Rest 客户端的建立

Rest 客户端的主要功能是通过构造不同的 HTTP 方法,并将这些方法作用于与资源相对应的URL 之上,从而实现对资源的创建、删除、修改或更新操作,其中 HTTP GET 方法用于获取内容,HTTP POST 方法用于创建新的内容,HTTP PUT 用于更新内容,HTTP DELETE 方法用于删除内容。用户可以手动构造这些方法,也可以借助于一些工具包的帮助,例如 apach 的 commons-httpclient-3.1.jar。利用该 jar 包构造 HTTP POST 方法的示例代码如下:

public void post(String url, InputStream is){
HttpClient client = new HttpClient();
PostMethod pm = new PostMethod();
try {
URI uri = new URI(url);
pm.setURI(uri);
if(is!=null){
InputStreamRequestEntity requestEntity = new
 InputStreamRequestEntity(is); 
pm.setRequestEntity(requestEntity);
}
client.executeMethod(pm);
} catch (URIException e) {
e.printStackTrace();
} 
}

该方法用来往 url 所指定的资源里面添加新内容,新内容以 InputStream 的方式传递。

Rest 客户端的使用

对资源所属 url 的构造是使用 REST 服务的关键,WSRR REST 服务的 root url 为http://host:port/WSRR/6.2,所提供的功能以及对应的资源的 URL 如表4-1所示:


表 4-1. REST API 所操纵资源的 URL
操作 URL
发布文档 /WSRR/6.2/Content/<document type>?name=docName
获取/更新/删除文档 /WSRR/6.2/Content/<bsrURI>
获取/更新/删除所有元数据信息 /WSRR/6.2/Metadata/XML/<bsrURI>
获取/更新/删除所有的property /WSRR/6.2/Metadata/XML/<bsrURI>/properties
获取/更新/删除所有的relationship /WSRR/6.2/Metadata/XML/<bsrURI>/relationships
获取/更新/删除所有的classification /WSRR/6.2/Metadata/XML/<bsrURI>/classifications
获取/更新/删除特定的property /WSRR/6.2/Metadata/XML/<bsrURI>/properties/<property name>
获取/更新/删除特定的relationship /WSRR/6.2/Metadata/XML/<bsrURI>/relationships/<relationship name>
利用Saved Query进行metadata查询 /WSRR/6.2/Metadata/XML/Query/<name>
利用Property Query进行metadata查询 /WSRR/6.2/Metadata/XML/PropertyQuery?query=…
利用Graph Query进行metadata查询 /WSRR/6.2/Metadata/XML/GraphQuery?query=…

在使用上述 URL 地址进行操作时,还需要以下两点:

  1. 利用 REST 服务往 WSRR 发布文档时,需要在 url 中指定正确的文档类型,而具体文档的内容需要以 InputStream 的方式传递给 HTTP POST 方法。目前 WSRR REST 服务支持的文档类型包括:WSDL,XSD,XML,Policy,GenericDocument 和 GenericObject。
  2. Rest 服务中 Metadata 的结构如图 6 所示:

图 6. Rest 服务中 Metadata 的结构

当需要更新某个对象的元数据信息时,除了在 url 中提供该对象的 bsrURI 之外,还需要构造类似以上形式的元数据信息,并以 InputStream 的形式传递给 HTTP PUT 方法。

用户获取服务信息

服务上线以后,也就是服务处于 Manage 状态时,终端用户可以通过 HTTP GET 方法获取服务信息,示例代码可以参考代码下载中类WSRRRestClient.java 中的queryService() 方法。该方法用来查询出所有状态为 Manage 的 business service,运行结果如图 7 所示:


图 7. 调用Rest服务的返回结果

该返回结果列出了 ChinaQDIIService 对象所有的属性,关系和分类信息。通过这种方式用户可以很方便的获取目前所有对外开放的服务。





回页首


总结

本文详细介绍了 WSRR API 的功能以及各种调用方式,包括 EJB client,web service client,REST client 和 JMX client。用户可以根据自己的实际需求选择合适的调用方式。

声明:本文仅代表作者个人之观点,不代表 IBM 公司之观点。






回页首


下载

描述名字大小下载方法
本文示例code.zip218 KBHTTP
关于下载方法的信息


最后更新于: 2009-02-09 23:25
 

欢迎转载

本站文章欢迎转载,但请注明出处(http://www.javajia.com,Java家)

其他相关文章