IBM®
跳转到主要内容
    中国 [选择]    使用条款
 
 
Select a scope: Search for:    
    首页    产品    服务与解决方案     支持与下载    个性化服务    
跳转到主要内容

developerWorks 中国  >  SOA and Web services  >

开发网格计算应用程序,第 2 部分

介绍网格体系结构和用来构建网格解决方案的工具箱

developerWorks
文档选项

未显示需要 JavaScript 的文档选项


级别: 初级

Liang-Jie Zhang (zhanglj@us.ibm.com), 研究员, IBM T.J.Watson Research Center
Qun Zhou (qzhou@us.ibm.com), 软件工程师, IBM Software Group
Jen-Yao Chung (jychung@us.ibm.com), 研究员, IBM T.J.Watson Research Center

2002 年 12 月 01 日

本系列文章的 第 1 部分介绍了网格计算和开放网格服务体系结构(Open Grid Services Architecture,OGSA)的基本思想以及使用高级 Web 服务技术完善 OGSA 的一些想法。在本文中,Liang-Jie Zhang、Qun Zhou 和 Jen-Yao Chung 继续介绍网格解决方案体系结构,该体系结构包含基于逻辑和物理网格两种范畴的网格解决方案。他们还将使用 StockQuoteGrid 演示如何用 Globus Toolkit 开发和调用网格服务。

创建网格解决方案是为了使应用程序能够共享数据和计算资源,同时还能够用一种高效率的方式跨多个组织访问它们。在构建一个分布式解决方案时,我们需要一些标准的方法在多个位置共享和访问应用程序 ― 随着公司的发展,这种方法会变得更加重要。其中一个关键问题是要找到更标准且伸缩性更好的方法在分布式环境内把数据和其他计算资源与应用程序集成在一起。

目前传统的基于软件的网格解决方案通常需要安装在防火墙后。这些“本地”网格解决方案不仅依赖于平台,而且相互之间还存在不兼容的通信协议。此外,它们提供的用来与其他“本地”网格通信的集成机制极少。由于专有接口的原因,向现有的“本地”网格添加来自不同供应商的新应用程序也非常困难。另一个问题是要找到一种方法以便快速而轻松地用一个安全的、成本低且易管理的解决方案把不同的“本地”网格提供的服务和外部业务流程集成在一起。

构建网格解决方案要面临的挑战

通常情况下,不同平台上的远程应用程序系统都是网格解决方案的一部分。构建网格解决方案时我们面临的难题包括:

  • 全面的管理
  • 资源供应
  • 应用程序集成
  • 数据共享和访问
  • 活动监控
  • 基于策略的网格管理机制

因此,我们应该找到一种方法来构建一个全面的管理系统,该系统要使解决方案创建者和管理员能轻松地注册一个新的网格服务,并且还能管理其他网格的概要文件。管理员或服务供应商将选择使特定的计算资源对网格解决方案是可见的。我们把这个过程称为 资源供应(Resource provisioning)。还应该应用相应的授权机制来保护资源的安全并使特定的请求者可以访问它们(特定的请求者可以是一个应用程序、一个长时间运行的业务流程或者另一个网格解决方案)。我们在前面的文章中已经讨论过,应该把敏感数据、私有应用程序和机密信息分派到确实私有的地方,比如私有的 统一发现、描述和集成(Universal Discovery, Description, and Integration,UDDI)注册中心,它提供特殊类型的应用程序。应用程序请求者需要统一的数据访问机制来共享和访问数据以及应用程序。另外,还应该创建资源管理器来访问位于不同网格的资源。

网格的目的是利用计算资源(而不必考虑资源所在的位置或平台)来执行涉及到各个方面的任务。例如,某个国家的某个地方的一些个人计算机设计师与正在设计不同计算机组件的这个国家其他地方、甚至其他国家的其他设计小组成员合作创建电脑辅助设计(Computer Aided Design,CAD)绘图。那么每个组怎样才能共享设计文件、访问设计更改和进行修改呢?这是网格解决方案中典型的设计合作案例。并且,网格解决方案已经被构建为支持精密计算研究,比如药物研制、财政分析、动态能量分配、国防研究和天气预报。(请参阅 参考资料)。

因此,我们必须找到一个灵活的解决方案体系结构使多个合作者能够用一种安全且易管理的方法共享资源。稍后在本文中,我们将介绍一个网格解决方案体系结构,该体系结构包含基于逻辑和物理网格两种范畴的网格解决方案,还包含一个基于外购服务的业务网格(Business Grid)框架。我们将以 StockQuoteGrid 为例演示使用 Globus Toolkit(请参阅 参考资料)开发和调用网格服务所需的详细过程。





