级别: 初级 Ganapathi Adimurthy (ganamurt@us.ibm.com), 软件工程师, IBM
2005 年 4 月 01 日 本文提供了对全球化的概述,并且说明了全球化的概念如何应用到 WebSphere Business Integration Adapter 的实现。您可以实现一个全球化的 WebSphere Business Integration Adapter,来集成使用一个单独的适配器集成全球的业务数据。这里使用一个业务集成场景来图示 WebSphere Business Integration Test Adapter 的全球化。
引言
在软件行业中,软件的开发和交付很长时间被限制在本地客户和业务需求。随着全球员工人数的增长和业务环境的变化,了解全球范围客户的业务需要,来开发和出售以全球潜在客户为目标的软件产品,增加收益目标和客户库变得越来越紧迫。
本文介绍了全球化的概述,以及如何使用 WebSphere BI Test Adapter 来全球化 WebSphere® Business Integration Adapters(以后称为 WebSphere BI Adapters)。实现全球化的 WebSphere BI Adapter 通过使用单独的适配器实现来帮助集成全球的业务数据,而不用为每个国家、语言、区域等开发不同的适配器。
为了理解本文中出现的概念,您应该熟悉 WebSphere Business Integration 策略和在应用程序集成和业务流程集成中的 WebSphere BI Adapter。本文中 WebSphere BI Adapter 全球化对于使用 WebSphere BI Adapter Framework Version 2.4.0 或更高版本开发的适配器都是可用的。
全球化概述
软件全球化是设计、实现和交付软件产品给全球市场的顾客的过程。软件产品通过一个组件实现全球化,该组件使用一个单独的可执行程序来呈现各种语言的数据。
为了更好的理解本文中使用的基本的国际化术语,表格 1 定义了术语 Globalization,Translation,Internationalization 和 Localization。
表格 1. 基本的国际化术语和定义
|
Term
|
Abbreviation
|
Definition
| |
Globalization
|
G11N -- 数字 11 表现的是 Globalization 的第一个字符 G 和最后一个字符 N 之间的字符数 | Globalization 是 Translation,Internationalization 和 Localization 的联合。
| |
Translation
| N/A | Translation 是将可译的文本从一种语言向另外一种解释和适应的过程。可翻译的文本包含源代码中的静态字符串,图形用户接口和消息文件。 | |
Internationalization
|
I18N
| Internationalization 是使用一个单独的可执行程序来表现使用多种语言的数据,来适应不同的语言和文化。Internationalization 促进了软件产品向国际市场的发布。 | |
Localization
|
L10N
| Localization 是在软件产品中合并特定国家文化的数据呈现的过程。Localization 促进了软件产品向特定国家市场的发布。 |
一些 G11N 的例子包括如下:
- 外部化应用程序中所有应编码的字符串。
- 将源代码中的可翻译文本外部化为消息文件,数据表或者资源束文件。
- 使代码中的方法包含数据编码系统,支持不同的语言和平台。
- 为因文化不同而不同的数据格式提供本地支持。
- 在开发用户接口的时候,考虑到可翻译文本消息的扩展。
图 1 显示了在 Windows® 平台下的地方性区域选项。您可以改变区域设置,强制使用特定国家文化的 Numbers、Currency、Time 等数据格式呈现。大多数软件应用程序支持的区域选项包含 Number 格式、Date/Time 格式,Currency 格式,Calendar 格式和 Unit 测量格式。
图 1.Windows 平台下的区域选项
在全球化的环境中,数据可能发源于多种来源,并且处理时不能有任何数据缺失或破坏。全球化的数据使用经过编码的字符集来体现,叫做编码页面,在该页面中数据被映射到二进制模式。
在不同编码页面中数据向二进制模式的映射帮助无损的交换国际数据。编码页面有唯一的编码计划,为图形和控制字符定义了一系列值。图 2 描述了一个场景,数据转换在又编码计划标记的不同的 Single Byte Character Set(SBCS)编码页之间发生。图 2 中的每个箭头表示以不同二进制模式体现的不同字符组成的数据流。不同的操作系统在全球化环境中支持不同数量的编码页面。虽然存在多个编码页面,但是 Unicode 被广泛的作为国际化的文本编码技术来使用,来保证数据完整性和避免代码页转换。Unicode 格式化为 UCS -2 和 UTF-8,用于字符和文本的统一字符编码计划是 WebSphere Business Integration 的组件。
图 2. 全球化环境中的数据交换
WebSphere Business Integration 组件通过多种方式来执行应用程序和业务流程集成。在业务流程里面的这种交互过程中的数据流必须考虑到在业务集成系统中读写全球化数据的影响。本文的范围局限在 WebSphere Business Integration Adapters 和适配器架构的全球化需要。
适配器框架包含必须的运行时应用程序病程接口(API)来支持适配器功能。应用程序适配器在不同的平台上建立应用程序连接,并且通过使用集成代理和适配器框架 API 来在多个平台间传输数据。最常见的情况是用本地编码来操作数据并且将数据格式转换为 Unicode 格式。在本地编码和 Unicode 之间的转码是通过适配器框架依据适配器标准配置属性规范,CharacterEncoding 来实现的。
图 3 显示了发生在 WebSphere Business Integration Components 适配器代理,适配器框架和集成代理之间的转码流程。Java™ 适配器代理内部以 Unicode 格式来操作数据。本地编码页中编码的应用程序数据在适配器框架以事件形式向集成代理交付应用程序数据时需要转换成 Unicode 格式。在 Unicode 格式中编码的应用程序数据不需要任何的转码。图 3 使用 WebSphere InterChange Server 作为集成代理,其实适配器框架交付 Unicoded 事件给 WebSphere InterChange Server。
图 3. WebSphere Business Integration Components 中的转码机制
全球化的 Java 适配器代理
全球化的 Java 适配器代理考虑了从特定应用程序适配器代理代码中分离出可翻译的文本字符串的全球化概念,使用了适配器框架的运行时地区属性和业务对象和数据处理器中的全球化数据的区域敏感的处理。
在我们开始介绍这种情况以前,花一些时间来熟悉下面这些概念:
- LogandTrace Messages
- 国际化适配器日志和跟踪消息需要消息文件的使用来生成文本消息。Java 适配器框架 API 提供了通过消息文件的使用来生成日志和跟踪消息的方法。消息文件中的消息字符串有一个唯一的标志符。当您从消息文件中生成地区敏感的消息时您将该唯一的消息标志符作为参数传递。图 4 描述了生成国际化适配器日志和跟踪消息的过程。包含唯一标记地区化消息的特定地区的适配器消息文件放置在 connectors\messages 目录的下面,该目录是 WebSphere Business Integration 框架的安装目录。适配器框架方法 generateAndTraceMsg () 和 generateAndLogMsg () 从消息文件中读取特定区域的消息,并将这些适配器跟踪和日志消息指引到跟踪和日志目的地,该目的地在 Java 适配器的适配器配置属性中单独指定。
图 4. 国际化适配器日志和跟踪消息的生成
- Business Objects
- Business Objects 有于其关联的区域,因为 Java 适配器代理执行应用程序数据的地区敏感的业务处理。如果一个业务对象没有与其相关的地区,适配器框架会指派运行时适配器框架区域作为业务对象的区域。适配器框架 API 的 CWConnectorBusObj 类提供了一些方法用来设定和获取业务对象地区。
- getLocale () 获取业务对象实例的地区。
- setLocale () 设置业务对象实例的地区。
CWConnectorUtil 类的 createBusObj () 方法有一个方法原型,将地区作为它的一个参数并且创建一个业务对象实例。
- 适配器配置属性
-
适配器配置属性是在 Java 适配器代理在其初始化阶段来读取。如果属性键没有国际化,一般标准的和应用程序特定的连接器属性值就会被国际化。标准的和应用程序特定的连接器属性键包含 US English 区域 en_US 字符。您可以通过 Java 适配器框架 API 中 CWConnectorUtil 类的使用,来实现一个国际化 Java 适配器代理来获得国际化适配器配置属性。
- getConfigProp () 获取给定属性键的特定适配器配置属性。
- getAllConnectorAgentProperties() 获取所有的适配器配置属性并将其放入 Java Hashtable 对象。
获取配置属性的方法考虑了单字节和多字节字符集两种情况。
- Data Handlers
-
数据处理器是一个 Java 类实例,将数据从一种序列化格式转换为一个业务对象,反之亦然。数据处理器经常被 WebSphere Business Integration 组件来使用,来推动 WebSphere Business Integration Message Brokers 和其他外部应用程序之间的数据交换。Java 适配器可以利用数据处理器来处理适配器数据。例如 XMLDataHandler 被 Java 适配器代理使用,用来将业务对象转换为 XML,反之亦然。
通过 Java 适配器代理进行业务对象字符串转换的示例:
- 在服务调用请求处理过程中,Java 适配器代理调用一个数据处理器,将业务对象数据转换为字符串格式。
- 在时间通知过程中,Java 适配器代理调用数据处理器将字符串转换为业务对象。
自定义的数据处理器设计用来将自定义序列化格式的数据转换为业务对象,反之亦然。数据处理器基类方法提供了如下的 Public 方法原形,来处理国家化数据:
- getEncoding () 获取数据处理器实例使用的编码。
- getLocale () 获取数据处理器实例的地区。
- setEncoding () 设置数据处理器实例使用的编码。
- setLocale () 设置数据处理器实例的地区。
下一部分为集成零售应用程序描述了国际化一个 Test Adapter 的例子。
一个测试业务集成场景
这部分假定一个由测试应用程序组成的业务集成场景,在数据库中存储测试数据,并且使用 Test Adapter 代理来执行事件表决和服务调用请求处理功能。Test 消息起源的 Test 应用程序是发布者,并且消费发布者提供的消息的 Test 应用程序是订阅者。无论什么时候发生消息事件,该应用程序都将其写入到消息表中。发布适配器从消息表中读取并且发布下个消息。如果表格为空,适配器就不发布数据。引入消息中的数据通过 Subscribing API's 被插入到合适的数据库表中。订阅适配器调用订阅 API's 来完成消息消费操作。
Test Adapter 概述
Test Adapter 通过 WebSphere Business Integration Message Brokers 提供了应用程序连通性,推动了 Test 应用程序的集成。一个 Test 适配器实例通过从消息表中选举的办法,被配置用来提供事件通知。Message Table 可以是一个 Oracle 数据库,通过分别调用 GETNXT() 和 ADDTOTABLE() 函数,具备从消息表中读取和写入数据的功能。
图 5. Test Adapter 功能概述
Test Adapter 的实例也被配置用来消费从消息表中选出的消息。通过配置,一个适配器实例会作为一个发布和/或者订阅适配器,并且使用应用程序 API 来获取和处理消息。在事件通知过程中,Test Adapter 选出消息表格来获取消息数据(图 5),该消息表格被配置来支持和执行它的 GETNXT API。这时它创建一个业务对象,类似消息的结构,并且将业务对象交付给 WebSphere Business Integration Message Broker。当并行的消息处理需要获取大量的数据时,需要创建多个选择线程,每个都被配置来为一个或者多个消息表服务。
对于订阅方,通过使用 Test 应用程序 CONSUME () 函数调用,Test Adapter 处理 WebSphere Business Integration Message Broker 中过来的请求。(图 5)
用于 Test Adapter 的国际化解决方案
这一部分集中在 WebSphere BI Test Adapter 的初始化阶段
初始化
在初始化阶段,Test Adapter:
- 从适配器运行时知识库中读取配置信息。
- 验证所需的适配器配置属性。
图 6. Test Adapter 标准配置
- 调用 WebSphere BI Adapter 框架的 getGlobalLocale() 方法来获取运行时地区,并且在内存中保持地区信息。
- 如果适配器被配置来从消息表中选出,该适配器就会根据为 MetaObjects 应用程序特定的适配器配置属性指定的值来初始化和开始选择线程。
- 如果适配器被配置用来消费到 Test 应用程序的消息,如果没有例示消息选择线程就返回成功。
图 6 显示了 Test Adapter 的标准适配器配置,在该适配器中,全球化属性地区和 CharacterEncoding 可用,其被指定为适配器配置属性。Test 适配器使用为特定应用程序地区配置属性指定的数据来支持 Number 格式、Date/Time 格式、Currency 格式、Calendar 格式和 Unit 测量格式。
终止
在终止阶段,Test 适配器
- 检查任何消息选举线程,并且依靠选举活动的完成或者时期超时来终止。
- 清除到 Test 应用程序的数据库连接。
事件处理
Test 适配器通过调用 pollForEvents () 方法来处理事件处理。Test 适配器代理的 pollForEvents 方法将事件处理推给线程管理器的时间处理方法。线程管理器通报选举线程来开始选举并且等待,直到所有的线程已经完成选举并返回。每个线程将调用它的 GETNXT () 方法并且通过它的消息表进行重复,直到没有事件来获取及处理,或者检测到致命的错误。通过调用适配器框架的 gotApplEvent() 方法,被处理的事件作为业务对象被交付给集成代理。适配器框架 API 调用 CWConnectorUtil.createBusinessObject(BOname, localeName),允许您创建适配器运行时地区的业务对象。
服务调用请求处理
Test 适配器通过 doVerbFor() 方法,处理来自集成代理的服务调用请求处理。Test Adapter 的服务调用请求处理包含如下内容:
- 获取一个 Test 消息业务对象作为输入。
- 检查 Test 消息业务对象,来从消息属性中获取 XML 消息。
清单 1. 用于步骤 3 的全球化代码片断
nvdh = DataHandler.createHandler(DEFAULT_NVDATAHANDLER_CLASSNAME, null, null);
String glocaleName = TestConnectorAgent.instance().localeName;
Locale l = TestConnectorAgent.instance().getLocaleObject();
nvdh.setEncoding("UTF8");
nvdh.setLocale(l);
nvDHConfigObj = CWConnectorUtil.createBusinessObject(DEFAULT_NVDATAHANDLER_MONAME, glocaleName);
nvDHConfigObj.setDefaultAttrValues();
dh = DataHandler.createHandler();
dh.setEncoding("UTF8");
dh.setLocale(Locale);
|
- 当需要转换 Test 消息 B0 中的一个非 XML 消息为 XML 时,利用 XML 数据处理器。
- 构造 CONSUME API 名称来执行消费操作。
- 当消息被消费时,取得到 Test 应用程序的连接。
- 为 CONSUME 构建 SQL 语句,执行该消息的 CONSUME 作为其输入参数。
- 返回 CONSUME 操作的结果。
因为数据转换发生在步骤 3,其中利用了 XML 数据处理器,通过在数据处理器对象内部设置编码和地区信息来实现数据的全球化(如清单 1 所示)。
结束语
本文介绍了全球化的总体概念,以及如何使用 WebSphere BI Test Adapter 来全球化 WebSphere BI Adapter。全球化 WebSphere BI Adapters 来集成全球业务数据,可以帮助您使用一个单独的适配器实现来避免为每个国家、语言和地区开发适配器。
参考资料
关于作者  | 
|  | Ganapathi Adimurthy 是佛罗里达 Boca Raton 的软件工程师,在 IBM Application 和 Integration Middleware(AIM)部门工作,主要为集成多个应用程序的业务流程集成而设计和开发 WebSphere 业务集成适配器。 |
对本文的评价
|