中国IT动力,最新最全的IT技术教程
最新100篇 | 推荐100篇 | 专题100篇 | 排行榜 | 搜索 | 在线API文档
首 页 | 程序开发 | 操作系统 | 软件应用 | 图形图象 | 网络应用 | 精文荟萃 | 教育认证 | 硬件维护 | 未整理篇 | 站长教程
ASP JS PHP工程 ASP.NET 网站建设 UML J2EESUN .NET VC VB VFP 网络维护 数据库 DB2 SQL2000 Oracle Mysql
服务器 Win2000 Office C DreamWeaver FireWorks Flash PhotoShop 上网宝典 CorelDraw 协议大全 网络安全 微软认证
硬件维护  CPU  主板  硬盘  内存  显卡  显示器  键盘鼠标  声卡音箱  打印机  机箱电源  BIOS  网卡  C#  Java  Delphi  vs.net2005
  当前位置:> Bea专区 > WebLogic Server
将Web站点转换为Web服务
作者:未知 时间:2006-08-10 05:07 出处:bea.com.cn 责编:月夜寒箫
              摘要:将Web站点转换为Web服务

作者:Jesper Jørgensen

  现今,面向服务架构(Service Oriented Architecture,SOA)承诺要帮助企业实现时间到价值的更快转换。这种想法不错,而没有行动,纸上谈兵往往一无所成。在SOA中,人们无法确保IT资产的重用,除非这些资产是可以访问的。SOA实现重用的一种方式是通过Web服务,然而,如果资产没有通过Web服务进行公开,或者公开资产的要求苛刻且代价昂贵,那么实现时间到价值的更快转换就变成了一个无法企及的目标。

  但是,如果您想公开的资产可以通过Web接口(例如,公司内部网上的一个传统应用程序)访问,情况会怎么样?如果存在一种非常简单的方式可以把这些资产公开为Web服务,情况又会怎么样?

  本文给出了一个完整的例子,通过使用RoboSuite WebLogic Edition产品,把Web站点转换为Web服务。该Web服务所包含的几种操作完整地封装了站点的全部功能。构造该Web服务不需要任何传统的编程,比如编写Java代码。

RoboSuite简介

  Kapow RoboSuite是一个Web集成平台,它允许用户轻松集成来自任意具有Web接口的应用程序的数据和功能。RoboSuite创建称为robot的集成组件,它可以接受输入并返回输出(就像一个Java方法一样)。Robot在一个称为RoboServer的服务器上执行。

  RoboSuite包含在BEA WebLogic Platform的一个特别版本中,这个特别版本包含几种特性,用于确保与BEA WebLogic Workshop之间的紧密集成。其中一个特性就是一个称为RoboSuite控件的可扩展控件。您可以从WebLogic Workshop中的controls菜单访问它,无需任何编程。在本文的例子中,我使用RoboSuite控件创建了一个控件(JCX文件),并使用它来创建Web服务。

  图1从WebLogic的角度显示了RoboSuite架构的概况。图中显示了RoboSuite组件,并说明了它们如何与WebLogic Workshop交互。RoboSuite包含代码生成工具,该工具知道WebLogic Workshop的应用程序和项目结构,可以生成易于使用的portlet和Web服务(.jws文件)。想要了解更多信息,请参见参考资料一节。

The RoboSuite architecture
图1. RoboSuite体系结构

下载和安装RoboSuite

  运行本文的例子需要安装RoboSuite。这只需花费几分钟时间,而且过程相当简单。按照如下步骤,就可以从BEA Web站点下载RoboSuite:

  • 访问www.bea.com
  • 打开Products菜单,然后从此菜单中选择Third Party Tools项。
  • 在Third Party Tools页面上,找到工具Kapow RoboSuite, BEA WebLogic Edition,然后点击More Information链接。
  • 点击链接Download Kapow RoboSuite, BEA WebLogic Edition.
  • 找到产品Kapow RoboSuite, BEA WebLogic Edition, Version 8.1,然后根据所使用的操作系统点击链接。
  • 按照站点上提供的指导进行安装。

  RoboSuite的当前版本是5.5 SR1。

