现今,面向服务架构(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文件)。想要了解更多信息,请参见参考资料一节。

图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。

表1. robot小结
robot和相应的方法都打包在一个称为robot库文件的zip文件中,在本例中称为phone.robotlib。构造robot和创建控件的工程师通常不是一个人,而robot库可以视为在这两者之间交换robot的部署单元。
对例子的解释
在这里,我所做的事情有一点颠倒次序。一般人可能首先创建一个具有某种功能的控件,然后使用这个控件创建web服务或其他应用程序。我将首先创建一个web服务,然后再为这个web服务添加控件。
创建新的web服务
要创建一个新的web服务,右击要在其中创建它的web服务项目,然后选择new > web service,如图3所示。

图3. 创建web服务
本节运行了new file wizard(参见图4),其中已经预先选择了web服务文件类型。输入web服务的名称,然后单击create。

图4. 选择 web服务的名称
创建robosuite控件
创建web服务之后,下一步就是创建robosuite控件。右击该web服务,然后选择add control > robosuite control,如图5所示。这将运行insert control wizard(参见图6)。这个向导基本上是一个标准的weblogic workshop向导,但是其中的步骤3将取决于用户所选择的控件种类。

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

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

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

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