Tuxedo数据协议转换方法

文档序号:7951182阅读:1101来源:国知局
专利名称:Tuxedo数据协议转换方法
技术领域
本发明涉及一种数据转换方法,尤其涉及一种TUXEDO (Transaction forUNIX has been Extended for Distributed Operation,被分布式操作扩展之后的UNIX事务系统) 数据协议转换方法。
背景技术
随着访问终端类型的越来越多样化,访问频率越来越频繁,对后台架构灵活性和高性能都带来新挑战。为提高跨平台操作和高性能,后台选用中间件服务器成了一种趋势,中间件TUXEDO被越来越多的采用。TUXEDO后台采用独有的FML (Field Manipulation Language)处理请求端和服务器端的数据传递,而前端一般采用JSON(JavaScript Object Notation)或XML (ExtensibleMarkup Language可扩展标志语言)存储页面数据,如何快速将页面数据转换成FML格式成为这种架构下应用开发要解决的问题。现有技术并不能将上述三种数据协议进行直接转换。现有主要是采用针对某一种数据协议进行解析的相关技术,如针对XML协议解析的Xerces-C协议解析包、针对于 JSON 的 JSON-c 解析包、以及 TUXEDO 自身提供的 FML32 (FieldManipulation Language 32 Bit Version)数据操作的应用程序编程接口 ;XML即可扩展标记语言,它与HTML—样,都是 SGML (Standard Generalized MarkupLanguage,标准通用标记语言)。XML是因特网环境中跨平台的,依赖于内容的技术,是当前处理结构化文档信息的有力工具。扩展标记语言XML 是一种简单的数据存储语言,使用一系列简单的标记描述数据,而这些标记可以用方便的方式建立,虽然XML占用的空间比二进制数据要占用更多的空间,但XML极其简单易于掌握和使用。JSON是一种轻量级的数据交换格式,它基于Javakript (Standard ECMA-262 3rd Edition-December 1999)的一个子集。JSON采用完全独立于语言的文本格式,但是也使用了类似于C语言家族的习惯(包括C,C++, C#, Java, JavaScript, Perl, Python等)。这些特性使JSON成为理想的数据交换语言。易于人阅读和编写,同时也易于机器解析和生成。 FML32 (Field Manipulation Language 32 Bit Version)是目前使用最为广泛的 tuxedo 中间件内部数据格式,其优点在于结点插入查询速度快,操作简单,内存使用率高,数据表现紧凑,是目前各种行业应用系统运用最多的一种数据结构。按照现有的技术,要实现上述三种协议之间的相互转换,需要首先将某种协议按照第三提供的软件包进行协议解析;然后才能转换到另外一种数据协议格式。如从XML到 FML32的数据协议的转换,需要先用Xerces-C对XML报文进行协议解析形成DOM(Document Object Model文档对象模型)树;然后对DOM树进行遍历才能转换成FML32数据协议格式。 这样最少需要进行2次报文循环。第一次对XML报文进行解析,第二次才是进行真正的数据协议个数转换,效率上也就打了很大的折扣;同时,对于开发人员也提出了更高的要求, 即需要了解ferces-C软件包的使用方式以及DOM树的操作方式,同时也需要了解FML32数据协议格式的操作方式,不利于快速开发应用。

发明内容
本发明的目的在于,提供一种TUXEDO数据协议转换方法,提高xml/json到fml32、 fml32到xml/json之间数据格式转换的效率,实现协议转换时的内存块直接操作,从而有效的较少了协议解析时频繁的内存申请与释放的操作。为了实现上述目的,本发明提供一种TUXEDO数据协议转换方法,其包括如下步骤步骤1、初始化数据协议转换运行所需的上下文,其包括由用于配置数据存放路径的元数据来定义的协议报文模板加载到内存中形成哈希表、根据外部配置获取协议报文的字符集定义、及初始化数据协议转换所需的栈结构;步骤2、接收外部传入的报文字符流;步骤3、判断传入的报文字符流是否需要进行字符集转换,如需要则进行转换,获取报文的长度,并在一 FML32缓冲区中分配相应的内存块;步骤4、对报文进行解析并将报文节点压入FML32缓冲区;步骤5、查询元数据,获取当前报文所依赖协议报文模板,通过循环报文模板以对 FML32缓冲区的数据流进行解析并生成报文,返回协议转换后的报文。所述步骤3中,所分配内存块的大小为字符流长度的1. 5倍。所述步骤4包括步骤4. 1、将栈结构的首指针回归到初始位置;步骤4. 2、将转换状态回归到初始化状态;步骤4. 3、开始循环传入的报文字符流,对每个节点逐个进行处理,并按照节点对应的数据类型以及按照其在报文中相对位置将节点压入FML32缓冲区中;步骤4. 4、当栈指针回归到栈顶位置并且转换状态为成功的时候,完成协议转换。所述步骤4中,对于元素类报文结点进行栈压入操作,对于文本类的报文结点直接进行数据格式转换后进行出栈操作,直到整个报文循环完毕。所述步骤5包括步骤5. 1、判断预开辟的内存块的大小是否满足本次转换的需求,本次转换的内存大小需求根据传入的字符流长度乘以1. 5所得;步骤5. 2、查询元数据, 获得当前报文所依赖的报文模板;步骤5. 3、将栈结构的首指针回归到栈顶位置;步骤5. 4、 将转换状态回归到初始化状态;步骤5. 5、循环步骤5. 2中获得的报文模板,按照报文模板中节点据类型以及节点在报文模板中的位置在FML32缓冲区中获取当前结点对应的实际数据与结点名称,并将其写入到输出缓冲区中;步骤5. 6、判断栈指针是否到栈顶并且转换状态是否为初始化状态,如果是,则转换成功;步骤5. 7、返回转换后得到的报文。所述步骤5. 2中,当模板项标志为数组项时,按数组方式写输出缓冲区。所述步骤1中,所述上下文还包括判断是否支持多线程操作、及预开辟的转换时所需内存块的大小。所述报文为JSON或XML报文。本发明的有益效果1).实现了 XML到FML32、JSON到FML32之间的直接协议转换, 大大的提高了协议转换的效率,按照当前的测试结果,比采用传统的单独解析技术,效率提高了 3倍;2).实现了数据协议的直接转换功能后,开发人员对页面表单、传输数据、后台处理逻辑等可以直接通过这些API实现转换,减轻了开发人员的负担,让应用开发人员能够更好更快的实现自己的应用;
3).由于采用的是直接转换,协议转换的输入输出都是连续内存块,提高了转换效率并有利于网络数据的传输;4).采用元数据技术,解决了 XML、FML与JSON数组的兼容性问题。为了能更进一步了解本发明的特征以及技术内容,请参阅以下有关本发明的详细说明与附图,然而附图仅提供参考与说明用,并非用来对本发明加以限制。