例子简介

  这个例子是一个简单的电话记录应用程序,在这个应用程序中,用户可以查找、添加和删除电话号码。为了使例子更能说明问题,我使用了专门为此开发的应用程序,思路是让它可以提供大多数CRM、CMS和HR系统中提供的功能。您会发现,这个例子演示了一个真实的场景。我编写了三个robot,分别提供以下功能:搜索电话号码、添加电话号码和删除电话号码。本文没有描述如何编写这些robot。理由如下:首先,这会使本文的篇幅过长。其次,这是一个完美的真实场景,可以让其他人编写robot,然后您再由这些robot创建控件。编写robot与使用WebLogic Workshop中的应用程序所需的技巧未必相同。第三,RoboSuite文档详细描述了如何编写robot。

  本文将重点讲述创建一个RoboSuite控件的过程,该RoboSuite控件所包含的方法描述了上述三个robot所要执行的动作,然后我将展示如何使用这个控件创建具有相同方法的Web服务。这样做的意义在于,当您学会使用各种相关工具之后,就可以在几分钟之内完成从robot到Web服务操作方法的过程。完整的过程包括:编写三个robot;创建Web服务;最后,执行一个简单的测试。总共需要大约一个小时。如果使用传统的集成方法,这个过程需要的时间将会长的多。

Robot简介

  尽管本文没有把重点放在如何编写robot上,简要地描述一下robot还是有必要的。robot使用RoboMaker工具编写,该工具是RoboSuite的一部分。Robot类似于程序,但是robot的编程语言是完全可视化的(也就是说,robot没有直接的文本表示;robot实际上是以XML格式保存在.robot文件中,但是该格式是内部使用的,没有归档)。图2显示了RoboMaker中的一个例子robot,顶部给出了robot的步骤。左侧是浏览器视图,显示了当前步骤(以绿色表示)上Web文档的状态,而右侧是robot和当前步骤的配置窗格。


图2. RoboMaker中的add robot

  robot被设计为与一个或多个给定的Web站点(或这些站点中的一部分)进行交互。它们在更改站点方面可能具有一些健壮性,但不是一般的crawler。robot可以导航站点、执行登录、填写表单、在表上迭代、从页面提取信息,等等。简而言之,它们可以提供浏览器所能提供的一切功能。robot可以采用专门设计的对象(使用ModelMaker工具创建)作为输入和输出。robot可以使用输入对象来填写表单,而输出对象可以包含从Web站点提取的数据。

  robot由RoboServer服务器执行。客户端(在本例中就是控件)发送请求给RoboServer,要求运行某个robot,而RoboServer将会运行该robot并返回响应。请求可以包含输入对象,而响应可以包含输出对象,这取决于robot是否需要输入对象和是否返回输出对象。当robot转换为控件时,该控件将包含一个用于调用robot的方法。该方法包含一些对应于robot输入对象属性的参数。该方法的返回值要么包含robot返回的一个对象列表,要么包含这个列表的一部分(例如,第一个对象、第一个对象的属性,等等)。

  表1总结了例子中所使用的robot。

Robot

功能

输入对象

输出对象

  delete.robot

  从库中删除一个电话号码。

  PhoneUpdate包含一个姓名和一个电话号码。名字和电话号码是独有关键字。

  PhoneStatus包含一个状态字段(布尔值)和一条消息文本。

  add.robot

  在库中添加一个新的电话号码。

  PhoneUpdate包含一个姓名和一个电话号码。名字和电话号码是独有关键字。

  PhoneStatus包含一个状态字段(布尔值)和一条消息文本。

  search.robot

  在库中搜索姓名带有给定字符串的人的电话号码。

  PhoneSearch包含一个搜索字符串。

  0或多个PhoneNumber对象,包含姓名和电话号码。

