当前位置:文档之家› Oracle SOA Suite 11g入门实例(六)

Oracle SOA Suite 11g入门实例(六)

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

相关主题
相关文档 最新文档