回页首


网格解决方案体系结构

在我们看来,每个网格解决方案都可以配置成两类网格: 物理的逻辑的,如 图 1所示。物理网格指的是可以在分布式网络上共享的计算机计算能力和其他硬件资源。这是为特定的任务预定义的配置。逻辑网格指的是软件和应用程序共享以及更高级的业务流程共享。从理论上说,物理网格可以作为被多个逻辑网格(它们提供特定的功能)使用的组件网格。一个逻辑网格可以由多个物理网格构成,这些物理网格共同合作来执行某个特定的任务,比如天气预报和财政分析。一般情况下都可以根据客户的需求动态配置逻辑网格。一个典型的物理网格是计算机计算能力共享基础架构。数据网格是一个逻辑网格示例,在需要时它利用多个现有的物理网格。


图 1. 网格解决方案体系结构
网格解决方案体系结构

在图 1 所示的网格解决方案体系结构中,我们需要允许管理员控制对网格资源的访问并使用户或应用程序可以访问网格资源。至于开发,您可以使用 OGSA 和 Globus Toolkit,它们解决了安全性、信息基础架构、资源管理、通信、错误检测和移植性等问题。OGSA 是一个面向服务的网格体系结构(请参阅 参考资料)。网格服务是 OGSA 的基本概念。它是一种特殊的 Web 服务,提供一组定义完善的接口并且遵守特定的约定。网格服务的接口解决了查找、动态服务实例创建、生命周期管理、通知和易管理性等问题;网格服务的约定解决了命名问题及升级问题。这种网格服务可以部署在不同的托管环境,甚至不同的操作系统中。OGSA 还提供了一种网格安全机制来确保服务间所有的通信都是安全的。所有的服务(持久的或瞬时的)都是用 Globus Toolkit 构建的。

