Oracle SOA Suite 11g 入门实例(六)
创建OrderProcessor BPEL流程的后半部分
Author: Maolin.Chen
Creation Date: September 7, 2010
Last Updated: September 17, 2010
Document Ref:
Version: 1.0
文档控制更改记录
内容目录
文档控制 ............................................................................................................................. i i 1.前言 .. (2)
1.1.任务概览 (2)
2.创建Scope_RetrieveQuotes范域 (3)
2.1.任务1:添加Scope_RetrieveQuotes范域 (5)
2.2.任务2:创建InternalWarehouseService BPEL流程 (6)
2.3.任务3:修改InternalWarehouseService BPEL流程 (8)
2.4.任务4:连接OrderProcessor与InternalWarehouseService BPEL流程 (10)
2.5.任务5:创建PartnerSupplierService 服务 (11)
2.6.任务6:创建PartnerSupplierMediator调解器 (12)
2.7.任务7:为PartnerSupplierMediator调解器创建路由规则 (14)
2.8.任务8:连接OrderProcessor和PartnerSupplierMediator调解器 (18)
2.9.任务9:添加gWarehouseQuotes变量 (18)
2.10.任务10:添加活动从InternalWarehouse流程获取报价 (20)
2.11.任务11:添加活动从PartnerSupplierMediator调解器获取报价 (23)
3.创建Scope_SelectPreferredSupplier范域 (28)
3.1.任务1:创建Scope_SelectPreferredSupplier范域 (28)
3.2.任务2:创建gPreferredSupplier变量 (28)
3.3.任务3:创建lCurrentSupplier变量 (30)
3.4.任务4:创建lCurrentSupplierIndex变量 (31)
3.5.任务5:创建Assign_lCurrentNodeIndex_first活动 (32)
3.6.任务6:创建Assign_gPreferredSupplier_init活动 (33)
3.7.任务7:创建While循环活动 (34)
3.8.任务8:创建Assign_lCurrentSupplier活动 (34)
3.9.任务9:创建Switch_CompareSuppliers活动 (35)
3.10.任务10:创建Assign_lCurrentSupplierIndex_Next活动 (36)
4.为Scope_ FulfillOrder范域创建必要的服务和路由 (38)
4.1.任务1:创建USPSShipment文件适配器 (38)
4.2.任务2:创建FulfillmentBatch JMS服务 (39)
4.3.任务3:创建FulfillOrder调解器服务组件 (40)
4.4.任务4:创建路由规则 (41)
4.5.任务5:连接OrderProcessor到FulfillOrder调解器服务 (43)
5.创建Scope_FulfillOrder范域 (44)
5.1.任务1:添加Scope_FulfillOrder范域 (44)
5.2.任务2:添加InvokeFulfillOrder活动 (44)
5.3.任务3:创建Assign_OrderData活动 (45)
6.创建Scope_UpdateStatusToComplete范域 (46)
6.1.任务1:添加Scope_UpdateStatusToComplete范域 (46)
6.2.任务2:添加OrderInfoDA数据库适配器 (46)
6.3.任务3:创建Invoke_UpdateStatus活动 (48)
6.4.任务4:创建Assign_UpdateStatus活动 (49)
6.5.任务5:创建Assign_OutputVariable活动 (50)
7.创建Scope_NotifyCustomerofCompletion范域 (51)
8.为整个流程无法完成的订单创建Catch分支 (53)
附录1:如何为数据库适配器创建连接工厂 (57)
8.1.任务1:创建数据源(Data Source) (57)
8.2.任务2:创建连接池(Connection Pool) (58)
9.未结与已结问题 (61)
未结问题 (61)
已结问题 (61)
1.前言
本章开始我们创建OrderProcessor BPEL流程的后半部分。
1.1.任务概览
首先,我们来看一下本章我们都要做一些什么事情:
任务说明详见
创建Scope_RetrieveQuotes流创建Scope_RetrieveQuotes流,发送
订单信息到一个内部仓库和一个外
部供应商的仓库,分别获取他们的报
价信息。
第二节
创建
Scope_SelectPreferredSuppli er范域创建Scope_SelectPreferredSupplier
范域,选择一个报价较低的仓库
第三节
创建Scope_FulfillOrder 范域需要的服务和路由创建快递公司的适配器,以及一个
JMS队列,创建调解器(Mediator)FulfillOrder将需要履行的订单发送
到这些适配器
第四节
创建Scope_FulfillOrder 范域创建此范域发送订单到FulfillOrder
调解器。
第五节
创建
Scope_UpdateStatusToComp lete范域完成订单创建
Scope_UpdateStatusToComplete范
域将订单状态修改为完成。
第七节
创建Scope_ NotifyCustomerofCompletio n范域创建Scope_ NotifyCustomerofCompletion范域
使用Oracle用户消息服务来发送一封
邮件给客户,告知订单完成。
第九节
为流程中没有被完成的订单添加一个Catch分支如果订单遇到任何问题,修改它的状
态为“已取消”。
第十节
2.创建Scope_RetrieveQuotes范域
创建Scope_RetrieveQuotes范域,发送订单信息到一个内部仓库(internal warehouse)
和一个外部供应商的仓库(external partner warehouse),分别获取他们的报价信息。
从上图可以看出,流程在此转为并行执行,即流程同时去取内部和外部供应商的报价信
息。
图示。
价的图示。
上图为BPEL设计器中调用外部供应商仓库服务调解器(PartnerSupplierMediator)获
取外部报价的图示。
上图为SOA组合编辑器中调用外部供应商仓库服务调解器(PartnerSupplierMediator)
获取外部报价的图示。
2.1.任务1:添加Scope_RetrieveQuotes范域
FLOW活动的特点是将主流程分解为多个子流程,各子流程并行执行,所有子流程执行
完毕后主流程才继续执行。
1.从Component Palette里拖拽一个Scope活动到Scope_CheckApprovalLimit范域
下。
2.双击该图标下的活动名称以重命名该活动。
3.在编辑域里输入Scope_RetrieveQuotes。
4.点击Expand (+)展开该范域。
5.拖拽一个Flow活动到这个范域里。
6.双击该图标下的活动名称以重命名该活动。
7.在编辑域里输入RetrieveQuotesFromSuppliers。
8.点击Expand (+)展开该活动。
2.2.任务2:创建InternalWarehouseService BPEL流程
1.点击composite.xml标签页。
2.在Component Palette里选择SOA。
3.从Service Components列表中拖拽一个BPEL Process到画布中间。弹出Create
BPEL Process对话框。
4.输入和选择如下值:
属性值
Name InternalWarehouseService
Namespace https://www.doczj.com/doc/2b1129831.html,/ns/Intern
alWarehouse
Template Asynchronous BPEL Process
Expose as a SOAP service 不要勾选这个复选框,我们不需要将它暴露给外界,仅供本组合使用即可
5.在Input域:
a)点击Input域右边的Browse Input Elements图标,弹出Type Chooser对话框。
b)展开Project Schema Files > InternalWarehouse.xsd 选择
WarehouseRequest 然后点击OK.
c)点击OK.
6.在Output域:
a)点击Output域右边的Browse Output Elements图标,弹出Type Chooser对话
框。
b)展开Project Schema Files > InternalWarehouse.xsd 选择
WarehouseResponse 然后点击OK.
c)点击OK.
7.点击OK。BPEL流程便出现在SOA组合编辑器中了。
8.双击InternalWarehouseService BPEL流程,弹出BPEL设计器。
2.3.任务3:修改InternalWarehouseService BPEL流程
1.创建一个Assign活动:
a)在Component Palette面板,拖拽一个Assign活动到receiveInput活动下面。
b)重命名这个活动,双击该图标下的名字。
c)在编辑域里,输入Assign_Defaults.
d)双击这个Assign活动。弹出Assign对话框。
2.拷贝字符串“InternalWarehouse”到输出变量作为仓库名:
a)从下拉菜单中选择Copy Operation,弹出Create Copy Operation对话框。
b)输入如下值:
属性值
From
?Type Expression
?Expression string('InternalWarehouse')
To
?Type Variable
?Variable 展开Variables > outputVariable > payload >
client:WarehouseResponse 选择
client:warehouse.
c)点击OK关闭Create Copy Operation
3.分配当前时间到输出变量作为发货时间:
a)从下拉菜单中选择Copy Operation,弹出Create Copy Operation对话框。
b)输入如下值:
属性值
From
?Type Expression
?Expression
1.点击XPath Expression Builder图标,在弹出的
Expression Builder对话框中,在右下角的Functions
区域的下拉菜单中选择Date Functions,然后,双击
current-date。此时,Expression框中出现:
xpath20:current-date()
2.点击OK。
To
?Type Variable
?Variable 展开Variables > outputVariable > payload >
client:WarehouseResponse 选择
client:deliveryDate
c)点击OK。
4.分配1000给输出变量作为报价,也就是对于任何订单都报价1000元。
a)从下拉菜单中选择Copy Operation,弹出Create Copy Operation对话框。
b)输入如下值:
属性值
From
?Type Expression
?Expression 1000
To
?Type Variable
?Variable 展开Variables > outputVariable > payload >
client:WarehouseResponse 选择
client: orderTotal
c)点击OK。
5.点击OK关闭Assign对话框。
6.点击Save All。
7.关闭InternalWarehouseService.bpel标签页。
2.4.任务4:连接OrderProcessor与InternalWarehouseService BPEL流程
1.从OrderProcessor拖拽一条线到InternalWarehouseService。
2.点击OrderProcessor.bpel标签页查看BPEL设计器中的InternalWarehouseService,
它位于Partner Links区域。
3.点击Save All保存。
2.5.任务5:创建PartnerSupplierService 服务
下一节我们要创建的PartnerSupplierMediator调解器需要调用PartnerSupplier
Service 服务获取外部供应商的报价信息,而PartnerSupplierService 服务调用的正
是我们在第三章中创建PartnerSupplierComposite服务。
创建PartnerSupplierService服务:
1.如果你还没有部署PartnerSupplierComposite,那么现在部署:
a)在Application Navigator,右键PartnerSupplierComposite 选择Deploy >
PartnerSupplierComposite > to sp-eump-cms。弹出SOA Deployment
Configuration对话框。
b)保持默认设置,点击OK。
c)当弹出Authorization Request对话框时,输入Weblogic用户名密码。
编译完成后在SOA-Log面板中会显示:
BUILD SUCCESSFUL
Total time: nn seconds
2.在composite.xml标签页理,从Component Palette面板中拖拽一个Web Service到
SOA组合编辑器右边泳道中,弹出WebService 窗口。
3.在Name域中输入PartnerSupplierService
4.Type选择Reference.
5.点击WSDL URL域旁边的Find existing WSDLs图标。弹出SOA Resource
Lookup对话框。
6.选择Resource Palette.
7.展开Application Server > sp-eump-cms > SOA > PartnerSupplierComposite 并选
择externalpartnersupplier_client_ep
8.点击OK关闭SOA Resource Lookup对话框。
9.在Web Service对话框里,从Port Type列表中选择ExternalPartnerSupplier并且从
Callback Port Type中选择ExternalPartnerSupplierCallback。
10.点击OK关闭Web Service对话框。PartnerSupplierService服务便出现在SOA编辑器
中了。
2.6.任务6:创建PartnerSupplierMediator调解器
1.从Component Palette里拖拽一个Mediator服务到SOA组合编辑器的中间泳道。弹
出Create Mediator对话框。
2.在Name里输入PartnerSupplierMediator.
3.Template里选择Interface Definition from WSDL
4.不要勾选Create Composite Service with SOAP Bindings
5.在WSDL URL域,生成一个WSDL文件:
a)点击Generate WSDL from schema(s)图标。弹出Create WSDL对话框。
b)在URL域里,点击browse for schema file图标,弹出Type Chooser对话框。
c)展开Project WSDL Files > StoreFrontService.wsdl>Inline Schemas>schema
并选择orderInfoVOSDO
d)点击OK关闭Type Chooser对话框回到Create WSDL对话框。
e)在Namespace域里输入:
https://www.doczj.com/doc/2b1129831.html,/ns/PartnerSupplierMediator.
f)点击Callback标签页。
g)在URL域里,点击browse for schema file图标。弹出Type Chooser对话框。
h)展开Project Schema Files > InternalWarehouseService.xsd 并选择
WarehouseResponse.
i)点击OK关闭Type Chooser对话框。
j)点击OK关闭Create WSDL对话框。返回Create Mediator对话框。
6.在Create Mediator对话框,取消勾选Create Composite Services with SOAP
Bindings,然后点击OK创建调解器。
2.7.任务7:为PartnerSupplierMediator调解器创建路由规则
1.从PartnerSupplierMediator调解器拖拽一条线到PartnerSupplierService服务的引
用柄上。
2.双击PartnerSupplierMediator打开调解器编辑器。
3.修改payload转换(transformation),让PartnerSupplierService服务接收到正确的信
息。
a)点击Transform Using域后边的转换图标。
b)选择Create New Mapper File,其他默认,点击OK。弹出Data Mapper对话
框。
的XSLT File:ExternalPartnerSupplier.wsdl的orderTotal元素上。
d)在左边的Source:PartnerSupplierMediator.wsdl,展开OrderItemsInfoVO。
e)在左边的Source:PartnerSupplierMediator.wsdl,拖拽OrderItemsInfoVO到
右边的XSLT File: ExternalPartnerSupplier.wsdl的orderItems元素上。弹出Auto Map Preferences对话框。
f)保持默认,点击OK。
g)在Data Mapper里展开for-each > orderItems,可以看到从OrderItemsInfoVO
到orderItems的映射。
h)点击Save All。
i)关闭IorderInfoVOSDO_To_WarehouseProcessRequest.xsl标签页。
j)回到PartnerSupplier.mplan标签页,在Routing Rules区域,你可以看到
orderInfoVO_To_WarehouseProcessRequest.xsl出现在Transform Using域。
4.修改callback转换,使PartnerSupplierMediator调解器接收到正确的回调消息。
a)点击Transform Using域后边的转换图标。弹出Request Transformation Map
对话框。
b)选择Create New Mapper File,其他默认,点击OK。弹出Data Mapper对话
框。
c)在XSLT File:ExternalPartnerSupplier.wsdl (左边),拖拽orderTotal到右边
的Source:PartnerSupplierMediator.wsdl的orderTotal元素上。
d)在左边的Source:ExternalPartnerSupplier.wsdl , 拖拽client:deliveryDate
到右边的XSLT File:PartnerSupplierMediator.wsdl 的deliveryDate