使用 WebSphere Process Server 关系开发集成解决方案

IBM® WebSphere® Process Server 中的 Relationship Service 是一项与其他转换组件实现了良好集成的基础设施服务,以支持复杂集成解决方案的开发。它可将集成开发人员解放出来,不用在其业务逻辑中自行构建交叉引用逻辑。关系是可扩展且可管理的,因此在应用程序中使用关系可提高集成解决方案的总体灵活性。

引言

本文采用问/答的形式帮助您快速而方便地了解如何使用 IBM® WebSphere® Process Server(以下称为 Process Server)关系。我们的目标是让您认识到何时使用关系,并提供了全面的概述,以便您方便地将关系应用到特定解决方案。本文问答了以下问题:

什么是关系?

Process Server 中的关系在业务集成解决方案中用于捕获驻留在不同域中的对象间的交叉引用。最常见的关系类型是身份关系,该关系捕获语义等效但在不同应用程序内以不同方式表示的业务对象间或业务对象属性间的交叉引用。这种类型的关系适用于 Process Server 所支持的两种模式(这是本文要重点讨论的内容):

  • 静态属性值的查询
  • 动态身份相关

查询关系

查询关系定义业务对象属性值 之间的手动填充映射。

示例 1. 查询关系

假定一个应用程序将 Address 业务对象的 state 属性表示为全名(例如“California”),而另一个应用程序使用双字母代码(例如“CA”)表示其 Address 业务对象中对应的 state 属性。您可以创建 StateCode 查询关系,以建立州全名和代码之间的静态映射。然后,当应用程序将一个地址转换为另一个地址时,通过查询 StateCode 关系,就可以在州名称和州代码之间进行转换。


图 1. 查询关系的概念视图
图 1. 查询关系的概念视图

如示例 1 中所示,查询关系通常在业务对象转换期间使用,以对属性值进行转换(否则就必须使用较长的硬编码 if-else 或 switch 语句进行转换)。领域特定的代码或状态指示符经常就是这种情况。查询关系中封装映射时,可通过在运行时支持修改映射来提供可重用性和提高灵活性。

动态关系

动态关系根据唯一对业务对象进行标识的键属性定义其间的相关性。在不同的应用程序中存在相同的业务对象,该对象具有特定于应用程序的标识符,而您需要在应用程序间交换此对象的实例时,就要使用此类关系。键属性映射不是手动填充的,而是在所连接的应用程序中的数据发生更改时,由 Relationship Service 动态地创建和删除。

示例 2. 动态关系

假定两个应用程序都定义了 Customer 业务对象,并生成了自己的内部键来唯一地标识此业务对象的实例。当对两个应用程序管理的客户数据进行集成时,两个应用程序中可能存在标识符不彼此匹配的相同客户。因此,为了在应用程序间交换关于客户的信息,必须维护两个应用程序中客户标识符的相关映射。客户创建动态 CustomerRelationship 来定义此类映射。在创建或删除客户时,Relationship Service 会动态地向关系添加或删除标识符映射。


图 2.动态关系的概念视图
图 2.动态关系的概念视图 
关系如何工作?

Relationship Service 将相关性数据存储在关系数据库的表中。关系的实例使用实例 ID 连接两个属性。图 3 显示了示例 1 中描述的地址关系的基础表的概念视图。


图 3. 关系表
图 3. 关系表

对于查询关系,实例数据在设计时以手动方式填充。当转换查询给定输入的输出时,Relationship Service 将使用实例 ID 来查找匹配行。

动态关系使用类似的表结构将键属性彼此关联;否则,实现实例创建和删除自动化就需要提供额外的上下文信息。为了给 Relationship Service 提供此上下文信息,必须在同步集成模式中使用动态关系。接下来让我们看一个该模式的应用示例,其中对存储在独立应用程序中的客户信息进行同步,以供销售部门和营销部门使用。

示例 3. 同步集成模式

两个应用程序连接到 Process Server(例如,通过使用应用程序特定的适配器连接)。最初两个应用程序中都不存在客户实例,关系表是空的。

Sales 应用程序创建了客户对象,并使用生成的标识符进行存储。该应用程序(或适配器)将标记为“已创建”的客户对象发布到 Process Server 中运行的同步模块。


图 4. 传入事件交付
图 4. 传入事件交付

