2011年5月29日星期日

SOASuite_040:SOA Suite 11g 开发指南之十九:如何使用EDN与ADF集成?

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

在《SOA Suite 11g 开发指南之十二:使用EDN处理事件》中我们了解了EDN的用法。不过,在那个实验中,我们使用了一个publish脚本来发布事件,测试EDN。
实际应用中,一般是由程序来发布事件,然后由SOA上的Meditator注册事件监听器。
那么如果由程序来发布事件,该如何做呢?这就要用到ADF中一个高级特性:Business Event。
常见的一个场景是:当员工工资发生变化时,可能要做一个动作,比如触发一个SOA应用。

重要步骤说明:
1. 开发ADF Web 应用。

1.1 使用ADF BC 快速创建基于Employees表的Model。

1.2 修改Employee EO的属性Business Event。
当员工工资发生变化时,产生事件UpdateSalaryEvent,该事件将被SOA应用监听。





确定后,会产生两个文件:Employees.edl和Employees.xsd。这两个文件将在SOA应用中用到。


1.3 创建一个JSF页面,修改Employee的各个属性,然后提交。

2. 开发SOA应用。

2.1 复制Employees.edl和Employees.xsd到Project中,与composite.xml在同一级目录。

2.2 拖放Meditator和File Adapter。
其中,右键Meditator,选择Add Publish Event...。

增加Event,选择Employee.edl。


2.3 在Meditator中,设置Transformation。

2.4 设置File Adapter属性。

3. 分别发布ADF应用和SOA应用到同一个SOA Sever上。

4. 访问http://localhost:7001/Application9-ViewController-context-root/faces/untitled1.jspx,修改Salary,提交。
在C:\temp目录下,会产生文件:updateSalary_2.txt,内容如下:
<?xml version="1.0" encoding="UTF-8" ?>
<ns0:UpdateSalaryEventInfo xmlns:ns0="http://model/events/schema/Employees" xmlns="http://model/events/schema/Employees">
<ns0:EmployeeId>
<ns0:newValue value="100"/>
<ns0:oldValue value="100"/>
</ns0:EmployeeId>
<ns0:Salary>
<ns0:newValue value="25000"/>
<ns0:oldValue value="27000"/>
</ns0:Salary>
</ns0:UpdateSalaryEventInfo>

有些神奇,是不是?
ADF应用与SOA应用并没有任何“直接”的联系,但是我们访问ADF应用后(修改Salary,提交),SOA应用被触发了。
这就是EDN绝妙的作用,Meditator上的事件监听器时刻监听着SOA Server中的UpdateSalaryEvent。

参考文献:
1. ADF应用下载:ADF_Business_Event.7z
2. SOA应用下载:SOA_EDN.7z
3. http://andrejusb.blogspot.com/2009/08/business-events-and-adf-business.html。
4. http://biemond.blogspot.com/2008/05/events-in-adf-bc-and-handled-by-soa.html。

没有评论: