当订单金额<$1000时,直接把订单内容写到文件里。
当订单金额>$1000时,验证用户的信用卡,并根据返回值,设置订单的状态。
SOA 应用设计如下:
重要步骤说明:
1. 增加External References:CreditCardStatus
(1)在查找已经发布的服务时,比如validationForCC服务,可以从SOA Server上直接查找,如下图:
或者直接访问EM Console上,找到validationForCC服务的WSDL URL,如下图:
然后复制到WSDL URL一栏。
2. 增加BPEL:approveLargeOrder
(1)选择Template:Asynchronous BPEL Process,即异步的BPEL。
(2)Expose as a SOAP Service:不勾上,即不对外暴露为公开的WebService。
(3)选择interalorder.xsd的Order作为Input和Output参数类型。
(4)连接approveLargeOrder和CreditCardStatus Reference。
(5)使用Invoke Action
使用Invoke Action调用一个同步服务时,需要创建Invoke的输入和输出参数,一般用默认的变量名即可。
(6)使用Assign Action给Invoke的输入参数赋值
由于Invoke的输入参数和BPEL的输入参数格式不同,比如这里BPEL的输入参数格式是internalorder.xsd,而Invoke的输入参数的格式来自WSDL定义的Schema,因此需要转换。
同时,创建BPEL时会同时创建BPEL的输入参数和输出参数。
这里把BPEL的输入参数直接赋值给BPEL的输出参数,这样保证BPEL返回时输出参数有值。
当然真正的输出参数值不可能完全跟输入参数值一样,后边我们会看到,是如何修改输出参数值的。
最终的转换结果如下图:
(7)得到validationForCC服务的返回值后,使用Assign Action把它赋值给BPEL的输出参数。如下图:
(8)完成BPEL设计后,点击左上角“绿勾”,检查BPEL是否语法正确,警告信息也不要放过。如下图:
3. 修改Mediator
(1)当订单金额<$1000时,直接把订单内容写到文件里。
(2)当订单金额>$1000时,调用approveLargeOrder BPEL。
(3)验证完毕订单金额>$1000的用户信用卡后,结果也要写到文件中,因此要在CallBack中调用WriteApprovalResults服务。如下图:
4. 部署
5. 测试
用订单金额>1000的数据进行测试,会发现验证用户信用卡服务是一个synchronous (request-response) 调用,request-response 同时在payload中可以看到。如下图:
Project 下载:Lab04 POProcessing.7z
没有评论:
发表评论