接下来,将该客户对象转换为通用客户表示形式(作为不同客户对象间的通用标准使用)。作为转换工作的一部分,将调用 Relationship Service 来维护客户关系。Relationship Service 将业务对象标记为已创建,生成新实例 ID,并创建新的表条目来将其与应用程序特定的 ID 关联。它会将实例 ID 设置为通用客户对象的键属性。


图 5. 通用转换
图 5. 通用转换

然后会将通用客户对象转换为 Marketing 应用程序中使用的客户业务对象。将再次调用 Relationship Service;不过,因为尚未生成应用程序特定的标识符,因此不会进行任何操作。

当 Marketing 应用程序接收到所创建的客户,将生成新标识符,并存储该客户对象。它将返回包含所生成标识符的客户对象。


图 6. 传出请求
图 6. 传出请求

接收到的客户对象将转换回通用客户对象。在转换期间,将再次调用 Relationship Service。它将检测到所创建的业务对象作为实例 ID 为 1 的通用客户对象发出的请求的响应发出。它将创建新的表条目将该实例 ID 与应用程序特定的标识符关联。


图 7. 传出响应
图 7. 传出响应

首次创建了关系实例后,可以采用类似的步骤处理对客户信息的更新。Relationship Service 会直接使用关系实例来转换标识符,但不会对实例进行更改。接收到已删除业务对象并进行转换后,将转换标识符,然后禁用实例。

此实例说明了必须遵循的规则集,以便 Relationship Service 自动维护动态关系的交叉引用。

  1. 每个应用程序负责在出现更改时通知 Process Server。为了指示更改类型,应用程序必须将业务对象标记为“已创建”、“已更新”或“已删除”。有关如何将这些标记与 Process Server 中的业务对象关联的信息,请参见下一部分如何使用关系

  2. 您可以定义通用业务对象来对不同业务对象表示形式进行统一。您的转换逻辑必须将传入业务对象转换为此通用表示形式,然后才能将其转换为应用程序特定的业务对象,以发送出去进行同步。

  3. 您必须将所调用的操作(用于将新创建的业务对象发送到目标应用程序)定义为请求/响应操作。然后,Relationship Service 可以将新生成的标识符与响应路径上的关系实例进行相关。

  4. 除了规则 3 中描述的限制之外,没有任何其他限制适用于操作。

您可能会奇怪,为什么应用程序特定的业务对象需要首先转换为通用对象,然后才转换为目标格式。此规则的意图是,引导用户采用最佳实践:即尽可能减少所需维护的连接。示例 3 仅仅涉及到对两个应用程序进行集成;不过,您可能会稍后认识到需要集成也存储客户信息的其他应用程序。如果未定义通用客户对象,但添加了更多的应用程序,则还必须添加到所有其他应用程序的额外转换连接,会很快形成复杂的依赖关系网。根据通用数据表示形式开发核心业务逻辑,从而将其从每个应用程序的细节分离出来。

如何使用关系?

使用关系涉及以下操作:

  1. 定义关系。
  2. 将关系添加到转换。
  3. 手动调用关系。

本文将在概念层描述这些方面,并演示如何使用工具处理关系。有关形成集成解决方案的详细分步说明,请参见参考资料中提供的指向相关文章和其他信息的链接。

定义关系

使用 IBM WebSphere Integration Developer(以下称为 Integration Developer)定义关系。首先通过在 New relationship wizard 中选中或取消选中复选框 Use to transform. data attributes according to a static mapping(请参见图 8)定义关系类型。选中复选框,则创建查询关系;取消选中该复选框,则创建动态关系。


图 8. 新建关系向导
图 8. 新建关系向导

使用向导此页的单选按钮指定关系的基数性。选择 one-to-one 可创建身份关系,其中每个实例 ID 最多只能与每个表中一个值关联。请对大多数查询和动态关系使用此选项。您可以对将一个值映射到多个其他值的查询关系使用一对多或多对多关系。例如,邮政编码查询关系可以将电话区号“650”映射到邮政编码“94010”、“94305”等。

创建了关系定义后,可以向关系添加角色。角色代表我们目前所称的已连接应用程序。添加角色时,您需要对其命名,并选择要由此角色的关系维护的对象类型。

对于动态关系角色,请选择与为其他对象选择的业务对象语义等效的业务对象,并指定用于标识该对象的键属性。动态关系还需要一个托管角色来表示通用域。托管角色采用通用业务对象,指向将在运行时保存关系实例 ID 的键属性。 图 9 显示了 CustomerRelationship 的关系定义;关系编辑器将托管角色以蓝色突出显示。


图 9. CustomerRelationship 关系定义
图 9. CustomerRelationship 关系定义

可以使用其多个属性对业务对象进行标识,这称为组合键。组合角色一个特殊情况是,业务对象只能通过将其键属性与父级的键属性进行组合来唯一标识。在这种情况下,您要选择父级 业务对象,并定义两个键属性:一个指向父级键,一个指向子级键。图 10 显示了行式项目之间的关系,其中为行式项目定义的角色之一仅仅在其所属的订单内具有唯一性。


图 10. 组合行式项目角色
图 10. 组合行式项目角色

对于查询关系中的角色,您可以选择业务对象,或将键属性指向静态映射中使用的属性,或者还可以选择要映射的简单类型值。建议采用后一种方法,因为此方法可提高关系的重用性。

例如,您可以在 Address 业务对象的 StateCode 查询关系中定义角色并让键属性指向 State 字段,或者,可以直接对每个角色使用简单字符串类型。通过字符串类型,如果业务对象之间需要字符串类型的属性之间的州名称到州代码的映射,则可以在这些业务对象之间的任意映射中重用此关系。通过在角色中使用 Address 对象,可将关系限制为地址间的映射。我们的 StateCode 关系定义如图 11 中所示。

创建查询关系需要进行一个额外的步骤,即预先填充实例数据。 图 11 显示了 StateCode 关系的实例数据窗口。实例按实例 ID 列出,您可以对其添加或删除。要指定值,请在实例中选择角色名称,并输入特定值。


图 11.StateCode 关系定义
图 11.StateCode 关系定义

将关系添加到转换

您可以在使用业务对象映射时向转换添加关系。

通过在源属性和目标属性之间绘制 Relationship Lookup 转换,即可应用查询关系。此转换类型是 Process Server V6.1 中新推出的,仅能将其用于身份查询关系。要配置此转换,请在 details 窗格中选择关系名称、源对象和目标对象。图 12 显示了包含 StateCode 关系的关系查询转换的映射定义。


图 12. 业务对象映射中的关系查询转换
图 12. 业务对象映射中的关系查询转换

在 Process Server 的早期版本中以及很多多对多查询中,都需要使用 Relationship Service API 来手动从自定义转换查询属性值。有关如何进行此操作的信息,请参见手动调用关系

要在业务对象映射中应用动态关系,请在其标识符要相关的两个业务对象之间绘制一个 Relationship 转换。使用关系的名称和特定于应用程序的角色配置转换。因为源或目标必须为通用业务对象,而且每个关系中只存在一个托管角色,因此不需要托管角色名称。图 9 显示了使用 CustomerRelationship 的示例关系转换。


图 13. 业务对象映射中的关系转换
图 13. 业务对象映射中的关系转换

正如我们前面讨论的,动态关系并不独立工作,必须将其在端到端集成模式中使用。因此,调用动态关系的业务对象映射必须恰当地嵌入在围绕之前讨论的规则构建的上下文中。您可以按照图 14 中所示在 Process Server 中实现此模式。


图 14. Process Server 中的数据同步
图 14. Process Server 中的数据同步

业务对象映射 () 通过使用关系 () 执行数据转换,将从接口映射 () 进行调用,这些接口映射用于在应用程序特定的接口和通用接口之间进行传输 ()。接口映射导入和导出的服务用于在应用程序及中央调度逻辑之间发送和接收业务对象。

调度逻辑直接将业务对象发布到所有与更改相关的应用程序(在本例中只有一个应用程序)。

当接口映射调用业务对象映射时,将会传递 Relationship Service 所必需的信息,以确定其调用上下文。

提示:从 V6.1 开始,可以在中介流组件中使用业务对象映射和关系。因此,您还可以直接在 WebSphere Enterprise Service Bus 中通过将接口映射替换为中介流组件实现上述流。

此模式的另一个方面是,标记如何与业务对象关联来指示是否已创建、更新或删除了对象。Process Server 使用业务图包装业务对象,业务图是与业务对象关联的额外元数据的容器。要生成业务图,请使用 Integration Developer;右键单击业务对象并选择 Create a Business Graph 即可。

业务图具有两个可用于表示标记的工具(请参见图 15):谓词更改摘要

  • 谓词是指示要对对象图执行的操作的字符串,通常为 CreateUpdateDelete。谓词为 Update,则要由图的接收方确定图中修改了哪些内容;该谓词应用到整个图。
  • 更改摘要记录从开启后应用于图中对象和属性的所有更改。然后可以直接从更改摘要派生出图中任何对象或属性的标记。


图 15. 业务图中的谓词和更改摘要
图 15. 业务图中的谓词和更改摘要

动态关系所维护的业务对象必须始终包装在包含谓词或更改摘要信息的业务图中,以便 Relationships Service 可以确定采取什么操作。

手动调用关系

您还可以通过 Relationship Service API 在业务对象映射内外采用编程方式使用关系。其中主要的相关 API 元素有:

[create|retrieve|deactivate|delete|exists]Participant 创建、检索、禁用或删除参与者。参与者是给定实例中的角色的值,可以为简单值,也可以为业务对象。 [exists|deactivate|delete]ParticipantByID 按实例 ID(与按值操作的方式相对)检查参与者是否存在、禁用或删除。 addParticipantWithID 将新参与者添加到给定实例(仅用于多对多关系) retrieveInstanceIDs 返回给定角色的参与者的 ID 数组。对于身份关系,该数组最多只能包括一个实例 ID。 staticLookup 根据输入业务对象中的属性值在输出业务对象中查询属性值(6.1 中新推出的功能) correlate 在动态关系中自动维护两个业务对象间的相关性(6.1 中新推出的;以前为 maintainIdentity) [get|set|unset][Relationship|Role]Property 将属性(如创建时间)与角色或关系实例关联

清单 1 显示了采用编程方式检索、添加和删除实例数据的代码示例。


清单 1. 使用关系实例数据的 CRUD API 元素

//locate the Relationship Service
RelationshipService relService = (RelationshipService)ServiceManager.INSTANCE.
   locateService("com/ibm/wbiserver/rel/RelationshipService");

//The names of our relationship and its roles
String relationshipName = "http://CRMLib/StateCode";
String roleName_full = "http://CRMLib/FullStateName";
String roleName_code = "http://CRMLib/StateCode";

//programmatically query a lookup relationship 
String fullName = "California";
String code = null;
int[] ids = 
  relService.retrieveInstanceIDsByString(relationshipName, roleName_full, fullName);
if( ids.length > 0 ){
   List codes = relService.retrieveParticipants(relationshipName, roleName_code, ids[0]);
   if( !codes.isEmpty() )
      code = (String)codes.get(0);
}

//add a new relationship instance
String newFullName = "Alabama";
String newCode = "AL";
int genId =  
  relService.addParticipantString(relationshipName, roleName_full, newFullName);
relService.addParticipantStringWithID(relationshipName, roleName_code, genId, newCode);

//remove relationship instance
relService.deleteParticipantString( relationshipName, roleName_full, newFullName);
relService.deleteParticipantString(relationshipName, roleName_code, newCode);

清单 2 显示了如何以编程方式使用 staticLookup(V6.1 中新推出的)执行对 StateCode 关系的查询。


清单 2. 查询转换

//locate the Relationship and BOFactory Service
RelationshipService relService = (RelationshipService)ServiceManager.INSTANCE.
  locateService("com/ibm/wbiserver/rel/RelationshipService");
BOFactory boFactory = 
  (BOFactory)ServiceManager.INSTANCE.locateService("com/ibm/websphere/bo/BOFactory");

//The names of our relationship and its roles
String relationshipName = "http://CRMLib/StateCode";
String roleName_full = "http://CRMLib/FullStateName";
String roleName_code = "http://CRMLib/StateCode";

//name space and BO names
String tns_app1 = "http://CRMLib";
String addressName_app1 = "Address_App1";
String stateProp_app1 = "state";
String tns = "http://CRMLib";
String addressName = "Address";
String stateProp = "state";

//create input and output address with input state set
DataObject address_app1 = boFactory.create(tns_app1, addressName_app1);
address_app1.setString(stateProp_app1, "California");
DataObject address = boFactory.create(tns, addressName);


//Have the Relationship Service set the state code into the output
relService.staticLookup(relationshipName,
			roleName_full,
			address_app1,
			new String[]{stateProp_app1},
			roleName_code,
			address,
			new String[]{stateProp});

要使用 correlate API 元素来维护动态关系,必须手动传递在其他情况下由接口映射提供的上下文信息。Process Server 提供了如何进行此工作的关系示例项目。您可以在 Process Server 目录的 samples/lib/RelSample 下找到该示例及其源代码。

如何管理关系?

