2011年5月28日星期六

SOASuite_029:SOA Suite 11g 开发指南之八:增加物流配送流程 Fulfillment

开发运行环境:JDeveloper 11.1.1.5 + SOA Suite 11.1.1.5。

订单被同意之后,下一步就是进入配送环节。我们使用Decision Table来决定使用哪个物流商。
Decision Table也是Business Rule当中的一种规则,主要用于选项比较多的情况,好处是省去写大量的If Else判断。
规则设置如下:订单金额<$1000 由USPS配送;$1000<订单金额<$5000 由UPS配送;订单金额>$5000 由FedEx配送。

SOA 应用设计如下:



重要步骤说明:
1.Decision Table的用法说明。
Decision Table规则使用起来不像IF/THEN规则那样直观,有一些新的技术术语,如Bucketsets,需要仔细领会。

2.增加Fulfillment BPEL,修改SOA 应用设计
所有被同意的订单最终都应该进入配送环节,审视应用后,发现有两个地方应该调用Fulfillment BPEL Process:
(1)approveLargeOrder BPEL process(金额>$1000的订单)。
(2)routePO mediator(金额<$1000的订单)。

3. 把BPEL中的输入参数Fullfillment,赋给业务规则的输入参数:Fullfillment。



4. 把业务规则的输出参数CarrierSelection,赋给BPEL的输出变量中的CarrierSelection。

5. Deploy 出错:在Deploy应用时,抛出如下错误信息,随后Deploy失败。
原因: DFW-40112: 执行 adrci 命令时出错; 找到以下错误 "unable to create new native thread"
OutOfMemoryError: unable to create new native thread。
后来经过分析诊断,发现必须修改setSOADomainEnv.cmd,适当改小最大内存数,如set DEFAULT_MEM_ARGS=-Xms512m -Xmx512m
重新启动Server后,再次发布成功。
具体原因阐述请看《奇怪的错误:OutOfMemoryError: unable to create new native thread》。
不管原因如何,我都觉得这是一个BUG:SOA应用发布时创建那么多线程干嘛?

Project 下载:Lab08 POProcessing.7z

没有评论: