级别: 初级 Zeenat Lainwala (lainwala@us.ibm.com), 顾问软件工程师, IBM Shane Claussen (claussen@us.ibm.com), 高级技术人员, IBM
2006 年 7 月 23 日 本文介绍如何使用 IBM WebSphere Integration Developer 构建静态关系,为关系创建静态填充数据,创建调用此关系的业务对象映射,以及创建进而调用该映射的接口映射。
引言
通过 IBM® WebSphere® Process Server 关系服务提供的功能,WebSphere Integration Developer 可以关联一组相关业务对象中可能有不同值但有相同语义的属性。主要有两种关系类型:动态关系和静态关系。可以使用动态关系来关联一组相关业务对象的主键,而使用静态关系来关联非主键属性。本文集中讨论静态关系,后续文章将重点介绍动态关系。
业务场景
本文的业务场景假设 IBM Corporation 有三个不同的企业系统,这三个系统都有各自的客户表示形式。IBM 的 IT 部门决定,需要将这三个系统整合在一起,并在客户关系管理(Customer Relationship Management,CRM)Hub 中提供一种单一、组合、规范的客户表示形式,使客户关系业务过程的开发独立于现有“企业信息系统 (EIS)”。
每个企业系统(SSA Global、SAP 和 DB2™ 关系数据库)都有各自的客户表示形式,其中包括一个名为 state 的地址属性,代表美国的一个州(本示例没有国际化)。但是,这三个系统中的每一个系统都使用不同的值来表示州。例如,要表示加利福尼亚州,基于 DB2 的系统使用“California”,SAP 系统使用“CA-03”,而SSA Global 系统则使用“Cal”。在本场景中,规范(或者通用)的客户表示形式是使用官方规定的两个首字母缩写(例如,“CA”代表 California)。本场景中的静态关系将这四个词法不同但语义相同的表示形式关联在一起。
在该业务集成应用程序的执行过程中,当包含客户业务对象的传入(或传出)事件在外部系统和 CRM Hub 之间进行交换时,将调用该静态关系。这些事件作为中间媒介,使用导致调用业务对象映射的接口映射组件。业务对象映射将特定于系统的客户表示形式转换为规范的表示形式,或反之。在该过程中,业务对象映射将源 state 属性转换为目标 state 属性。
此转换的执行方式是,通过关系服务 API 使用创作时定义的数据查找相关源和目标角色的关联数据。下图描述了该场景:
图 1. 业务场景
构件开发摘要
为了演示静态关系是如何解决此业务场景的,开发了下面的构件:
- 四个业务对象(SSA Global、SSA、DB2 和 Canonical)。
- 包含四个角色的静态关系(一个角色对应一个业务对象)。
- 与由该关系定义的业务对象属性值关联的预填充数据。
- 调用静态关系以便执行 state 属性转换的业务对象映射。
- 具有调用业务对象映射的源接口和目标接口的接口映射。
本文假定您熟悉创建业务对象、接口、接口映射和业务对象映射。
创建业务对象
在该步骤中,将创建后续步骤所需的四个业务对象。
- 启动 WebSphere Integration Developer。
- 创建一个名为
CRM(选择 File => New =>Project)的新模块。
- 为三个企业系统各创建一个客户业务对象,并为规范表示形式创建一个客户业务对象。为了简便起见,本示例对每个业务对象使用了相同的属性名。使用下面的内容创建每个业务对象:
图 3. 业务对象
分别为这四个业务对象创建下面的属性和属性类型:
图 4. SSACustomer 和 SAPCustomer
图 5. JDBCCustomer 和 GBOCustomer
创建关系
现在已经创建了业务对象,下面可以创建关系了。该关系分别为这四个业务对象的非主键 state 属性定义一个静态关系。
- 创建一个关系(选择 File =>New =>Relationship)。
- 在第一个面板中,指定目标命名空间:
http://www.ibm.com/rels/CustomerState 和名称 CustomerState。
- 单击 Next。
图 6. 创建关系
- 选择下一个面板上的第二个单选按钮。
- 选中复选框。这表明将为一个静态非主键属性创建关系。
图 7. 创建关系
添加角色
参与关系的每个业务对象必须有一个与之关联的角色。角色代表元数据,描述业务对象中的哪个属性与属于该关系的其他角色中描述的属性相关联。因此,对于本场景,您要创建四个角色,一个角色对应于一个客户业务对象。
要创建这四个角色,请在关系编辑器中选择 Add Role 图标,如下图所示:
图 8. 添加角色
将弹出一个对话框,可以从中选择与角色关联的业务对象。选择业务对象并选择 Ok。重复该步骤,直到为每个业务对象(JDBCCustomer、SSACustomer、SAPCustomer 和 GBOCustomer)都创建了一个角色。
修改角色属性
每个角色都会自动生成自己的目标命名空间和名称。这时最好更新每个角色的目标命名空间、名称和显示名称。要完成此任务,请执行以下步骤:
- 选择角色。
- 从角色下面的横列表项中选择 Properties。
- 从 Properties 选项卡下面的竖列表项中选择 Description。
- 使用下表中的值更新 Name、Display Name 和 Targetnamespace 属性:
图 9. 角色名称
- 对所有四个角色重复该步骤。
添加角色键
现在必须为这四个角色的每个键设置在关系中关联的属性(例如 state)。设置键属性 (key property)(别名键特性:key attuibute):
- 选择角色。
- 选择标有 Add KeyAttribute 的图标。例如:
图 10. 添加角色键属性
- 将弹出一个对话框,其中包含与该角色关联的业务对象中的所有属性。对于本场景,选择 state。
- 对所有四个角色重复该步骤。
填充静态关系
此步骤是创建静态关系步骤最重要的部分。在该步骤中,每个 state 属性的所有可能值都输入 WebSphere Integration Developer 并进行关联。这将提供业务对象映射(将在下文开发),即,把业务对象映射到将 state 属性从一个业务对象正确转换到另一业务对象所需的关系数据。要完成静态关系开发周期的这一步骤,请创建一个表,该表捕获每个系统中 state 属性的所有可能值,以及它们的关联方式。该表看起来类似于下图:
图 11. 静态值表
将此信息输入 WebSphere Integration Developer:
- 从关系编辑器中选择 CustomerState 图标。
图 12. 填充静态关系
- 从角色下方的横列表项中选择 Properties。
- 从 Properties 选项卡下方的竖列表项中选择 Instance Data。在这里,找到第一行关联数据的 Instance Data 和相应的 id 名 1。
- 选择 Add 为第二行关联数据添加第二个关联 id。
- 展开与 1 和 2 对应的数据行的关联 id。在这些关联 id 下列出了关系中的每个角色。为关联 id 1 选择每个角色,并使用上表作为参考填入信息。对于 GBO 角色,使用
CA;对于 JDBC 角色,使用 California;对于 SAP 角色,使用 CA-03;对于 SSA 角色,使用 Cal。
图 13. 填充静态关系
- 对关联 id 2 重复上述步骤,使用表中第二行中的信息关联 state 值 Texas。
图 14. 填充静态关系
- 添加前两行实例数据值对于本示例而言已经足够。
静态关系定义总结
这时,您已经定义了静态关系。此关系定义了足够的信息,可以在将 EIS 客户业务对象传入和传出规范化客户业务对象的过程中使 state 属性规范化和取消规范化。为演示 CRM Hub 和外部系统之间的每个集成关系,需要开发三个接口映射和三个相应的业务对象映射集,以处理下列集成情形:
- SSA Global 和 CRM Hub 之间的相互映射
- SAP 和 CRM Hub 之间的相互映射
- DB2 和 CRM Hub 之间的相互映射
为了保持此示例简单易懂,将使用一组简单的源/目标接口创建 SSA Global 和 CRM Hub 之间的接口映射。然后创建一个业务对象映射,来处理将 SSA Global 客户业务对象转换为规范的客户业务对象的入站场景。您可以创建其余两个接口映射和五个业务对象映射,这样会更好。
创建业务对象映射
在本步骤中,将创建一个业务对映射,将 SSA Global 业务对象转换为规范的业务对象。在该过程中,关系服务 API 将源业务对象的 state 属性转换为目标业务对象的 state 属性。
- 创建一个业务对象映射(选择 File => New => Business Object Map)。
- 在第一个面板上,将 Business Object Map 命名为
SSACustomerToGBOCustomer,并指定目标命名空间 http://www.ibm.com/maps。
- 单击 Next。
- 在第二个面板上,选择 SSACustomer 作为输入,选择 GBOCustomer 作为输出。
- 单击 Finish。
- 创建 SSACustomer 的每个属性到 GBOCustomer 中相同属性的 Move 转换(state 除外)。
- 由于在 Business Object Map 编辑器中不存在用于静态关系的一流工具,所以您需要编写一个代码片段。要编写代码片段,请拖放从 SSACustomer 到 GBOCustomer 的一个链接。最初,这会产生一个 Submap 转换。选择两个业务对象之间的 Submap 框,并从下拉列表中选择 Custom。
图 15. SSACustomerToGBOCustomer 映射
- 选择位于 SSACustomer 和 GBOCustomer 之间的 Custom 转换,并从业务对象下面的横区域选择 Properties 选项卡。
- 选择 Java™ Imports,输入以下导入内容,它是您编写静态关系代码片段所必需的:
清单 1. Java 导入
import com.ibm.websphere.sca.ServiceManager;
import com.ibm.wbiserver.rel.RelationshipService;
import java.util.List;
import commonj.sdo.DataObject;
|
- 选择 Details 选项卡。
- 选择 Java 单选按钮。
- 将以下代码输入到 Details 代码片段区域。
清单 2. 静态关系代码片段
try {
ServiceManager serviceManager = new ServiceManager();
RelationshipService relationshipService = (RelationshipService)
serviceManager.locateService("com/ibm/wbiserver/rel/RelationshipService");
|--10--------20--------30--------40--------50--------60--------70--------80--------9|
|-------- XML error: The previous line is longer than the max of 90 characters ---------|
int[] correlationID = relationshipService.
retrieveInstanceIDs("http://www.ibm.com/rels/CustomerState/CustomerState",
|--10--------20--------30--------40--------50--------60--------70--------80--------9|
|-------- XML error: The previous line is longer than the max of 90 characters ---------|
"http://www.ibm.com/rels/CustomerState/SSA", SSACustomer);
List participants = relationshipService.
retrieveParticipants("http://www.ibm.com/rels/CustomerState/CustomerState",
|--10--------20--------30--------40--------50--------60--------70--------80--------9|
|-------- XML error: The previous line is longer than the max of 90 characters ---------|
"http://www.ibm.com/rels/CustomerState/GBO", correlationID[0]);
DataObject gboCustomer = (DataObject) participants.get(0);
String state = (String) gboCustomer.get("state");
GBOCustomer.set("state", state);
} catch (RuntimeException e) {
e.printStackTrace();
}
|

 |