Process Server 提供了用于管理关系的管理接口 Relationship Manager,并集成到了管理控制台中。您可以在运行时使用此接口对查询关系和动态关系的关系示例进行查询和操作。Relationship Manager 将调用 Relationship Service 公开的 JMX API,您也可以使用此 API 来构建自己的自定义管理功能。


图 16. Relationship Manager
图 16. Relationship Manager

还可以在不必进行任何额外配置的情况下在网络部署(Network Deployment,ND)环境中使用关系。在 ND 环境中,关系安装在应用程序集群中。关系在集群中具有可见性,集群中的所有服务器都可以访问存储在关系数据库中的实例数据。在 ND 环境中运行 Relationship Service 的能力使其具有了可伸缩性,并具有高度的可用性。

为了在 ND 环境中管理关系,Relationship Manager 通过选择其关系 MBean 连接到集群中的服务器。因此,可以通过集中的管理接口跨不同的集群对关系进行管理。

可以在哪里找到关于关系的更多信息?

既然已经了解了关系背后的概念和思想,您可能会迫不及待地想尝试一下或深入了解其工作方式。以下是一些我们推荐的资源,除非特别说明,否则都会在参考资料部分列出。

  • 针对 Process Server 的 IBM Education Assistant 模块讨论了更多的 Relationship Service 基础技术细节,并提供了一些有用的实验和演示。

  • 之前关于关系的 developerWorks 系列文章 WebSphere Process Server Relationship Service 提供了一些基本的操作信息,其中包括从自定义代码调用查询关系的示例。

  • 随 Process Server 提供的关系示例演示了如何使用相关 API 来以编程方式维护动态关系。此示例位于 Process Server 目录的 samples/lib/RelSample 下。

  • WebSphere Business Process Management 信息中心提供了关于创作和管理工具的丰富参考信息。

  • 最后,请关注 developerWorks WebSphere 推出的后续教程,其中将详细介绍为本文所述示例用例创建端到端集成解决方案的步骤。

词汇表

业务对象是代表业务功能或元素(如客户或发票)的应用程序数据的容器。

业务图是围绕业务对象或业务对象的层次结构添加的包装,用于提供额外的功能。例如,您可以在业务图中提供与业务对象相关的更改摘要和事件摘要信息。

业务对象映射支持源业务对象和目标业务对象间的映射。它们是 WebSphere Process Server 中的支持服务组件,负责基于源业务对象中的值向目标业务对象分配值。

接口映射在接口映射编辑器中创建,用于解析和协调交互组件的接口间的差异。

结束语

本文说明了如何在复杂的集成解决方案中利用关系来提供交叉引用功能。我们重点讨论了 Process Server 所支持的两个关系模式,静态属性值的查询和动态身份相关。您现在应该具有了将关系投入使用,将其应用于您特定的解决方案的必要知识。

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/14789789/viewspace-410142/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/14789789/viewspace-410142/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
IBM WebSphere Application Server(简称WebSphere)是IBM公司推出的一款基于Java的应用服务器。它是目前市场上最受欢迎的应用服务器之一,广泛应用于企业级应用程序的开发和部署。 WebSphere具有强大的功能和提供稳定可靠的性能。它支持多个操作系统平台,如Windows、Linux和AIX等,适用于各类企业级应用。它提供了集群、负载均衡和故障恢复等功能,保证了系统的高可用性和可靠性。 WebSphere使用Java EE(Java Platform, Enterprise Edition)作为开发标准,支持大量的Java EE技术,如Servlet、JSP、EJB和JMS等,这样开发者可以使用这些技术来构建可扩展的、分布式的企业级应用程序。 此外,WebSphere还提供了一系列的工具和组件,方便开发人员进行应用程序的开发和部署。比如,它提供了集成开发环境和调试工具,帮助开发人员提高开发效率和代码质量。它还支持基于开放标准的Web服务,使得应用程序能够与其他系统进行无缝集成。 作为一款商业级应用服务器,WebSphere也提供了强大的安全控制机制,帮助企业保护应用程序和数据的安全。它支持传输层安全协议(TLS)和基于角色的访问控制等安全特性,以及集成的认证和授权机制,确保应用程序的安全性和合规性。 总的来说,IBM WebSphere Application Server是一款功能强大、稳定可靠的企业级应用服务器,为企业提供了全面的开发、部署和管理功能,帮助企业构建可扩展的、分布式的Java应用程序。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值