表1. Robot小结

  robot和相应的方法都打包在一个称为robot库文件的zip文件中,在本例中称为phone.robotlib。构造robot和创建控件的工程师通常不是一个人,而robot库可以视为在这两者之间交换robot的部署单元。

对例子的解释

  在这里,我所做的事情有一点颠倒次序。一般人可能首先创建一个具有某种功能的控件,然后使用这个控件创建Web服务或其他应用程序。我将首先创建一个Web服务,然后再为这个Web服务添加控件。

创建新的Web服务

  要创建一个新的Web服务,右击要在其中创建它的Web服务项目,然后选择New > Web Service,如图3所示。

Creating a Web Service
图3. 创建Web服务

  本节运行了New File Wizard(参见图4),其中已经预先选择了Web服务文件类型。输入Web服务的名称,然后单击Create。

Selecting the name for the Web service
图4. 选择 Web服务的名称

创建RoboSuite控件

  创建Web服务之后,下一步就是创建RoboSuite控件。右击该Web服务,然后选择Add Control > RoboSuite Control,如图5所示。这将运行Insert Control Wizard(参见图6)。这个向导基本上是一个标准的WebLogic Workshop向导,但是其中的步骤3将取决于用户所选择的控件种类。

Adding a RoboSuite control
图5. 添加RoboSuite控件

  该向导中的头两个步骤是命名Web服务中的控件实例和命名控件文件(生成的JCX文件)。选择实例名称phone。这对应于Java风格的JCX文件中的一个字段名称,所以在这里必须遵从Java命名约定。JCX文件名类似于Java类名。为控件选择包名称controls,这既是实际的也是必需的做法。JCX文件位于一个称为controls的文件夹中,该文件夹为应用程序提供某种结构(此外,不能把控件放在默认的顶级包中)。

Naming the control
图6. 命名控件

  向导的最后一个步骤是配置控件。这个步骤由几个子步骤组成。第一个子步骤是选择robot所在的库。在本例中,robot位于本地文件系统中一个称为phone.robotlib的robot库文件中,所以必须选择Robot Library File at URL选项(参见图7)。另一个可能的robot位置在控件或RoboSuite附带的文档中有所描述。此处我不再详细讲述。

Selecting the Robot Library location
图7. 选择 Robot Library位置

  选定Robot Library的位置以后,必须指定有关库的更详细信息(例如库的URL),在本例中也不例外。我们指定了robot库文件在本地文件系统中的位置(参见图8)。

Selecting the Robot Library URL
图8. 选择 Robot Library URL

  指定了robot的完整位置之后,映射表就会显示库中的robot。映射的目的是定义robot和控件方法之间的映射。如果列表中的映射存在,那么对方法的调用就会导致对指定robot的调用。目标是为所有的三个robot定义映射,这样控件就包含一个可以执行robot所要执行的三种操作的方法:搜索、添加和删除。添加新映射的方法是,右击robot旁边的Mapping列,然后选择New…选项,如图9所示。

Creating a new mapping
图9. 创建新的映射

  该步骤运行了Map Editor(参见图10)。Map Editor推荐一种默认映射,它包含一个签名和一个方法的返回类型,从方法的输入参数到robot输入对象的属性的映射,以及从robot输出对象到方法结果的映射。对于add robot,有一个称为PhoneUpdate的输入对象,它有两个属性:name和number。编辑器推荐一种映射,在此映射中,方法的两个参数直接映射为PhoneUpdate对象的属性。对于输入来说,这似乎是合理的映射,所以我们将采用这种方法。

The map editor
图10.映射编辑器

  然而,输出的结果映射并不是您想要的。输出的这个结果映射指定,所有对象都将在一个列表中返回。对于add robot,您知道,有且只有一个对象会被返回,而且该对象是一个PhoneStatus对象。所以,还可以选择一种只返回第一个PhoneStatus对象的结果映射。Java对象PhoneStatus是位于Phone接口中的一个公共静态内部类,而Phone接口定义在所生成的JCX文件中。图11显示了如何选择结果映射。

Selecting the result mapping
图11. 选择结果映射

  图12显示了方法的最终映射。注意在选择映射之后方法声明是如何形成的。这个声明说明方法带有两个String参数(name和number),并返回PhoneStatus类型。单击OK,创建映射。

The final mapping
图12. 最终映射

  在例子中,我阐明了其他两个robot的相同过程,并且为其生成了方法(参见图13)。创建映射之后,余下惟一要配置的就是通信协议。这是控件与RoboServer通信时所使用的协议。图13说明了如何添加新协议。

Adding a new protocol
图13. 添加新协议

  有两种协议:socket协议和JMS协议。socket协议必须用于同步通信,而且配置起来是最简单的。只要指定运行RoboServer的机器的URL和用于通信的端口即可。JMS协议则必须用于异步通信,我在这里不讨论它。如果使用RoboSuite自带的默认脚本启动RoboServer,启动时就会在端口50000上使用socket协议,对于控件使用的socket协议,可以选择默认值(参见图14)。只要运行RoboServer与运行WebLogic Server的是同一台机器,就可以选择默认值。

The protocol dialog
图14. 协议对话框

  完成控件配置之后,单击Create(如图15所示),控件就会生成。

The fully configured control
图15. 配置完全的控件

  接下来的步骤包括为每个控件方法添加操作。图16说明了如何通过向Web服务上拖拉控件方法来为Web服务添加操作。

Creating an operation from a control method
图16. 从控件方法创建操作

  图17显示了添加了所有操作之后的完整Web服务。

The complete Web service
图17. 完整的Web服务

  在测试该Web服务之前,还有一项必须配置的内容。该Web服务的搜索操作将返回一个列表,其类型为Java类型java.util.List。因为WebLogic Workshop不知道列表上对象的类型,需要指定返回列表中包括哪些类型——在本例中,搜索操作包括Java类型controls.Phone.PhoneNumber。图18说明了如何指定。

Specifying the include Java types
图18. 指定所包含的Java类型

  现在可以测试Web服务了。测试时,RoboServer必须运行在本地机器上(与运行WebLogic Server的机器是同一台),而且这台机器必须在端口50000上使用socket协议。所以,在测试Web服务之前,要确保运行了这样的RoboServer。当Web服务显示在Design View(或Source View)中时,请单击WebLogic Workshop中的Start图标。这将启动WebLogic Workshop Test Browser(参见图19),可以在其中测试Web服务。

Testing the Web service
图19. 测试Web服务

  要测试add操作,只需在测试表单中为add方法输入一个姓名和一个电话号码,如图19所示,然后单击add.按钮。这将调用Web服务,然后浏览器就会显示结果,如图20所示。

The result of testing the add operation
图20. 测试add操作的结果

结束语

  本文介绍了一种把支持Web的应用程序转变为Web服务的快速方法。但是涉及到的不过是RoboSuite Control功能的皮毛。通常,生成的控件可以在使用其他类型控件的任何地方使用,例如在页面流、自定义控件或流程工作流中。在RoboSuite BEA WebLogic Edition中的WebLogic Workshop中还包括许多其他的特殊RoboSuite功能,我还没有介绍。这些功能包括:剪切portlet,Web服务生成,用于从JSP页面调用robot的一个标签库,以及用于编写自定义Java代码来执行robot的Java API。我将在以后的文章中陆续介绍这些更高级的功能。

代码

  尽管我建议您遵从本文中的指导,创建自己的Web服务和控件,我还是在下面给出了例子代码:

  • Web服务:phone.jws——应该位于Web服务项目的根目录中。
  • 控件:phone.jcx——应该位于Web服务根目录中的controls文件夹中。
  • robot库:phone.robotlib——应该位于Web服务根目录中的controls文件夹中。
关闭本页
 
首页 | 投资与合作 | 服务条款 | 隐私政策 | 收藏本站 | 设为首页 | 新用户注册 | 免责声明 | 使用帮助
Copyright ©2005-2008 chinaitpower.com All rights reserved. www.chinaitpower.com 版权所有