|
创建接口
在创建调用 SSACustomerToGBOCustomer 映射的接口映射之前,应先为该接口映射创建一个源和目标接口。
- 创建源接口(选择 File => New => Interface)。
- 将该接口命名为
SSAEvent,并为其提供目标命名空间 http://www.ibm.com/interfaces/ssa。
- 添加名为
processEvent 的请求/响应操作。
- 添加类型
SSACustomer 的名为 ssaCustomer 的输入消息。
图 16. 接口 SSAEvent
- 创建目标接口(File => New => Interface)。
- 将接口命名为
CRMHubEvent 并为其提供目标命名空间 http://www.ibm.com/interfaces/hub。
- 添加名为
processEvent 的请求/响应操作。
- 添加类型
GBOCustomer 的名为 gboCustomer 输入消息。
图17. 接口 GBOEvent
创建接口映射
创建 SSA Global 和 CRM Hub 之间的接口映射。
- 创建源接口(选择 File => New => Interface Map)。
- 将它命名为
SSACustomerToFromGBOCustomer,并为其提供目标命名空间 http://www.ibm.com/interfaceMaps。
- 单击 Next。
- 选择 Source interface 作为 SSAEvent 接口。
- 选择 Target interface 作为 GBOEvent 接口。
- 单击 Finish。
- 连接 processEvent 操作。
- 选择连接 processEvent 操作的行,以查看 Parameter 映射。
- 将 ssaCustomer 连接到 gboCustomer。
- 选择 move,然后从 Parameter 映射下面的横选项卡中选择 Properties。
- 选择 Description。
- 将 move 更改为 map。
图 18. 创建接口映射
- 选择 Details。
- 为 business object map 选择 SSACustomerToGBOCustomer。
Assembly Editor
现在,设置装配图,以便通过接口映射组件测试关系。
- 打开装配图。
- 将接口映射 SSACustomerToFromGBOCustomer 拖放到装配图接口。
- 使用测试服务器测试组件。
结束语
本文介绍了如何创建静态关系,为静态关系创建预填充数据,从映射调用关系,最后介绍了如何创建调用该映射的接口映射,以便在服务器上测试该关系。
参考资料
作者简介  | |  | Zeenat Lainwala 是 WebSphere Process Server Relationship Service 6.0 的技术主管。她从 2002 年开始就在 IBM 工作,最初的研究领域是 WebSphere Integration Server,最近两年涉猎 WebSphere Process Server 的各个方面。 |
 | |  | Shane Claussen 是一位 WebSphere Process Server 架构师,并在加利福尼亚州的伯灵格姆设立了开发实验室。 |
对本文的评价
|