WebSphere Integration Developer指导教程 第3部分 构建面向服务的简单应用程序.docx
- 文档编号:7667102
- 上传时间:2023-01-25
- 格式:DOCX
- 页数:24
- 大小:755.70KB
WebSphere Integration Developer指导教程 第3部分 构建面向服务的简单应用程序.docx
《WebSphere Integration Developer指导教程 第3部分 构建面向服务的简单应用程序.docx》由会员分享,可在线阅读,更多相关《WebSphere Integration Developer指导教程 第3部分 构建面向服务的简单应用程序.docx(24页珍藏版)》请在冰豆网上搜索。
WebSphereIntegrationDeveloper指导教程第3部分构建面向服务的简单应用程序
WebSphereIntegrationDeveloper指导教程第3部分构建面向服务的简单应用程序
引言
本系列的前一篇文章讨论了WebSphereIntegrationDeveloper的基本概念及其提供的一套工具。
在该文中,我们还了解了使用面向服务的体系结构构建订单处理应用程序(OrderProcessing)的主要步骤。
您可能此时尚未读过上一篇文章,或者已经读过了,但却记不清所有细节。
不用担心,在深入了解如何实现应用程序的服务前,我们将简要进行一下回顾,从而为进行一步讨论奠定基础。
订单处理应用程序(OrderProcessing)从外部客户接收订单信息。
然后将检查客户的声誉是否良好(最好是极为富有),如果是,则将订单转发到配送部门。
当配送部门确认了订单已配送后,将输出一条消息。
要实现此应用程序,我们需要一个表示订单信息的业务对象。
业务对象有时候被称为应用程序的货币,因为所有的服务都要使用业务对象。
谈到服务,我们还将需要用于检索订单、检查客户信息和配送订单的服务。
这些服务在图1中表示为三个黑框。
图1.一个简单的订单处理应用程序
在前一篇文章中我们了解到,可以在不知道任何服务的实际实现细节的前提下定义每个服务,并将其连接到一起。
为此,我创建了一个模块(OrderProcessingModule),然后再创建每个服务。
接下来,我们标识了每个服务将支持的接口,以及其计划调用的每个其他服务的接口。
最后,我们根据服务间的调用关系将各个服务连接到一起。
此方法极为有用,因为它允许采用自顶向下方法设计整个应用程序,而在完成整个体系结构前都不必担心每个服务的实现。
事实上,我们可以让一个设计人员设计整个面向服务的体系结构的布局,而让每个团队成员基于架构师所指定的契约(接口)实现其中的一个服务。
将要学习的内容
现在我们已经对订单处理应用程序进行了回顾,接下来就要开始着手进行构建工作了。
在以下的部分中,您将了解如何完成以下任务:
创建模块来承载将创作的所有构件。
创建业务对象来标识客户订单。
创建组件及其接口。
将组件连接到一起。
指定这些组件的实现。
在WebSphere测试环境中部署并测试所构建的内容。
创建OrderProcessing模块项目
要开始构造应用程序,将需要一个项目来承载业务对象、组件和接口。
我们将创建的项目是服务组装模块项目(简称模块项目)。
这是一种特殊的项目类型,可识别不同构件类型(业务对象、组件等),并能在WebSphereProcessServer上部署和运行。
模块项目与图1中外部的蓝色大框对应。
请注意,所有组件、接口和连接线都包含在蓝色大框中,因此将全部包含在我们的新项目模块中。
闲话少说,让我们马上开始进行实际的构建工作。
提示:
如果在视图中选定了内容,弹出菜单将只显示与当前选定内容相关的菜单项,因此可能需要从下拉菜单中单击New>Project>Module。
提示:
首次打开WebSphereIntegrationDeveloper工作台时,将会打开BusinessIntegration透视图,且BusinessIntegration视图位于工作台的顶部
确保打开了BusinessIntegration透视图。
右键单击BusinessIntegration视图,并选择New>Module。
在NewModule向导中输入OrderProcessing作为模块名称。
单击Finish。
WebSphereIntegrationDeveloper将创建名为OrderProcessing的项目,如图2中所示。
您可能还记得,我们在本系列的前一篇文章中讨论的不同类型的组件。
BusinessIntegration视图会基于其类型对组件进行归类:
流程组件、状态机组件等。
与此类似,将基于类型对资源进行归类:
业务对象位于DataTypes下,而每个组件的接口位于Interfaces下。
BusinessIntegration视图基于类别的结构非常便于查找特定类型的构件。
BusinessIntegration视图还提供其他几个用于排序和导航构件的选项。
图2.OrderProcessing项目
创建Order业务对象类型
在本部分中,我们将创建业务对象来保存订单信息。
Order业务对象将在组件执行业务逻辑时在组件间进行传递。
Order业务对象将包含以下特性:
订单号
产品ID
订购数量
下订单的客户的标识符
产品ID和客户ID可以包含文字数字数据,因此将为string类型。
订单号和数量将为int类型,因为其中将仅包含整数。
要创建Order业务对象,请按照以下步骤进行操作:
在OrderProcessing项目中右键单击DataTypes类别,并选择New>BusinessObject。
在NewBusinessObject向导的Name字段中输入Order,其余字段保留缺省值,并单击Finish。
现在已经有了业务对象,接下来要创建一些特性来保存订单信息。
创建特性的操作非常方便而快捷:
确保在BusinessObjectEditor中选中了Order业务对象。
创建业务对象时,将缺省选中该业务对象。
要创建四个特性,请右键单击Order对象,并选择AddAttribute。
重复此操作三次。
选择attribute1(第一个缺省名称),并将其替换为orderNumber。
单击缺省的string类型,并从类型列表中选择int。
将attribute2重命名为quantity,并将其类型更改为int。
将attribute3重命名为productID,并保留string类型。
将attribute4重命名为customerID,并保留string类型。
保存更改。
提示:
如果未打开Properties视图,可以通过右键单击任何构件并选择ShowinProperties来打开该视图。
关闭编辑器前,让我们对其进行进一步的了解。
编辑器的顶部(请参阅图3)显示了业务对象的主要元素。
我们可以使用这个区域来编辑业务对象的常见属性,包括每个特性的名称和类型。
该编辑器使用Properties视图来显示业务对象更为高级的属性和特性。
例如,可以在Properties视图中将特性限制为一组允许值。
图3.已完成的Order业务对象类型
利用Properties视图提供的完善的属性选择功能进行了相应操作后,请关闭Order的BusinessObjectEditor窗口。
继续之前,让我们简单了解一下BusinessIntegration视图(通常位于工作台的左上角)。
应该能在DataTypes类别下看到新创建的Order业务对象。
我们应用程序现在就有了货币。
创建组件和接口
接下来我们要创建组件(服务),还要定义其将支持的接口和将调用的其他组件的接口。
我们将实现以下组件和接口:
ProcessOrder组件和接口
CustomerCheck组件和接口
ShippingProcess组件和接口
ShippingTask组件和接口
CustomerInformation导入
OrderProcessing导出
ProcessOrder组件
我们将首先创建OrderProcessing组件(请参阅图1),以接收订单和开始处理订单。
在BusinessIntegration视图中,通过在OrderProcessing项目下双击OrderProcessing来打开AssemblyEditor。
右键单击AssemblyEditor,并选择AddNode-Component(withnoimplementationtype)。
右键单击我们刚刚创建的组件,并选择Rename。
将名称Component1更改为ProcessOrder。
图4显示了已完成的ProcessOrder组件。
将显示警告标志
,因为组件尚没有实现。
不要着急,我们并不完全知道将如何实现组件,也不应该知道这一点。
我们仅仅在尝试确定应用程序的各个片段,并确定在应用程序的大环境中它们各自将进行什么工作。
图4.ProcessOrder组件
此时,您需要问自己“那么,这个组件需要能完成什么工作呢?
”正如我们在应用程序概述中所说的,ProcessOrder组件将基于其接收到的订单信息下订单。
当对订单进行了配送之后,该组件将输出一条消息。
这意味着我们能够告知此组件下订单,还必须让其知道订单已配送。
捕获这个要求很简单,我们只需要为该组件创建一个接口,并标识其将支持的两个操作即可。
ProcessOrder接口
ProcessOrder接口有两个操作placeOrder和orderShipped。
这两个操作都以一个Order业务对象作为输入参数。
placeOrder并不会返回任何值,因为我们仅需要其启动订购过程。
与此类似,orderShipped操作也不会返回任何值,因为仅需要在被告知订单已配送后输出一条消息。
要为ProcessOrder组件创建接口,请执行以下步骤:
在OrderProcessing项目中右键单击Interfaces类别,并单击New-Interface
在NewInterface向导的Name字段中输入ProcessOrder,并保留其他缺省值。
单击Finish。
在随即打开的接口编辑器中单击右键,并选择AddOneWayOperation。
选择缺省operation1名称,并将其替换为placeOrder。
右键单击placeOrder操作并选择AddInput。
将名称input1更改为order,然后单击Type单元格(其值为string)。
如图5中所示,将打开类型列表,其中包含您前面创建的Order类型。
选择Order作为类型。
图5.创建ProcessOrder接口
添加另一个单向操作,并将名称operation2更改为orderShipped。
向orderShipped添加一个输入,将其重命名为order,并选择Order作为类型。
在前面的步骤中,我们选择的是单向操作。
可以选择两种操作类型,单向操作和请求-响应型操作。
单向操作对应于不希望服务返回结果的情况。
而请求-响应操作则用于希望与服务进行双向通信时,如需要发送查询并获取信息时,或希望发送消息启动一个操作,但需要得到响应来了解是否已成功进行了操作时。
现在可以开始为ProcessOrder组件准备接口了:
切换回组装关系图,右键单击ProcessOrder组件,并选择Add-Interface
从接口列表中选择ProcessOrder。
现在就已经指定了第一个组件。
请注意,我们仍然未实现此组件,而仅仅标识了其将完成的工作。
接下来处理下一个组件。
CustomerCheck组件和接口
将创建的下一个组件是CustomerCheck。
此组件负责接收客户DI并确认客户处于良好的信誉状态。
这意味着定义其接口时,该组件将需要一个名为checkCustomer的操作。
我们将需要使用此操作来返回关于客户是否处于良好信誉状态的信息。
请按照以下步骤进行操作,以创建CustomerCheck:
切换回组装关系图,并采用与处理ProcessOrder组件时相同的方式创建CustomerCheck组件。
重复前面创建OrderProcessing的部分中的步骤1到13,以创建新接口,并将其命名为CustomerCheck。
完成了接口的创建后,接下来将添加检查客户信誉状态的操作:
在接口编辑器中单击右键,并选择AddRequestResponseOperation。
将名称从operation1更改为checkCustomer。
添加一个输入,将其名称更改为customerID,并将类型保留为string。
请注意,我们并没有向此组件传递整个Order业务对象。
这是因为组件仅需要客户ID就能检索客户的信誉状态了。
接下来,让我们确保该操作返回客户信誉状态是否良好的信息:
单击右键并选择AddOutput,以添加一个输出。
将名称更改为customerOK并选择boolean类型。
切换回组装关系图,并采用与向ProcessOrder组件添加接口相同的方式将CustomerCheck接口添加到CustomerCheck组件。
图6显示了已完成的CustomerCheck接口。
图6.已完成的CustomerCheck接口
由于ProcessOrder组件使用CustomerCheck所提供的服务,因此需要将ProcessOrder连接到CustomerCheck。
使鼠标悬停在ProcessOrder组件的边缘上。
将出现一个黄色的手柄。
单击该手柄,并将其拖动到CustomerCheck组件。
将提示在源节点(ProcessOrder)上创建一个匹配引用。
单击OK,并从AddReference对话框中选择CustomerCheck接口。
以前说过,当组件对其他组件进行服务调用时,将会使用引用达成此目的。
在最后一步中,将自动为您创建引用。
ShippingProcess组件和接口
下一个要创建的组件是ShippingProcess,该组件将提供ProcessOrder组件所需的另一个服务。
此组件负责协调订单配送和通知配送部门为订单分配特殊的配送droid。
为了完成此任务,我们需要ShippingProcess组件支持包含处理订单配送工作的操作的接口。
按照与前面相同的方式创建名为ShippingProcess的组件。
使鼠标悬停在ProcessOrder组件的边缘,并将手柄拖动到刚刚创建的ShippingProcess组件。
出现询问是否创建匹配引用的提示时,请单击OK。
尚未为ShippingProcess组件创建接口,因此不要在AddReference对话框中选择现有接口,而要单击New。
在随即打开的NewInterface向导中,输入Shipping作为其名称,并单击Finish。
这将关闭向导并回到AddReference对话框。
在AddReference对话框中,会缺省选中刚刚创建的Shipping接口,因此直接单击OK。
现在需要屏住呼吸看看我们刚刚完成的操作——这些步骤肯定与处理前一个不同!
我们之前采用的方式是这样的,创建新组件,并直接将现有组件连接到该组件。
WebSphereIntegrationDeveloper会非常“善解人意”地以动态方式创建一个新引用和接口。
您并不需要首先关闭对话框并创建接口;相反,WebSphereIntegrationDeveloper将创建一个空接口,因此可以继续进行处理,并在稍后对接口进行内容填充。
下面就让我们进行此工作。
Shipping接口需要一个单向操作shipOrder,该操作以一个Order业务对象作为输入。
该操作将向Shippingdepartment组件发送一条消息,以便通知配送部门发送订单。
要创建此操作,请按照以下步骤进行操作:
在BusinessIntegration视图的Interfaces类别下,双击Shipping接口。
这将在接口编辑器中打开Shipping接口。
添加名为shipOrder的单向操作。
添加名为order的输入,并将其类型设置为Order。
图7显示了已完成的Shipping接口。
图7.Shipping接口
配送流程结束时,需要向OrderProcessing组件发送消息,以通知后者订单已完成。
因此,将需要另一个连接,以从ShippingProcess连接回ProcessOrder组件。
将ShippingProcess组件连接到ProcessOrder组件,并单击OK来创建引用。
由于ProcessOrder已经有了接口,因此这里的工作就告一个段落了。
ShippingTask组件和接口
接下来,我们将创建ShippingTask组件及其接口。
ShippingTask提供了一个服务,以便在ShippingProcess组件希望创建必须人工完成的任务(或在我们示例中的特殊配送droid)时进行调用。
ShippingTask接口需要一个请求-响应操作shipOrder,该操作以一个Order业务对象作为输入。
该操作用于将订单数据发送给配送部门中将对订单进行配送的人员(友好droid)。
将从ShippingTask返回订单数据。
以后我们可能会希望shippingTask在返回订单前对其进行修改(例如,为了指示实际配送的数量)。
要创建人工任务及其接口,请执行以下步骤:
创建另一个名为ShippingTask的组件。
将ShippingProcess组件连接到ShippingTask组件,单击New创建新接口,并将其命名为ShippingTask。
在NewInterface向导中单击Finish,然后在AddReference对话框中单击OK。
打开ShippingTask接口,并添加名为shipOrder的请求-响应操作。
添加名为order的输入,并将其类型设置为Order。
添加名为completedOrder的输出,也将其类型设置为Order。
图8显示了已完成的Shipping接口。
图8.ShippingTask接口
希望您现在已经认识到,设计应用程序的面向服务的体系结构的过程非常方便而快捷。
只需要将服务(组件)拖放到画布上,定义您希望其进行的工作,并将各个框连接到一起。
将一只手绑在背后也能轻松完成!
CustomerInformation导入和OrderProcessing导出
现在已经完成了OrderProcessing模块的主要部分。
剩下的就是将其连接到外部世界。
在此部分,我们将演示如何添加导入和导出来达成此目的。
导入将允许CustomerCheck组件使用外部客户信息系统的服务。
而导出将允许外部客户机将订单信息发送到ProcessOrder组件。
CheckCustomer组件需要调用外部信息系统,该系统中包含所有的客户数据。
为了连接到外部系统,我们必须使用导入。
导入指示不会调用模块中的另一个组件,而将调用该应用程序之外的对象——即我们尝试与整个面向服务的集成解决方案集成的对象。
在第二篇文章中我们说过,导入包含指向实际外部实现的绑定。
请执行以下步骤,以创建导入。
然后,将在本文的实现部分创建绑定。
在AssemblyEditor画布上,右键单击画布,并单击AddNode>Import。
将名称更改为CustomerInformation。
右键单击CustomerInformation导入,单击AddInterface,然后从接口列表中选择CustomerCheck(使用CustomerCheck组件创建的此接口)。
将CustomerCheck组件连接到CustomerInformation导入。
继续讨论之前,有必要说明一下,我们为CustomerCheck和CustomerInformation使用了相同的接口。
这是因为CustomerCheck将检索客户ID,执行业务逻辑,然后使用相同的ID和操作类型调用外部系统,以检查客户是否有效。
我们也可以为组件和导入使用不同的接口,但本文为了简单起见,选择了使用相同的接口。
正如第二篇文章中讨论的,导入必须绑定到另一个模块、Web服务、Java™MessageService(JMS)目的地或EJB组件。
通过使用集成测试客户机,您仍然能在不定义导入绑定的情况下测试该模块。
因此,为了简单起见,可以忽略选择绑定。
要创建导出,您需要执行以下步骤:
右键单击ProcessOrder组件,并单击Export-SCABinding。
此步骤将为组件创建导出,允许从外部源调用此组件。
所选择的绑定取决于计划如何访问组件。
在使用服务组件体系结构构建SOA解决方案——第1部分中提供了使用导出的示例(这篇文章描述如何使用JSP调用组件)。
已完成的组装应与图9中所示类似。
现在已完成了应用程序框架。
接下来将为每个组件定义实现。
图9.已完成的OrderProcessing组装
实现ProcessOrder组件
尽管我们已经设计好了组件拓扑,但尚未确定将要实现多少组件。
开始进行实现非常简单;直接选择一个组件,并为其选择一个实现类型即可。
WebSphereIntegrationDeveloper将创建一个框架实现,您的工作就是直接在其中填充业务逻辑。
我们决定使用业务状态机来实现ProcessOrder组件。
业务状态机是一种特殊的业务流程类型,因为它是事件驱动的,其操作取决于流程当前的状态。
在我们的示例中,我们将使用其来建模订单在达到、正在配送、已配送的整个过程中的状态。
在组装编辑器中右键单击ProcessOrder组件,并单击GenerateImplementation-StateMachine。
将随即打开一个对话框,询问应将状态机放置在哪个文件夹中。
确保选择了OrderProcessing,然后单击OK。
将随即打开StateMachineeditor,其中包含一个简单的状态机。
如图10中所示,从初始状态到第一个状态的转换上有一个错误标记,因为尚没有操作触发转换。
也就是说,我们需要标识让状态机运转的操作。
图10.新创建的ProcessOrder业务状态机
请注意右侧的引用:
这些引用是在创建状态机时基于添加到ProcessOrder组件的引用自动添加的。
将使用这些组件调用其他服务。
首先,我们将使用更为恰当的名称重命名初始状态和结束状态。
在StateMachineeditor中,单击缺省名称State1,并将其替换为CustomerBeingChecked。
以同样的方式将InitialState1更改为WaitingForOrder。
将FinalState1重命名为OrderComplete。
接下来,让我们添加更多的状态来帮助跟踪何时在检查客户以及何时在忙于配送订单。
右键单击画布,并单击Add>State,然后单击画布,以添加新状态。
将State2重命名为OrderBeingShipped。
右键单击CustomerBeingChecked状态并选择Add-Transition。
光标下出现线条时,请单击OrderBeingSh
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- WebSphere Integration Developer指导教程 第3部分 构建面向服务的简单应用程序 Developer 指导 教程 部分 构建 面向 服务 简单 应用程序
![提示](https://static.bdocx.com/images/bang_tan.gif)
链接地址:https://www.bdocx.com/doc/7667102.html