图 2演示了一个集线器风格的网格解决方案系统,该系统使用逻辑网格来实现服务外购。这个解决方案案例是一个典型的用于业务流程集成的合作式逻辑网格解决方案。所以,我们还把这种逻辑网格称为“业务网格(Business Grid)”。在图 2 中,每个服务都可以作为网格服务部署,这样其他的应用程序就可以通过标准的通信协议(比如 简单对象访问协议(Simple Object Access Protocol,SOAP)使用和访问它。

业务网格可以连接到业务网格(集线器)自身托管的或注册了业务网格的服务提供者托管的所有服务。应用程序客户机可以使用 XML、HTTP 上的 SOAP、SMTP、FTP 或 MQ 协议连接到业务网格。业务网格与外部的旧应用程序、Web 服务提供者、客户的供应链管理(Supply Chain Management,SCM)、供应商的企业关系计划(Supplier's Enterprise Relationship Planning,ERP)或合作伙伴的客户关系管理(Partner's Customer Relationship Management,CRM)进行通信。业务网格通过提供会员资格管理服务、数据格式转换服务、业务协议转换服务、高级查找服务和业务流管理服务来负责提供互操作性,以便连接到使用不同传输、数据格式和业务协议的多方参与者。


图 2. 一个网格服务外购示例图
一个网格服务外购示例图

另外,业务流程还包含许多业务交互,这些业务交互带有有状态、长时间运行的涉及到两方或更多方的交互。随取即用的业务流程是下一代电子商务的更高级需求。例如,图 2 中所示的 Enterprise A 的业务流程由多个外购的网格服务(比如来自 Enterprise B 的 Purchase Order Creation 网格服务、来自 Enterprise B 的 Credit Checking 网格服务以及来自 Suppliers 的 Shipping 网格服务)组成。因此,外购客户仅需的软件是 Web 浏览器或处理 SOAP 通信的轻量级连接适配器。企业客户不需要安装昂贵的软件。例如,客户可以使用 Web 浏览器注册业务网格。对于每个用户,他们的角色可以被指定为提供网格服务的一般用户(regular user)、业务管理员(business administrator)、服务供应经理(service provisioning manager)和服务订阅经理(service subscription manager)。

业务网格可以与多个本地网格(比如 Supplier 的本地网格和 Enterprise B 的本地网格)进行交互,如图 2 所示。业务网格是一个用来进行外购的中心框架,它包含多个已连接的本地网格。每个网格都可以有买方、供应方、服务提供者和贸易伙伴。业务网格框架可以有多个虚拟的业务网格,如果需要的话,这些网格可以共享同一信息基础架构并互相交互。





回页首


网格服务开发与调用

接下来,我们将介绍网格解决方案体系结构(Grid Solution Architecture)这个概念,随后再介绍我们用 OGSA Toolkit 构建的示例。为方便起见,我们已经创建了一个股票报价网格服务(Stock Quote Grid Service),它就在 OGSA 软件包中。它与 OGSA Globus Toolkit 中包含的天气网格服务(Weather Grid Service)有类似的打包风格。这部分将演示如何编写插入到 OGSA 的解决方案框架内的网格服务。按照 OGSA 开发框架(OGSA Development Framework,OGSADF)(请参阅 参考资料),编写一个服务并将它插入到框架中需要下面的五个主要步骤:

  1. 为网格服务定义创建 WSDL
  2. 为 WSDL 定义生成 Java 代理
  3. 编写服务端实现代码
  4. 编写客户机端实现代码
  5. 用 OGSA 服务浏览器部署并测试网格服务

所以您可以为服务提供自己的 WSDL 定义,也可以使用内建的 ant 目标根据 Java 接口创建 WSDL 文件。核心服务接口是网格服务(Grid service)、工厂(factory)、注册中心(registry)、通知(notification)和句柄映射(handle map)。服务定义被用作组成服务实现的构件。在我们的示例中,将开发一个股票报价网格服务,如 图 3。这个股票报价网格服务被部署在 Apache Tomcat 上,后者是 Apache 的一个应用程序容器,它将调用部署在 IBM WebSphere Application Server 上的股票 Web 服务(请参阅 参考资料)。


图 3. 本地网格平台
本地网格平台示例

股票网格服务实现是一个可设定地址的、并可能会有状态的实例,它实现了聚集 serviceType 上下文中的 WSDL portType 所描述的一个或多个接口。清单 1 显示了描述股票网格服务的 WSDL 文件( stock_service.wsdl )。这个网格服务的名称是 StockService。name 属性为外围的 WSDL 文档中定义的服务提供了唯一的名称,使所有这些服务都可以区分开来。这个 WSDL 文件引用了两个文件(在清单 1 中突出显示): stock_bindings.wsdlstock_port_type.wsdl


清单 1. 股票网格服务(WSDL,stock_service.wsdl)
<?xml version="1.0" encoding="UTF-8"?>
<definitions name="StockDefinition" targetNamespace="
http://samples.ogsa.globus.org/stock"
xmlns="http://schemas.xmlsoap.org/wsdl/"
xmlns:weather-bindings="http://samples.ogsa.globus.org/
stock/stock_bindings"
xmlns:grid-service-bindings="http://ogsa.gridforum.org/
service/grid_service_bindings"
xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/">
        
					
          <import location="stock_bindings.wsdl"
   namespace="http://samples.ogsa.globus.org/stock/stock_bindings"/>
            
<import location="../../core/service/grid_service_bindings.wsdl" namespace="http://ogsa.gridforum.org/service/grid_service_bindings"/>
<service name=" StockService" > <documentation> Stock service demonstrating integration of 3rd party stock Web Service </documentation> <port binding="stock-bindings:StockSOAPBinding" name="StockPort"> <soap:address location="http://localhost:8080/ogsa/services"/> </port> <port binding="grid-service-bindings:GridServiceSOAPBinding" name="GridServicePort"> <soap:address location="http://localhost:8080/ogsa/services"/> </port> </service> </definitions>

清单 1 中显示的 WSDL 文档定义了两个端口: StockPortGridServicePort 。端口通过为一个绑定指定一个地址来定义一个独立的端点。name 属性为 WSDL 文档内定义的每个端口都提供一个唯一的名称。binding 属性用 WSDL 定义的链接规则引用绑定。这个 WSDL 描述一个 SOAP 请求可能会被通过 SOAP HTTP 绑定发送到 StockService 服务。

清单 2 中显示的 stock_bindings.wsdl 文档描述了一个 getQuotesetSymbol SOAP 请求可能会被通过使用 SOAP HTTP 绑定发送到 StockServicestock_port_type.wsdl 文档被导入到 stock-binding.wsdl 中。


清单 2. 股票网格服务(WSDL,stock_bindings.wsdl)
<?xml version="1.0" encoding="UTF-8"?>
<definitions name="StockDefinition" 
targetNamespace="http://samples.ogsa.globus.org/stock/stock_bindings"
xmlns:stock-port-type="http://samples.ogsa.globus.org/stock/stock_port_type"
xmlns="http://schemas.xmlsoap.org/wsdl/"
xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/">
        
					
          <import location="stock_port_type.wsdl"
   namespace="http://samples.ogsa.globus.org/stock/stock_port_type"/>
				
        
<binding name="
        
					
          StockSOAPBinding
				
        " type="stock-port-type:StockPortType">
   <soap:binding style="document" transport="http://schemas.xmlsoap.org/
   soap/http"/>
   
        
					
          <operation name="getQuote">
				
        
      <soap:operation soapAction="http://samples.ogsa.globus.org/
      stock#getQuote"/>
      <input>
         <soap:body use="literal" namespace="http://samples.ogsa.globus.org/
         stock"/>
      </input>
      <output>
         <soap:body use="literal" namespace="http://samples.ogsa.globus.org/
         stock"/>
      </output>
   </operation>
   
        
					
          <operation name="setSymbol">
				
        
      <soap:operation soapAction="http://samples.ogsa.globus.org/
      stock#setSymbol"/>
      <input>
         <soap:body use="literal" namespace="http://samples.ogsa.globus.org/
         stock"/>
      </input>
      <output>
         <soap:body use="literal" namespace="http://samples.ogsa.globus.org/
         stock"/>
      </output>
   </operation>
</binding>
</definitions>
      

在清单 3 中, portType 是网格服务接口的一部分。这个文档中已经定义了操作名(也就是网格服务内的方法名)和输入/输出参数。客户机工具将使用这些信息识别一些 portType 与单个服务之间的所属关系,这样它就可以正确地生成客户机代理,并且能够正确地绑定存根。这些信息还可以被客户机用来简化股票网格服务支持什么 portType 的发现。


清单 3. 股票网格服务(WSDL,stock_port_type.wsdl)
<?xml version="1.0" encoding="UTF-8"?>
<definitions name="StockDefinition" 
targetNamespace="http://samples.ogsa.globus.org/
stock/stock_port_type"
xmlns:tns="http://samples.ogsa.globus.org/stock/stock_port_type"
xmlns="http://schemas.xmlsoap.org/wsdl/"
xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<types>
   <xsd:schema targetNamespace="http://samples.ogsa.globus.org/stock/
   stock_port_type"
   xmlns:tns="http://samples.ogsa.globus.org/stock/stock_port_type"
   xmlns:ogsa-types="http://ogsa.gridforum.org/types"
   xmlns:xsd="http://www.w3.org/2001/XMLSchema">
      <xsd:complexType name="QuoteType">
         <xsd:sequence>
            <xsd:element name="quote" type="xsd:float"/>
         </xsd:sequence>
      </xsd:complexType>
      <xsd:element name="getQuote">
         <xsd:complexType/>
      </xsd:element>
      <xsd:element name="getQuoteResponse" type="tns:QuoteType"/>
      <xsd:element name="setSymbol">
         <xsd:complexType>
            <xsd:sequence>
               <xsd:element name="symbol" type="xsd:string"/>
            </xsd:sequence>
         </xsd:complexType>
      </xsd:element>
      <xsd:element name="setQuoteResponse" type="tns:QuoteType"/>
   </xsd:schema>
</types>
<message name="GetQuoteInputMessage">
   <part name="parameters" element="tns:getQuote"/>
</message>
<message name="GetQuoteOutputMessage">
   <part name="parameters" element="tns:getQuoteResponse"/>
</message>
<message name="SetSymbolInputMessage">
   <part name="parameters" element="tns:setSymbol"/>
</message>
<message name="SetSymbolOutputMessage">
   <part name="parameters" element="tns:setSymbolResponse"/>
</message>
        
					
          <portType name="StockPortType">
   <operation name="getQuote">
      <input message="tns:GetQuoteInputMessage"/>
      <output message="tns:GetQuoteOutputMessage"/>
   </operation>
   <operation name="setSymbol">
     <input message="tns:SetSymbolInputMessage"/>
     <output message="tns:SetSymbolOutputMessage"/>
   </operation>
</portType>
				
        
</definitions>
      

除 UDDI 注册中心外,还可以将网格服务发布到 WS-Inspection Language(WSIL)文档。在目前的 OGSA 实现中,它只支持把网格服务发布到 WSIL。WSIL 不需要 UDDI 注册中心就能够发现、部署和调用网格服务。但 OGSA 可能会在不久的将来支持 UDDI 注册中心。

现在,我们来研究一下详细的网格服务实现。实现一个服务的简单方法是从 ServiceSkeleton Java 类继承,然后实现端口类型接口中的所有操作,这些接口已经在先前的步骤中生成了。清单 4 中显示了股票网格服务实现。就象先前 图 3中显示的那样,这段代码的基本思想是使用 Globus 包和常规的 Java 包调用股票报价 Web 服务。


清单 4. 股票网格服务实现(StockImpl.java)
package org.globus.ogsa.impl.samples.stock;
import org.globus.ogsa.impl.core.service.ServiceSkeleton;
import java.rmi.RemoteException;
import org.globus.ogsa.samples.StockPortType;
import java.net.URL;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
public class StockImpl extends ServiceSkeleton implements StockPortType {
    private String sID = "IBM";
    private QuoteServiceLocator quoteService;
    private QuotePortType quotePort;
    static Log logger = LogFactory.getLog(StockImpl.class.getName());
    public StockImpl() {
        super("Sample Stock Service");
        try {
            this.quoteService = new QuoteServiceLocator();
            this.quotePort = this.quoteService.getQuotePort (
              new URL("
        
					
          http://zhanglj/soapsamples/servlet/rpcrouter
				
        ") );
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
    public float setSymbol(String sID) throws RemoteException {
        this.sID = sID;
        return getQuote();
    }
    public float getQuote() throws RemoteException {
        logger.debug("Getting quote for stock: " + sID);
        return (this.quotePort.getQuote (this.sID)).floatValue();
    }
}
      

在刚才的 清单 3 中,突出显示的代码(用蓝色显示)演示了股票报价 Web 服务,该服务部署在“zhanglj”这台机器上。图 4 显示了关于股票报价 Web 服务的已部署服务信息。这个 Web 服务的标识是 urn:xmltoday-delayed-quotes 。它是一个 Java 应用程序,带有一个方法: getQuote


图 4. 部署在 WAS 4.0 上的股票报价 Web 服务
部署在 WAS 4.0 上的股票报价 Web 服务

接下来,我们需要为股票网格服务创建一个服务工厂(Service Factory)。股票网格服务工厂将被用来创建给定 serviceType 的实例。每个股票网格服务实例都有一个唯一的标识(例如稍后将在 图 6图 7 中显示的 MyStockGridService ),以便与系统中的其他实例区分开。

我们已经编写了一个类,它继承 FactoryServiceSkeleton 并提供了 createServiceObject 方法的一个实现来创建 清单 4 中创建的一个服务实现的实例。清单 5 中显示了 StockFactoryImpl.java


清单 5. 股票网格服务工厂(StockFactoryImpl.java)
package org.globus.ogsa.impl.samples.stock;
import org.globus.ogsa.impl.core.factory.FactoryServiceSkeleton;
import org.gridforum.ogsa.CreationType;
import javax.xml.rpc.namespace.QName;
/**
 * Connect to a live stock service implemented as a Web Service
 */
public class StockFactoryImpl extends FactoryServiceSkeleton {
    public StockFactoryImpl() {
        super("Sample Stock Service (Gateway to Live Service)");
    }
    public QName getServiceType() {
        return new 
        
					
          QName("http://samples.ogsa.globus.org/stock",
        "StockPortType");
				
        
    }
    public Object createServiceObject(CreationType creation) {
        return new StockImpl();
    }
}
      

创建了股票网格服务后,我们就可以用 OGSA 服务浏览器查看部署在样本服务容器内的所有网格服务。如果您想用 OGSA 服务浏览器创建股票网格服务实例并调用它,则必须编写几行代码来创建一个 GUI 以允许用户输入参数并在屏幕上看到执行结果。看一下 OGSA toolkit 包中包括的样本代码就可以很轻松地创建出这样一个 GUI。

在图 5 中,我们可以发现新创建的股票网格服务(样本股票服务)显示在根据 WSIL 文档创建的网格服务列表中。我们还可以使用这个服务浏览器在这个网格服务注册中心查看 WSDL 文档和 WSIL 文档。


图 5. 网格服务注册中心
网格服务注册中

我们在本系列文章的第 1 部分中已经提到过,OGSA 使应用程序和应用程序用户能够创建瞬时服务,并且还能够发现可用网格的属性并对这些属性求值。OGSA 工厂、注册中心、网格服务和 HandleMap 接口涵盖了在实际的组织内创建瞬时网格服务实例、发现和描述服务等方面。我们可以使用 OGSA 网格服务(OGSA Grid Service)浏览器创建图 6 中所示的名为 MyStockGridService 的实例。


图 6. 网格服务实例的创建
网格服务实例的创建

用户应用程序调用工厂接口上的“创建网格服务”请求来创建新的服务实例。新创建的与网格服务接口相关联的服务实例将被自动分配计算资源。同时,在服务实例被创建之前就可以为该实例指定初始生命周期。就象电子商务解决方案中的单一登录一样,新创建的服务实例将保存用户凭证以便与因特网上的其他系统进行进一步的交互。新创建的网格服务实例将被自动赋予一个名为 网格服务句柄(Grid Service Handle,GSH)的全局唯一名称,该名称被用来把这个特定的服务实例与其他的网格服务实例区分开。

除使用 GSH 外,还可以通过使用 网格服务引用(Grid Service Reference,GSR)访问股票网格服务实例。GSH 和 GSR 都被链接到了应用程序服务器托管的特定网格服务实例上。客户机应用程序可以使用 GSR 把 SOAP 请求直接发送到特定的实例。

现在,我们可以设置股票符号并从因特网获取股票报价。这些价格信息被部署在机器“zhanglj”上的 StockQuote Web 服务检索。作为图 7 中显示的一个示例,我们把股票符号设为“IBM”。然后,我们可以调用网格服务实例来获得最新的报价信息。返回的价格是 $79.35(2002 年 8 月 17 日 10:00AM)。


图 7. StockQuote 网格服务调用
StockQuote 网格服务调用




回页首


结束语

在本文中,我们已经介绍了网格解决方案体系结构这个概念以及用来进行网格服务外购的“业务网格”方法。然后,我们给出了一个本地网格平台示例,它将 Web 服务封装在网格服务的实现中。此外,我们还演示了使用 Globus OGSA toolkit 创建和调用网格服务的详细过程。

网格计算与 Web 服务的集成仍处于早期阶段。把网格计算引入业务服务(流程)外购在不久的将来将依然是一个充满挑战和希望的研究课题。我们可以利用 Web 服务与 OGSA 来构建电子商务解决方案基础架构。同时,我们还可以使用网格计算平台来共享和访问因特网上的计算资源。随着自主运算(Autonomic computing)― 这种运算管理已创建的解决方案基础架构 ― 的发展,OGSA 会成为把电子商务推向未来的关键。





回页首


致谢

作者在此要感谢 Global Grid Forum、Globus.org 和其他组织及个人,他们提供了本文中介绍的网格计算和 OGSA(包含在 Globus Toolkit)这两方面的相关资料。本文中介绍的端到端网格股票服务解决方案包含 Globus 项目(http://www.globus.org/)开发和/或派生出的软件。



参考资料



作者简介

Liang-Jie Zhang是 IBM 的 T.J.Watson Research Center 的一名研究员,在那里,他积极从事使用 Web 服务和网格计算的企业应用程序集成和设计协作(Enterprise Application Integration and Design Collaboration)方面的研究。他是 Business Explorer for Web Services(BE4WS)Web Services Outsourcing Manager的首席设计师。他的其他研究兴趣包括 B2B 集成中心框架和宽带-媒体业务。他已经组织了几次关于 Web 服务计算(Web Services Computing)网格计算(Grid computing)的竞赛,并且还是 GRID 2002 的一名程序委员会委员(program committee member)。您可以通过 zhanglj@us.ibm.com与 Liang-Jie 联系。


Qun Zhou 是 IBM 的 Software Group 的一名软件工程师,在那里,她一直从事媒体搜索和分类工作。她还深入研究 Web 服务及其在媒体内容分发和搜索方面的应用。您可以通过 qzhou@us.ibm.com与 Qun 联系。


Jen-Yao Chung 是 IBM 的 T.J. Watson Research Center 的一名研究员。他目前是 electronic commerce and supply chain 部门的高级经理,同时还是 IBM Institute for Advanced Commerce技术办公室的程序主管(program director)。他曾经参与过电子商务、电子市场、基于 Web 的应用系统和业务流程集成与管理的研究、开发和客户接洽。您可以通过 jychung@us.ibm.com与 Jen-Yao 联系。




对本文的评价










回页首


IBM 公司保留在 developerWorks 网站上发表的内容的著作权。未经IBM公司或原始作者的书面明确许可,请勿转载。如果您希望转载,请通过 提交转载请求表单 联系我们的编辑团队。
    关于 IBM 隐私条约 联系 IBM 使用条款