下面结合附图,通过对本发明的具体实施方式
详细描述,将使本发明的技术方案及其它有益效果显而易见。附图中,图1为本发明TUXEDO数据协议转换方法的流程示意图;图2为本发明TUXEDO数据协议转换方法的转换流程原理图。
具体实施例方式为更进一步阐述本发明所采取的技术手段及其效果,以下结合本发明的优选实施例及其附图进行详细描述。如图1-2所示,本发明提供一种TUXEDO数据协议转换方法,其包括如下步骤步骤1、初始化数据协议转换运行所需的上下文,其包括由用于配置数据存放路径的元数据来定义的报文模板加载到内存中形成哈希表、根据外部配置获取协议报文的字符集定义、及初始化协议转换所需的栈结构;步骤1中首先将报文模板加载到内存中形成哈希表,实现协议模块的的快速定位查询。同时根据外部配置获取协议传输报文的字符集定义,以实现在协议转换前进行内外部字符集的转换。具体的,该上下文包括1)、元数据配置数据存放的路径,协议模板预加载到内存并形成一张哈希表以供查询使用;幻、字符集要求,包括传入报文的字符集定义以及本地报文的字符集定义信息;3)、是否支持多线程操作;4)、预开辟的转换时所需内存块的大小,如果在转换过程中该预开辟的内存块不能满足要求,将适时扩充该内存块。在该模块的整个声明周期(该模块的声明周期为进程启动到停止),该内存块不会被释放。如果需要支持多线程运行,该内存块会与线程进行绑定;5)、 初始化协议转换所需的栈结构。步骤2、接收外部传入的报文字符流。步骤3、判断传入的报文字符流是否需要进行字符集转换,如需要则进行转换,获取报文的长度,并在一 FML32缓冲区中分配相应的内存块;所述步骤3中,所分配内存的大小为字符流长度的1.5倍。步骤4、对报文进行解析并将报文节点压入FML32缓冲区;所述步骤4包括步骤4. 1、将栈结构的首指针回归到初始位置;步骤4. 2、将转换状态回归到初始化状态;步骤 4. 3、开始循环传入的报文字符流,对每个节点逐个进行处理,并按照节点对应的数据类型以及按照其在报文中相对位置将节点压入FML32缓冲区中;步骤4. 4、当栈指针回归到栈顶位置并且转换状态为成功的时候,完成协议转换。所述步骤4中,对于元素类报文结点进行栈压入操作,对于文本类的报文结点,直接进行数据格式转换后进行出栈操作,直到整个报文循环完毕。对于元素类报文结点进行栈压入操作,对于文本类的报文结点(即实际存储数据的结点)直接进行数据格式转换后进行出栈操作,直到整个报文循环完毕。步骤5、查询元数据,获取当前报文所依赖报文模板,通过循环报文模板以对 FML32缓冲区的数据流进行解析并生成报文,返回协议转换后的报文。所述步骤5包括 步骤5. 1、判断预开辟的内存块的大小是否满足本次转换的需求,本次转换的内存大小需求根据传入的字符流长度乘以1. 5所得;步骤5. 2、查询元数据,获得当前报文所依赖的报文模板;步骤5. 3、将栈结构的首指针回归到栈顶位置;步骤5. 4、将转换状态回归到初始化状态;步骤5. 5、循环步骤5. 2中获得的报文模板,按照报文模板中节点据类型以及节点在报文模板中的位置在FML32缓冲区中获取当前结点对应的实际数据与结点名称,并将其写入到输出缓冲区中;步骤5. 6、判断栈指针是否到栈顶并且转换状态是否为初始化状态,如果是,则转换成功;步骤5. 7、返回转换后得到的报文。步骤5为步骤4的逆向操作,其处理思路相同。本发明将报文组成和层次装载进入内存(如图2所示),每个节点都可能是单值类型或数组类型,数组类型指该节点可能存在多份数据。例如报文中包括姓名、性另I」、子女,其中姓名和性别是单值类型,子女是数组,子女的属性可能包括姓名、性别、年龄,都是单值, 当然也可能包括数组的属性如爱好。在转换流程中,根据模板项对对应的报文项进行转换后填充进入目标缓冲区。下面以JSON到FML32的转换为例进行说明提供数据协议转换接口进行数据协议转换。1.接口定义JSON到FML32的协议转换void;l<Json_Trans_To_Fml32 (char* json, mpw_int_t len);说明本接口要求传入一个json协议格式的字符流。并给出该字符流的长度,以字节为单位,本接口返回的是一块内存的首地址。该内存是按照ml32的协议格式进行组
幺口fml32到json的协议转换char* Fml32_Trans_To_Json(void*fml, mpw_int_t *len);说明本接口要求传入一块内存的首地址,该内存是按照FML32的协议格式进行组织,本接口返回的是一个JSON协议格式的字符流。该字符流的长度通过接口的第二个参数Ien带回。2.处理流程JSON到FML32的协议转换步骤1、首先判断是否需要进行字符集转换,如果需要,则先进行字符集转换;步骤2、判断预开辟的内存块的大小是否满足本次转换的需求,本次转换的内存大小需求根据传入的字符流长度乘以1. 5所得;步骤3、将栈结构的首指针回归到初始位置,即栈顶位置;步骤4、将转换状态回归到eatws初始化状态;步骤5、开始循环传入的JSON串,对每个节点逐个进行处理,并按照对应的数据类型以及按照其在JSON中相对位置将节点压入FML32缓冲区中;步骤6、当栈指针回归到栈顶位置并且转换状态为成功(Success)的时候,数据协议转换成功。
FML32到JSON的协议转换步骤1、判断预开辟的内存块的大小是否满足本次转换的需求。本次转换的内存大小需求根据传入的字符流长度乘以1. 5所得;步骤2、查询元数据,获得当前报文所依赖的报文模板,当模板项标志为数组项时, 要按数组方式写输出缓冲区;步骤3、将栈结构的首指针回归到初始位置,即栈顶位置;步骤4、将转换状态回归到eatws初始化状态;步骤5、循环步骤2中获得的报文模板,按照报文模板中节点据类型以及节点在报文模板中的位置在FML32缓冲区中获取当前结点对应的实际数据与结点名称,并将其写入到输出缓冲区中;步骤6、判断栈指针是否到栈顶并且转换状态是否为eatws初始化状态,如果是, 则表明转换成功;步骤7、返回转换后得到的JSON报文。XML到FML32、FML32到XML的转换过程同理,例如XML到FML32、FML32到XML接口定义void* Xml_Trans_To_Fml32(char *xml, mpw_int_t len);char* Fml32_Trans_To_Xml(void*fml, mpw_int_t *len);当然,对于XML协议解析还可采用解析工具包例如rapidxml以获得更高的效率, 另外,对于XML报文还可提供XSD格式规则校验,校验不成功则不进行后续处理,以增加应用的健壮性。以上所述,对于本领域的普通技术人员来说,可以根据本发明的技术方案和技术构思作出其他各种相应的改变和变形,而所有这些改变和变形都应属于本发明权利要求的保护范围。
权利要求
1.一种TUXEDO数据协议转换方法,其特征在于,包括如下步骤步骤1、初始化数据协议转换运行所需的上下文,其包括由用于配置数据存放路径的元数据来定义的协议报文模板加载到内存中形成哈希表、根据外部配置获取协议报文的字符集定义、及初始化数据协议转换所需的栈结构; 步骤2、接收外部传入的报文字符流;步骤3、判断传入的报文字符流是否需要进行字符集转换,如需要则进行转换,获取报文的长度,并在一 FML32缓冲区中分配相应的内存块;步骤4、对报文进行解析并将报文节点压入FML32缓冲区;步骤5、查询元数据,获取当前报文所依赖协议报文模板,通过循环报文模板以对 FML32缓冲区的数据流进行解析并生成报文,返回协议转换后的报文。
2.如权利要求1所述的TUXEDO数据协议转换方法,其特征在于,所述步骤3中,所分配内存块的大小为字符流长度的1. 5倍。
3.如权利要求1所述的TUXEDO数据协议转换方法,其特征在于,所述步骤4包括步骤4. 1、将栈结构的首指针回归到初始位置;步骤4. 2、将转换状态回归到初始化状态;步骤 4.3、开始循环传入的报文字符流,对每个节点逐个进行处理,并按照节点对应的数据类型以及按照其在报文中相对位置将节点压入FML32缓冲区中;步骤4. 4、当栈指针回归到栈顶位置并且转换状态为成功的时候,完成协议转换。
4.如权利要求3所述的TUXEDO数据协议转换方法,其特征在于,所述步骤4中,对于元素类报文结点进行栈压入操作,对于文本类的报文结点直接进行数据格式转换后进行出栈操作,直到整个报文循环完毕。
5.如权利要求1所述的TUXEDO数据协议转换方法,其特征在于,所述步骤5包括步骤5.1、判断预开辟的内存块的大小是否满足本次转换的需求,本次转换的内存大小需求根据传入的字符流长度乘以1. 5所得;步骤5. 2、查询元数据,获得当前报文所依赖的报文模板; 步骤5. 3、将栈结构的首指针回归到栈顶位置;步骤5. 4、将转换状态回归到初始化状态;步骤5. 5、循环步骤5. 2中获得的报文模板,按照报文模板中节点据类型以及节点在报文模板中的位置在FML32缓冲区中获取当前结点对应的实际数据与结点名称,并将其写入到输出缓冲区中;步骤5. 6、判断栈指针是否到栈顶并且转换状态是否为初始化状态,如果是,则转换成功;步骤5. 7、返回转换后得到的报文。
6.如权利要求5所述的TUXEDO数据协议转换方法,其特征在于,所述步骤5.2中,当模板项标志为数组项时,按数组方式写输出缓冲区。
7.如权利要求1所述的TUXEDO数据协议转换方法,其特征在于,所述步骤1中,所述上下文还包括判断是否支持多线程操作、及预开辟的转换时所需内存块的大小。
8.如权利要求1所述的TUXEDO数据协议转换方法,其特征在于,所述报文为JSON或 XML报文。
全文摘要
本发明提供一种TUXEDO数据协议转换方法,其包括如下步骤步骤1、初始化数据协议转换运行所需的上下文;步骤2、接收外部传入的报文字符流;步骤3、判断传入的报文字符流是否需要进行字符集转换,如需要则进行转换,获取报文的长度,并在一FML32缓冲区中分配相应的内存块;步骤4、对报文进行解析并将报文节点压入FML32缓冲区;步骤5、查询元数据,获取当前报文所依赖协议报文模板,通过循环报文模板以对FML32缓冲区的数据流进行解析并生成报文,返回协议转换后的报文。
文档编号H04L29/06GK102394874SQ20111032989
公开日2012年3月28日 申请日期2011年10月26日 优先权日2011年10月26日
发明者丰伟, 张利民 申请人:深圳天源迪科信息技术股份有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1