专利名称:处理组件更新消息的方法和设备的制作方法
技术领域:
本发明涉及消息的处理,并且更特别地涉及在消息内的元素的定位。
背景技术:
在消息发送(messaging)环境中,消息产生者经由诸如来自IBM公司 的一个可用的消息发送系统向消息使用者发送消息。
一个或多个居间器(mediation)服务应用程序可以位于消息处理环境中。 所述居间器服务应用程序拦截和修改在产生者和使用者之间传递的消息。因 此,居间器可能产生输入消息的稍微修改的版本作为输出,其中修改可以是 关于消息的路由的上下文信息、消息内容、或者在记录或监视居间器(处理 组件)的情况下是只读的。
居间器实现需要对消息内容的某些部分的访问,以便执行其功能。 一般 地,向居间器提供具有某种本地(native)或规范格式的完整消息,并留下以 对于其自身确定要读取和修改消息的哪些部分。因此每一个居间器实现均敏 感于向其提供的消息的结构,并且可能必须具有处理来自不同源的消息的特 定代码。这样的代码指示由特殊消息格式限定的每一个元素的位置。此外, 预先不知道居间器要求和/或更新哪些值。
居间器一般具有多种属性,例如,为了执行其处理,可以设置以指示居 间器要求的信息的值。注入(injection)是覆盖(cover)基于与所述居间器 相关联的元数据,从由运行时间确定的值中设置居间器属性的技术术语。通 常这些注入属性代表对于居间器处理节点的运行时间创建的其他对象(如其 他企业JavaTM Beans )的配置参数或参考。(Java和所有基于Java的商标都 是美国或其他国家或两者中SunMicrosyst ems公司的商才示)
Enterprise Bean Programming Model 2,0允许EJB对象包括可以检索 (retrieve)或更新的多种属性。EJB对象可以保持数据库记录的形式。对等 地,数据库记录可以重新构成EJB对象。目的是实现两者之间的同步。然而, 不可能提前推断出将要更新哪些EJB属性。美国专利申请6,636855公开了用于处理数据流的系统。提供输入映射, 用于提取值以用作针对存储的过程的输入参数。还提供输出映射,其描述如 何利用从存储的过程返回的输出参数来补充消息。
发明内容
根据第一方面,提供了处理组件更新消息的方法,包括 接收用于由处理组件处理的消息;
从处理组件的声明接口中推断出将由处理组件更新一个或多个消息值作 为其处理的结果;
使用处理组件的接口以获得一个或多个更新的值;并将该更新应用于消
自
例如,要更新的值可以从声明接口的方法调用的名称中推断出,或者可 以从由声明接口列出的额外信息中推断出。
此外,优选地从处理组件的声明接口中推断出处理组件要求的一个或多 个消息值以便进行其处理。
优选地使用处理组件的接口以便从消息中获取一个或多个所要求的值。
再一次,作为示例,所要求的值可以从声明接口的方法调用中推断出, 或者从由声明接口列出的额外信息中推断出。
根据优选实施例,与处理组件相关联的元数据用于在消息中定位所要求 的值。
优选地,所定位的要求的值被传递到处理组件。 根据优选实施例,与处理组件相关联的元数据用于在要更新的消息内定 位每一个消息。
优选地,确定消息的类型,并访问适于消息类型的元数据。 根据一个实施例,使用处理组件将更新的一个或多个消息值的知识来确 定需要由处理组件本地地存储消息的哪些元素。
根据第二方面,提供了处理组件更新消息的设备,包括 接收用于由处理组件处理的消息的部件;
从处理组件的声明接口中推断出将由处理组件更新一个或多个消息值作 为其处理结果的部件;
使用处理组件的接口,以获得一个或多个更新的值的部件;以及将更新应用于消息的部件。
本发明可以以计算机软件实现。
现在仅作为示例并参照附图,描述本发明的优选实施例,在附图中:
图1图解根据本发明的优选实施例的消息发送环境;
图2a示出根据本发明的优选实施例的居间器;
图2b提供根据本发明的优选实施例的示例性元数据;
图2c图解示例性QuoteResponse消息;以及
图3图解根据优选实施例的本发明的处理。
具体实施例方式
图1提供了其中可以实现本发明的优选实施例的消息处理环境的示例。 消息产生者10经由消息发送系统20向消息使用者50发送消息。在消息发送 系统内,由消息移动组件(未示出)将消息从输入队列25传递到输出队列 30。
消息使用者50在输出队列30请求下一消息,并且消息发送系统将所述 消息向前转送。处理节点35位于消息发送系统20与消息使用者50之间。这 包含居间器40 (处理组件),其拦截所述消息并使用在所述消息内包含的值 来进行一些额外处理。
仅作为示例,消息产生者10表示股票报价服务(stock quote service )。 消息使用者50请求当前IBM⑧股票价格。消息发送系统20向消息使用者50 转送的消息可以是对于该请求的答复。
消息使用者50可以代表欧洲客户,他感兴趣与以美元对其进行出示 (produce)相对的欧元的当前IBM股票价格。因此居间器40可以提供将所 检索到的股票价格转换为欧元所需的功能。图2a图解根据本发明的优选实施 例的、更详细的居间器40。居间器在其已声明接口 (1/F)45列出"set"和 "get"方法的列表。set方法的存在表示居间器实现要求值,而get方法的存 在表示居间器实现修改值。在该示例中,货币类型(currency type )、量(amount) 和汇率(exchange rate )是所要求的值(经由set方法设置表示这些值的居间 器属性)。amount也是居间器作为其包含的任何"do"处理的结果而更新的所接收到的消息中的字段(经由get方法检索表示该值的居'间器'属性的更新 值)。
某些元数据60与居间器40相关联。如图2b所示,该元数据表示由在居 间器的接口 45处列出的set和get方法要求的字段值的所接收到的消息内的 位置(对于特殊消息格式)。因此,所示的元数据表示Amount可以从被称为 QuoteResponse的消息中检索到,并且在位于y字段(反过来位于字段x内) 内的amount字,爻内。类4以;t也,Currency ^f立于QuoteResponse字l殳内,所述 QuoteResponse字^殳具有位于字段z内的currency字段。可以在站点 exchangerate.com/currencyx to euro (其是作为示例的、将请求的货币转换为 欧元的站点)上找到exchange rate (汇率)。在图2c中图解示例性 QuoteResponse消息。
当配置或配备元数据时,优选地向其提供居间器。如上所述,这样的元 数据将来自特殊格式(类型)的消息的特定字段映射到get和set方法。可以 通过指定XPath表达式来实现这样的映射。
图3示出根据优选实施例的本发明的处理。现在将联系图1的消息发送 环境、图2a的示例性居间器、图2b的元数据和图2c的消息来读该图。
在步骤100,由处理节点30的运行时间(未示出)来接收图2c的 QuoteResponse消息。运行时间从由居间器的接口的set方法限定的消息中提 取字段(步骤110)。元数据60用于确定所接收到的消息内必需的字段的位 置。在操作多种格式的消息的系统中,可能必须确定所接收到的消息的格式 (类型)以及后续要使用的合适的元数据。
在步骤120,由处理节点35的运行时间调用居间器40的set方法 (Currency, Amount, ExchangeRate )。这样,将居间器40内的currency、 amount 和exchange rate变量(属性)55设置为所提取的字段内包含的值。在该示例 中,currency是美元,amount是15,而用于将美元转换为欧元的exchange rate (如/人www,exchangerate.com/currencyx_to_euros中才企索)是1.42。
所要求的变量的名称(即,在居间器的"do"处理中使用并在元数据中 指定的那些)可以从在居间器的接口处列出的set和get方法的名称中得到。 可选择地,这样的额外信息可以列出在接口本身。
在步骤130,运行时间使用"set"值(属性)来调用居间器的"do"处 理。示例性do处理将amount( 15 )乘以对于所要求的currency的exchange rate
7(如欧元,1.42)。
然后,在步骤140调用任意get方法,以便提取作为do处理的结果而产 生的任意更新的值(属性)。在该实例中,居间器的do处理已经返回对于 amount的新值(15*1.42=21.30)。因此,这是提取的值,并且在步骤150更 新相关消息字段(在这种情况下是amount字段)。元数据60用于直接定位 amount字段而无需分析整个消息。
在步骤160 ,向消息使用者50转送QuoteResponse消息。
因此,连同居间器作为其"do"处理的结果而更新(经由get方法)的 属性一起提供在居间器实现上的接口 ,其列出居间器将要求(经由set方法) 的属性。然后,运行时间基础设施可以连同分别指定的元数据一起、合适地 调用那些方法,其中该元数据将具有特殊具体消息格式(方案)的消息字段 映射到居间器属性。这提供极其简单的居间器编程模型,其允许居间器与消 息起源(格式)独立地被编码,并且还提供关于要访问和/或修改哪个消息字 段的整个信息(这允许显著的最优化)。不再需要分析整个消息。
由元数据使消息访问分离并限定意味着可以利用不同元数据对于大量消 息再使用单个居间器实现。
可以提供基于输入/输出参数及其类型的限定组来产生基本(skeleton) 居间器实现的加工(tooling),然后居间器记录器(writer)只需要处理居间 器逻辑,而没有消息访问/更新逻辑。
当然,将理解,以上给出的股票报价示例决不旨在限定。居间器具有多 种用途,包括变换、记录(log)等。只要居间器需要更新消息内的值,本发 明均具有效用。还应该理解,居间器的位置可以在消息发送环境内的多个地 方之---如在消息发送系统本身或者与消息产生者或使用者共处。
所公开的解决方案特别有利性在于处理节点的运行时间不需要保持中 间消息元素的表示。因此,如果居间器属性被映射到消息元素a/b/c/d/e/f,则 运行时间只需要创建f的表示。之前,需要存储消息的完整表示,而这是低 效的。更详细地进行解释当读取元素时,所述元素的值需要以某种形式保 存,并被提供到居间器组件。然而,当get方法的不存在表示居间器不更新 所述值时,不需要产生所述元素的副本。如果不利用所公开的解决方案,则 只要居间器更新任何值就调用居间器, 一般就需要产生整个消息的副本。
应该理解,本发明不限于其中居间器要求来自消息的一个或多个值并且还更新消息中的一个或多个值的系统。其中仅更新值的系统同样也是可能的。 还应该理解,每次接收到消息时均可以访问元数据,以便在消息内定位合适 的字,殳。可选择地,当消息是频繁4妄收类型之一时,处理节点可以记忆消息 内各字段的位置。
如上所讨论的那样,从居间器(处理组件)的声明接口,可以推断出将
要更新的消息值。作为示例,其有利性在于可以使用该知识来确定是否需 要存储特定消息元素的副本及其值。例如,可能存在居间器链,并且不利用 该知识,则一般将需要本地地存储对于每一居间器的完全信息的表示。现在, 需要本地地存储所要求的特定消息元素(字^殳),并且仅在更新那个元素时。
可以将本发明的优选实施例总结如下
一种处理组件处理消息的方法,包括
使用处理组件的声明接口以识别处理组件要求的那些消息值; 使用与处理组件相关联的元数据以定位消息中所要求的值; 将那些值传递到处理组件; 使处理组件执行其功能;
使用处理组件的声明接口以识别处理组件已经更新的那些消息值; 使用元数据以在消息内定位每一个消息值,所述消息与处理组件已经更 新的4直相对应;
并基于所述处理更新每一个消息值。
权利要求
1、一种处理组件更新消息的方法,包括接收用于由处理组件处理的消息;从该处理组件的声明接口中推断出将由该处理组件更新一个或多个消息值作为其处理结果;使用该处理组件的该接口获得该一个或多个更新值;以及将该更新应用于该消息。
2、 根据权利要求1所述的方法,包括从该处理组件的该声明接口中推断出该处理组件要求的一个或多个消息 值以便进行其处理;使用该处理组件的该接口以从所述消息中获得一个或多个所要求的值。
3、 根据权利要求2所述的方法,其中使用该处理组件的该接口以从所述 消息中获得一个或多个所要求的值的步骤包括使用与所述处理组件相关联的元数据来在所述消息中定位该所要求的值。
4、 根据权利要求3所述的方法,包括 将所定位的所要求的值传递到所述处理组件。
5、 根据上述任意一个权利要求所述的方法,其中将那些更新应用于所述 消息的步骤包括使用与所述处理组件相关联的元数据来在要被更新的所述消息内定位每 一个消息值。
6、 根据权利要求3、 4或5所述的方法,包括 确定消息的类型;以及访问适于所述消息类型的元数据。
7、 根据上述任意一个权利要求所述的方法,包括 使用所述处理组件将更新的该一个或多个消息值的知识来确定需要由所述处理组件本地地存储消息的哪些元素。
8、 一种处理组件更新消息的设备,包括 接收用于由处理组件处理的消息的部件;从该处理组件的该声明接口中推断出将由该处理组件更新一个或多个消息值作为其处理结果的部件;使用该处理组件的该接口以获得该一个或多个更新的值的部件;以及 将该更新应用于该消息的部件。
9、 根据权利要求8所述的设备,包括从该处理组件的该声明接口中推断出该处理组件要求的一个或多个消息 值以便进行其处理的部件;使用该处理组件的该接口以从该消息中获得一个或多个所要求的值的部件。
10、 根据权利要求9所述的设备,其中使用该处理组件的该接口以从该 消息中获得一个或多个所要求的值的部件包括使用与该处理组件相关联的元数据以在该消息中定位所要求的值的部件。
11、 根据权利要求10所述的设备,包括 将所定位的要求的值传递到该处理组件的部件。
12、 根据权利要求8到11中任意一个所述的设备,其中将那些更新应用 于该消息的部件包括使用与该处理组件相关联的元数据来在要被更新的该消息内定位每一个 消息值的部件。
13、 根据权利要求IO、 11或12所述的设备,包括 确定消息的类型的部件;以及访问适于该消息类型的元教:据的部件。
14、 根据权利要求8到13中任意一个所述的设备,包括使用该处理组件将更新的 一个或多个消息的知识,以确定需要由该处理 组件本地地存储消息的哪些元素的部件。
15、 一种计算机程序,包括程序代码部件,适于当该程序在计算机上运 行时执行权利要求1到7中任意一个所述的方法。
全文摘要
公开了处理组件更新消息的方法、设备和计算机程序。接收由处理组件处理的消息。从处理组件的声明接口中推断出将由处理组件更新一个或多个消息值作为其处理结果。然后使用处理组件的接口以获得一个或多个更新的值,然后将更新应用于消息。
文档编号H04L12/56GK101442503SQ20081016568
公开日2009年5月27日 申请日期2008年9月24日 优先权日2007年11月21日
发明者格雷戈里·L·特鲁蒂, 西蒙·A·霍尔兹沃思 申请人:国际商业机器公司