Xml语言描述的业务逻辑映射到应用语言的方法

文档序号:6564208阅读:496来源:国知局
专利名称:Xml语言描述的业务逻辑映射到应用语言的方法
技术领域
本发明涉及解析文本格式描述语言生成能被计算机执行的机器语言代码的技术,尤其涉及用XML语言描述的业务逻辑映射到应用语言的方法。
背景技术
在使用计算机处理各种业务逻辑时,往往需要进行建模分析,然后根据模型生成业务模型描述。由于XML语言的纯文本、强大的标签描述特性,使它在涉及网络应用领域越来越得到广泛的应用。使用XML语言描述的业务逻辑可以更容易地在应用服务器上部署。
目前使用XML语言处理复杂逻辑按照处理的方式,有两种类型一是传统的硬编码方式。也就是说,只使用XML语言描述业务逻辑的数据,由真正的业务处理代码解析这些数据,完成业务逻辑。这种方式只是把数据存放成XML语言格式,如果业务逻辑有什么变化,通常只能修改业务处理代码,一般情形下需要重新编译大量的代码,编译后的代码需要重新部署,灵活性差。而且随着业务逻辑的复杂化,则业务处理代码也越来越复杂、越来越庞大,代码的可维护性变差。
二是XML到应用语言的映射。由于XML是SGML的简化,因此它也属于元语言,可以由使用者自行定义,进而产生出完全符合使用者需求的应用语言。而且应用语言更能够处理各种更为复杂的逻辑。通过XML描述的复杂处理逻辑,可以通过XML解析器生成对应的应用语言。而且这种解析、编译、处理的过程可以做成一体,如同是对XML语言解释执行,也可以分开,只部署解析后的应用语言或编译后的目标语言,提高处理的速度,带来很大的灵活性。
但是当前流行的这种处理方式的工具只是在考虑XML到面向对象语言的映射时,将XML中的各个标签都当作一个对象来进行处理,虽然灵活性高,但是加剧了空间和时间上的复杂度,对于业务逻辑比较复杂的系统,其解析和处理的时间都急剧上升。
所以,必须寻找一种方法,能够在灵活性上进行折衷,优化解析和处理的时间,才会在进行复杂逻辑的处理应用中有实用价值。

发明内容
本发明所要解决的技术问题是提供一种XML语言描述的业务逻辑映射到应用语言的方法,使代码的处理速度快、占用的空间少,降低解析的空间和时间上的复杂度。
为解决上述技术问题,本发明所采用的技术方案使用XML语言描述的业务逻辑映射到应用语言的方法,包括步骤(1)根据业务逻辑的XML语言描述中的所有标签,以及这些标签的公共部分,编写框架代码;(2)根据业务逻辑的XML语言描述中的各个标签,编写对应的标签代码生成实现类;(3)包括所述框架代码的代码解析器,加载所述标签代码生成实现类,生成业务处理类代码。
其中,所述步骤(2)中编写的标签代码生成实现类继承自公共的父类。
所述步骤(3)具体为(31)包括所述框架代码的代码解析器,加载各个标签对应的代码生成实现类;(32)所述代码解析器根据各个标签对应的代码生成实现类,生成各个标签所描述的代码;(32)将生成的各标签所描述的代码组合起来,生成业务处理类代码。
与现有技术相比,使用本发明所述的技术方案,改进了对XML语言的表示的业务逻辑的解析方式,解析和处理的时间短,每个XML文件只生成一个代码文件,即一个面向对象的类,在实例化时,一个XML文件对应一个对象,使代码的处理速度快、占用的空间少;由于编译器中提供了框架代码,可以对生成的代码中公共逻辑进行优化,而且不同的标签只会对应出不同的方法或代码段,提高了从XML文件解析成代码文件的速度;对于新定义的标签,一般只需要编写此类标签的代码生成实现类就可以了,不必更改代码的主框架,维护比较简单。使利用XML语言处理复杂逻辑更有实际可操作性。


图1构建业务逻辑流程图。
图2生成业务处理类代码流程图。
图3动态部署业务逻辑流程图。
图4关联关系总体结构图。
具体实施例方式
下面结合附图,对本发明作进一步的详细说明。
本发明提供了一种XML映射到应用语言时不是简单的将标签转换成类,而是标签转换成类方法和代码的方法,从而改进了对XML语言的表示的业务逻辑的解析方式,减少了生成代码的数量,使利用XML语言处理复杂逻辑更有实际可操作性。同时提供了部署和维护业务逻辑的方法。
使用XML语言描述的业务逻辑映射到应用语言的方法,包括如下步骤第一步、根据业务逻辑的XML语言描述中的所有标签,以及这些标签的公共部分,编写框架代码。
如图1所示,使用XML语言处理业务逻辑的第一步为业务逻辑建模。通过分析具体应用的逻辑,整理出应用的处理模型,分析XML语言中可能出现的标签(Tag),以及需要对外提供的接口。然后根据这个模型编写出对象的XML语言描述,再将所有出现的标签整理出来,结合他们的公共部分编写出需要的框架代码。
第二步、根据业务逻辑的XML语言描述中的各个标签,编写对应的标签代码生成实现类。
根据各个标签编写对应的代码生成实现类。这些实现类要求继承自公共的父类,从而可以通过父类的定义获取生成代码需要的上下文。
第三步、包括所述框架代码的代码解析器,加载所述标签代码生成实现类,生成业务处理类代码。
由代码解析器加载标签代码实现类生成代码。在代码解析器中已经包括了在第一步生成的必须的框架代码,在解析不同的标签时,会自动使用各个标签对应的代码生成实现类,生成此标签描述的代码。然后将这些代码组合起来,生成业务处理类代码,见图2。
为了使通过本方案生成的面向对象的代码能够在业务处理过程中起作用,需要有一个部署过程,也就是重复利用上述第三步,将解析XML文件生成的源代码编译成目标代码部署到业务处理程序中。对于不同的面向对象语言这步会有区别。如果是C++,则一般会直接将第三步生成的源代码和业务逻辑实现的其他源代码一起编译,生成DLL供应用服务器调用;如果是JAVA,则除了采取和C++类似的静态部署外,还可以支持动态部署,即在第三步生成的源代码后,直接使用JAVA编译器编译成CLASS文件,由业务逻辑实现直接使用,见图3。
如果业务逻辑发生了变化,就需要对标签的扩展。所有的标签可以分为两类方法级标签和代码级标签。方法级标签在产生代码时,会生成接口方法的调用,并且负责内部资源的组织,所以有相当多的代码集成在框架代码内,对这类标签的增删需要相应的修改框架代码,而且这类标签之间一般不允许嵌套;对于代码级标签,在生成代码时,主要是内部方法调用或代码片段,这些标签里面的内容甚至可以是目标代码,对此类标签的增删不需要修改框架代码。代码级标签之间允许嵌套,方法级标签允许包含代码级标签。
下面以电信网络管理领域的CMIS操作的关联策略为例,对技术方案的实施作进一步的详细描述。
1、业务逻辑框架电信管理网络TMN(Telecommunications Management Network)是ITU-T提出来的关于电信设备管理的解决方案,规范性地描述了一个电信管理网的层次结构、功能结构、逻辑结构。TMN的管理端(Manager)通过CMIS操作代理端(Agent)。TMN的Agent是一些实际网络资源抽象成的被管对象(Managed Object,MO)。被管对象是通过GDMO进行描述的。在这些被管对象之间通常存在比较复杂的逻辑关系,当操作某个MO时,需要判断是否满足先决条件,根据操作类型的不同触发别的MO的某些操作,甚至在操作完成后判断数据一致性条件是否满足,通常把这些关系统称为关联策略。
利用本发明构建的关联关系处理框架结构,见图4。关联处理的核心是解析XML配置文件,调用方输入操作命令,通过解析对应的MOC的XML,进行相关的验证和连带处理。其中关联模型——接收输入的CMIS操作命令,调用该命令对应MOC的解析器进行操作命令的验证和连带处理。因为连带生成的CMIS操作命令会继续产生连带,所以再次通过关联模型进行循环调用,直到处理完所有的连带结果。
解析器——关联模块在初始化时,平台扫描MOC的配置文件,将XML转化成JAVA对象,该JAVA对象就是执行XML配置文件中定义的逻辑处理功能。
验证控制器——实际上也是控制器,它包括对“字段验证、表间验证、自定义验证”的三种类型的验证。解析器在进行处理时,是依照顺序将这些验证对象加入到验证控制器中,再由验证控制器集中对这些验证对象进行集中处理。这样的好处是可以在处理时进行优化,提高处效率。
连带处理器——根据发起的源记录,结合在XML设置的逻辑脚本功能,生成目标操作记录。由于一个MOC的操作可能引起多种MOC的连带操作,所以在一个操作命令的处理过程中,可能会调用多次连带处理器进行连带。
计算器——计算表达式的值。
MIF——执行CMIS操作的功能模块。
由此可见,由关联模型对外提供了业务逻辑的调用接口,解析器负责XML文件到JAVA文件的解析,其他的模块则是业务逻辑的框架代码。
2、由GDMO模型生成关联关系XML文件在GDMO模型中描述了某类MOC的行为NB1CONFIGSETPreCreate BEHAVIOURDEFINED AS“1、如果增加的主用套号,则必须保证唯一,即一个网元下只允许有一套主用数据;”BSCEquipmentPostCreate BEHAVIOURDEFINED AS“1、数据库(插入数据库表CONFIGSET)这是一个先验条件,在此处的含义是在创建一个MO时要保证主用数据的唯一性。
其对应的XML文件为<mocSourceOperate operate=″create″>
<mocValid>
<!--isMain=master,then it must be unique*******-->
<mocIf test=″new Boolean($S{ISMAIN}.intValue()==0)″>
<mocTable name=″isMainValid″ targetVar=″isMainCount″scope=″1″targetMoc=″NB1CONFIGSET″where=″%ISMAIN=0″/>
<mocComparename=″isMainValidTest″ test=″newBoolean( $V{isMainCount}.intValue()<=0 )″errorCode=″ERR_NB1DEV_NB1CONFIGSET_INVALIDISMAIN+0″/>
</mocIf>
</moc Valid>
<!--******write the DB*******-->
<mocMif/>
</mocSourceOperate>
<mocSourceOperate operate=″delete″>
<mocMif/>
</mocSourceOperate>
<mocSourceOperate operate=″set″>
<mocMif/>
</mocSourceOperate>
其中包括两部份信息(1)验证GDMO中定义的先验条件(见mocValid)。它的处理逻辑是,如果要创建的MO是主用数据,则要查询数据库,看是否已经存在主用数据,如果已经存在,就抛出异常,否则继续进行。
(2)将MO数据写入数据库(见mocMif)。
在这个XML文件中包括的标签有mocSourceOperate——表示源MOC要处理的操作,表示一类处理的总框架,是所有其它标签的根标签。它是唯一的方法级标签。它必须有operate属性其值是CMIS操作的类型,有三种值(create,delete,set),分别对应到三个接口方法。在后面所述的MocSourceOperate和MocValid标签的解析结果中给出了生成代码中的create方法。
mocValid——表示一个验证标志。在这里是描述“创建一个MO时要保证主用数据的唯一性”约束。
mocMif——对源操作进行入库。这个标签会触发调用MIF模块发起mocSourceOperate标签中定义的CMIS操作。
mocIf——执行条件判断。其test属性是条件判断表达式,其结果必须为boolean类型。可以看出它使用了嵌入的JAVA代码,“$S{ISMAIN}”代表创建操作输入参数中的ISMAIN属性。
mocTable——进行一个CMIS查询,将查询结果存放到目标结果集中。
mocCompare——根据表达式进行验证比较。当表达式的结果为真时,该验证通过。
3、根据XML文件编写标签代码实现类对每个标签都有对应的标签代码实现类,例如对mocSourceOperate标签实现类MocSourceOperateTagpublic class MocSourceOperateTag extends ErrorTag{public void setOperate(String operate){this.operate=operate;}public void doTag(XMLOutput output){…(略)}}以及对mocValid标签的实现类MocValidTagpublic class MocValidTag extends ErrorTag{public void doTag(XMLOutput output){super.doTag(output);//准备上下文(代码略)//要嵌入的代码块element.addPreviosText(0,″//对应验证控制标签″);element.addPreviosText(0,″vc=(ValidControl)valids.get(\″″+script.getName()+″\″);″);element.addPreviosText(0,″//因为其基类为ExcuteGetMois″);element.addPreviosText(0,″execute=vc;″);element.addPreviosText(0,″//进行数据源进行复位,指向第一条记录(源操作)。″);element.addPreviosText(0,″sf.reset();\n″);element.addPreviosText(0,″//将操作对象赋给计算器,这时,计算器就可以处理表达式中各种类型的变量的处理了。″);element.addPreviosText(0,″calculator.setSource(sf.getSource());″);element.addPreviosText(0,″calculator.setAncestor(sf.getAncestor());″);element.addPreviosText(0,″calculator.setVarible(varibles);″);element.addPreviosText(0,″//循环处理每一条源记录″);element.addPreviosText(0,″while(sf.next()){\n″);element.addLastText(0,″}″);element.addLastText(0,″vc.validExtends();\n″);//准备上下文(代码略)
}}所有的实现类都继承ErrorTag类,在这个父类中不仅保存了框架代码的上下文,而且自动在生成的代码中插入出错时的提示。
在MocSourceOperateTag类中setOperate方法是自动设置operate属性。doTag方法是定义要插入的代码。由于mocSourceOperate标签下面允许包含所有的除mocSourceOperate外的标签,其中的语句都是通过内部的嵌套标签生成的。它只负责把需要的create方法框架建立起来,包括验证控制器、连带处理器、计算器的准备动作。
在MocValidTag类中只有doTag方法,其中定义要进行验证需要插入的代码。通过调用代码单元的addPreviosText方法可以插入前部分语句块,而addLastText方法可以插入后部分语句块,这样可以就构成了一个before/after语句框架,可以在前后语句块中插入其内部标签定义的代码,实现标签的嵌套。
在图9中的代码就是MocSourceOperate和MocValid标签的解析结果。
4、代码解析器根据标签代码实现类解析成对应的JAVA代码并部署到业务逻辑服务器中MocSourceOperate和MocValid标签的解析结果为protected void create(MocDataSource date,RelationModel model)throwsRelationException{…(略,上下文的准备)//标签处理出错时的提示tagErrorInfo=″file/D/shouyuxing_view/ZXWOMC_VOB/CODE/deploy/output/zxwomc/ums-svr/zxwomc/RNS/NODEB/zxwomc-osf-cm-nodeb.par/conf/n1conf/n1dev/mocrelation/3.00.030e/NB1CONFIGSET.relation5-1<zmocValid>″;
//对应验证控制标签vc=(ValidControl)valids.get(″vc_0″);//因为其基类为ExcuteGetMoisexecute=vc;//进行数据源进行复位,指向第一条记录(源操作)。
sf.reset();//将操作对象赋给计算器,这时,计算器就可以处理表达式中各种类型的变量的处理了。
calculator.setSource(sf.getSource());calculator.setAncestor(sf.getAncestor());calculator.setVarible(varibles);//循环处理每一条源记录while(sf.next()){…(略,其他的嵌套标签代码)}vc.validExtends();…(略,其他的处理及上下文的释放)}在实际应用中使用了服务器启动时的动态部署。在服务器中只需要部署XML文件,当服务器启动时,就通过解析器解析这些XML文件,生成对应的JAVA文件,再使用JDK的JAVA编译器编译这些JAVA文件,将生成的目标代码——CLASS文件,通过类加载器自动装载到整个业务逻辑处理程序中。
权利要求
1.一种使用XML语言描述的业务逻辑映射到应用语言的方法,其特征在于,包括步骤(1)根据业务逻辑的XML语言描述中的所有标签,以及这些标签的公共部分,编写框架代码;(2)根据业务逻辑的XML语言描述中的各个标签,编写对应的标签代码生成实现类;(3)包括所述框架代码的代码解析器,加载所述标签代码生成实现类,生成业务处理类代码。
2.根据权利要求1所述的使用XML语言描述的业务逻辑映射到应用语言的方法,其特征在于,所述步骤(2)中编写的标签代码生成实现类继承自公共的父类。
3.根据权利要求1或2所述的使用XML语言描述的业务逻辑映射到应用语言的方法,其特征在于,所述步骤(3)具体为(31)包括所述框架代码的代码解析器,加载各个标签对应的代码生成实现类;(32)所述代码解析器根据各个标签对应的代码生成实现类,生成各个标签所描述的代码;(32)将生成的各标签所描述的代码组合起来,生成业务处理类代码。
全文摘要
本发明公开了一种XML语言描述的业务逻辑映射到应用语言的方法,涉及解析文本格式描述语言生成能被计算机执行的机器语言代码的技术,为解决XML语言描述的复杂业务逻辑映射到应用语言时,使得代码的处理速度快、占用的空间少的问题而发明。本发明XML语言描述的业务逻辑映射到应用语言的方法包括步骤根据业务逻辑的XML语言描述中的所有标签,以及这些标签的公共部分,编写框架代码;根据业务逻辑的XML语言描述中的各个标签,编写对应的标签代码生成实现类;包括所述框架代码的代码解析器,加载所述标签代码生成实现类,生成业务处理类代码。本发明适用于业务逻辑的XML语言描述的解析处理。
文档编号G06F9/44GK1975669SQ20061016526
公开日2007年6月6日 申请日期2006年12月15日 优先权日2006年12月15日
发明者寿玉星, 张强, 袁瑞宏, 姜磊 申请人:中兴通讯股份有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1