专利名称:远程调用对象的方法和系统的制作方法
技术领域:
本发明涉及远程调用技术领域,更具体地说,涉及一种在分布式系统中远程调用对象的方法和系统。
背景技术:
从分布式系统架构成为软件架构的主流以来,系统间的远程调用平台就大量得涌现出来,比较成熟的分布式调用技术有:C0RBA、RM1、EJB、WebService或Xml-RPC等。远程调用的过程一般为:接收客户端的调用命令,根据该调用命令中的业务对象名称定位所述业务对象,并由该业务对象得到业务对象方法标签,通过该业务对象方法标签对该业务对象方法进行调用。一个企业级的系统是例如银行系统包括多个客户端(刷卡机11、内部转账12和网络计算机13)、以及与各个客户端相对应的业务接口(刷卡接口 21、内部转账接口 22和网上交易接口 23),以及,银行系统和设置在银行系统中的多个调用系统(调用系统31、调用系统32和调用系统33),各调用系统与各业务接口——对应。上述系统存在以下问题:在该系统中,每种调用系统对应一种客户端,也就是说,当存在多种客户端的时候,需要有多种调用系统与其相适配,每出现一种客户端,就需要增加与该客户端相对应的调用系统,无法实现业务逻辑和接口的剥离,无法复用业务逻辑,即使针对相同的业务逻辑,仍然需要针对不同的接口进行开发。例如:都是提款,通过刷卡机和网络计算机由于远程调用协议不一致,就必须开发两套调用系统适应不同的业务接口才可以提款,比较繁琐,增加了设计人员的工作量,增加系统的成本。
发明内容
有鉴于此,本发明的目的在于提供一种分布式系统中的远程调用对象的方法和系统,以解决现有技术存在的通用性不高的问题。本发明一种远程调用对象的方法,包括:创建与各客户端对应的代理对象;利用该代理对象接收相应的客户端发出的调用命令,并将其转换成与客户端协议相适应的命令信息;将所述该命令信息处理成统一数据类型的调用命令;按照所述统一数据类型的调用命令中的业务对象的名称定位所述业务对象,由该业务对象得到业务对象方法标签;利用该标签对业务对象方法进行调用,并由代理对象将调用结果反馈给所述客户端。优选的,代理对象将调用结果转换成所述客户端能够识别的结果信息后,反馈给所述客户端。优选的,按照以下步骤创建代理对象:
读取对应客户端的业务接口文件,分析业务对象名称和业务对象方法标签;解析相应的业务对象方法标签和所述接口参数,生成对应的方法体;根据所述接口参数和所述方法体生成代理对象。优选的,将命令信息处理成统一数据类型的调用命令的实现方式为:根据各代理对象所遵从的协议,按照各代理对象协议的参数映射,将各种数据类型的调用命令转换成统一数据类型的调用命令。本发明还公开了一种远程调用对象的系统,包括多个客户端和用于存储业务对象的业务对象容器,还包括调用装置,该调用装置包括多个代理对象单元和执行单元;各代理对象单元与客户端一一对应,用于接收所述客户端的调用命令,针对该调用命令发送与该客户端技术协议相适配的命令信息,接收反馈过来的调用结果信息,并该调用结果信息转换成对应客户端能够识别的信息后,反馈给客户端;执行单元,用于获取所述命令信息,将该命令信息转换为统一数据类型调用命令,根据所述该统一数据类型调用命令中的业务对象的名称在所述业务对象容器中定位所述业务对象,由该业务对象得到业务对象方法标签,按照所述业务对象方法标签对业务对象方法进行调用,并反馈调用结果至所述代理对象单元。优选的,所述系统还包括:代理对象生成单元,用于获取对应的客户端业务接口文件,并依据该业务接口文件生成与客户端技术协议相适配的代理对象单元。优选的,所述系统还包括:业务对象管理单元, 用于管理所述业务对象容器中的各个业务对象。优选的,所述执行单元由以下单元组成:获取单元,用于获取代理对象单元发送过来的命令信息;归一化单元,将所述命令信息转换成统一数据类型的调用命令;定位单元,根据所述统一数据类型的调用命令中的目标业务对象的名称定位该目标业务对象在业务对象容器中的位置;调用单元,由所述业务对象得知业务对象方法标签,按照该业务对象方法标签找到该业务对象方法,进行调用;所述反馈单元,将调用结果反馈给代理对象单元。优选的,所述代理对象生成单元设置在所述调用装置中。通过上述技术方案可知,与现有技术相比,本发明预先创建与各客户端相对应的代理对象,并通过将各客户端发送的命令信息按照客户端的协议转换后,进行归一化,由此可以支持来自多个客户端的命令信息,实现业务逻辑的复用,从而实现业务逻辑与接口的剥离,屏蔽了业务接口的专业性,无需为每个客户端设计各自的调用系统,便可适配多个客户端,节约了工作人员的工作量,降低成本。
图1为现有技术的结构示意图;图2为本发明分布式系统中远程调用对象的方法的流程图;图3为本发明分布式系统中远程调用对象的方法的代理对象生成流程图4为本发明一种远程调用对象的系统的实施例一结构示意图;图5为本发明一种远程调用对象的系统的执行单元的结构示意图;图6为本发明一种远程调用对象的系统实施例远程调用对象的流程图;图7为本发明一种远程调用对象的系统的实施例二的结构示意图;图8为本发明一种远程调用对象的系统的实施例三的结构示意图;图9为本发明一种远程调用对象的系统的实施例四的结构示意图。
具体实施例方式本发明的基本思想是:预先创建与各客户端相对应的代理对象;利用所述代理对象接收相应的客户端发出的针对目标业务对象的调用命令,并将其转换成与客户端协议相适应的命令信息;将所述命令信息处理成统一数据类型调用命令;按照所述统一数据类型调用命令中的目标业务对象的名称定位所述目标业务对象,得到所述目标业务对象,由该目标业务对象得到业务对象方法标签,利用该标签对业务对象方法进行调用,并反馈调用结果。为了使本领域技术人员更好理解本发明技术方案,下面对本文所述的业务对象进行简单介绍描述:首先对本文中出现的几个名词术语进行解释:业务对象:业务方法的集合体;例如:账号管理对象;业务对象名称: 对业务对象定乂的Iv全局唯一的字符串标签;
业务对象方法:一定业务逻辑的集合;例如:取款;业务对象方法标签:能够唯一定位业务方法的定义;业务逻辑:完成一个完整业务的操作步骤;例如:取款:检查账号-是否有钱-取αΚ ~扣政。例如:“取款”是一个业务对象方法,其封装了多种取款的业务逻辑,所述业务逻辑指的是完成一个完整业务的操作步骤,例如:客户端发送取款100元的请求信息时,该业务对象包含以下业务逻辑,如:—查询该用户账户上的余额;-如果该账户的余额少于100元,则将“余额不足”的信息反馈给客户端;—如果该账户的余额多于100元,则调动送币机构将100元的纸币反馈给客户端,并将该账户的余额减去100元。在系统中,所述业务对象一般存储在对象容器中,所述对象容器就是存储多个业务对象的功能单元,每个业务对象都存在一个静态属性-业务对象名称,在所述对象容器中,一个业务对象唯一对应一个业务对象名称。下面结合附图和实施例对本发明进行详细描述。以传输综合资源网管系统(TransNMS)为例,TransNMS是三层分布式网管系统。由于这是一个复杂的中大型系统,必须支持以下的应用场景:1、支持其他系统访问接口,例如EMOS (电子管理支撑系统)系统接口 ;2、面向不同类型的用户,支持不同类型用户呈现方式,例如WebClient和Applictaion Client。
以上的需求就决定了本系统必须根据不同应用场景支持不同的分布式接口。下面通过告警监控为例来进行说明:1、大客户需要通过WEB监控大客户电路上的告警,为了穿越防火墙,使用基于HTTP 的 Xml-RPC 通信接口 ;2、网管人员使用告警监控监控实时告警,为了能够提高访问效率,使用了 EJB的无状态Bean作为接口 ;3、电子运维人员使用告警生成的故障单,为了达到系统无关的扩展性,采用了WebService 接 P ;上述需求都是由告警业务对象提供的业务对象中的一部分。因此,告警业务对象必须同时支持三种不同的外部接口。TransNMS系统实现业务对象和外部接口的分离也就实现了业务逻辑的重用。请参考图2,为本发明分布式系统中远程调用对象的方法的流程图。各客户端远程调用告警业务对象的方法可按照以下步骤进行:步骤SlOl:预先创建与各客户端技术协议相对应的代理对象。根据业务接口文件生成与大客户客户端、网管客户端和维护客户端相对应的代理对象。大客户客户端、网管客户端和维护客户端分别对应EJB代理对象、XRPC代理对象和WebService代理对象。 所述业务接口文件包含业务对象名称、业务对象方法标签和接口参数。由于只有支持的技术协议相适配的实体才能进行通信,所以预先创建代理对象,该代理对象支持对应客户端的技术协议。步骤S102:利用所述代理对象接收相应的客户端的调用命令,并进行转换。利用所述代理对象接收相应的客户端发出的针对目标业务对象的调用命令,并将其转换为与客户端技术协议相适应的命令信息。各代理对象接收对应的客户端发出的调用命令(如X1、X2和X3),并将其转换为与各自客户端技术协议相适应的命令信息,所述命令信息包含目标业务对象的名称及业务对象方法标签。此时,来自大客户客户端的命令信息为:X1 method (Tl, t)来自网管客户端的命令信息为:X2 method(T2, t)来自维护客户端的命令信息为:X3 method (T3,t)步骤S103:将所述命令信息处理成统一数据类型调用命令。为了实现调用格式的统一,将来自各客户端的调用命令处理成统一数据类型调用命令 X method (T, t)。需要说明的是,各客户端采用的调用协议不同,但是调用的内容是相同的;代理对象将对应的客户端发送的调用命令进行格式转换,转换成对应接口对应的命令信息。例如,对于同一个字符串序列,与Corba接口对应的代理对象将该字符串序列转换成与Corba接口对应的格式:StringListHolder,与WebService接口对应的代理对象将该字符串序列转换成与WebService接口对应的格式:String[],与EJB接口对应的代理对象将该字符串序列转换成与EJB接口对应的格式:List〈String>。下面以银 行取钱为例子:
业务对象:银行;业务对象名称:A银行(名称可以由用户定);业务对象方法:转帐;业务对象方法标签:B转帐(可以由用户定);接口:ATM机接口 -以Xl代替、网上银行接口 -以X2代替、柜台接口 -以X3代替,三个接口的数据类型分别为Tl、T2、T3,三个接口有各自的代理对象(分别为第一代理对象、第二代理对象和第三代理对象)。调用命令:对X X实施转帐-以A代替(注:对于上述三个接口而言调用命令是同样的)。三个客户端通过X1、X2、X3接口发出对X X实施转帐的调用命令,调用命令分别经过所述第一代理对象、第二代理对象和第三代理对象转换后,变成每个代理对象都会根据自身协议将调用命令映射转换X1、X2、X3接口的命令信息:X1 (Tl,t),X2 (T2, t),X3 (T3,t),并将转换后的命令信息进一步转换为统一调用命令A(T,t),从而完成不同代理对象发出调用命令的归一化。所述调用命令中包含有目标业务对象的名称。步骤S104:按照所述调用命令中的目标业务对象的名称,得到目标业务对象方法,并调用。按照所述调用命令中的目标业务对象的名称定位所述目标业务对象,得到目标业务对象方法,并对该 目标业务对象方法进行调用。步骤S105:代理对象将调用结果转换为与客户端技术协议相适应的结果信息后,反馈给客户端。所述代理对象将调用结果转换为各种客户端能够识别的数据类型的结果信息后,反馈给对应的客户端。本发明实施例通过建立与各客户端的技术协议相适配的代理单元,接收各客户端发送过来的各种数据类型的调用命令,对该调用命令进行归一化处理,处理成统一的统一数据类型调用命令(处理成统一的统一数据类型调用命令的关键是参数类型的转化,不同代理接口类型,可以使用不同的参数映射,转化为标准的业务对象调用,从而完成归一化命令),由此实现多个业务对象的复用,使得业务逻辑和接口脱离,节省了开发成本,提高了查找业务对象的效率。图3示出了本发明远程调用对象的方法的代理对象的生成流程图。上述实施例的步骤SlOl中,预先创建与各客户端技术协议相对应的代理对象的具体过程包括以下步骤:步骤SlOll:读取业务接口文件,分析业务对象名称和业务对象方法标签。步骤S1012:生成代理接口的方法。该方法可以根据预先设置的映射关系,将对应的业务接口的接口参数类型转换成统一数据类型。例如:List〈Strig> 类型参数在 EJB 接口映射是 List〈String>,在 WebService 接口映射为String []数组。步骤S1013:解析相应的业务对象方法标签和所述接口参数,生成对应的方法体。
步骤S1014:根据所述接口参数和所述方法体生成代理对象。下面以EJB为例进一步说明代理对象生成的过程:读取接口文件为:public interface IAlarmBO{String getAlarml dByName(String alarmName);}根据该接口文件生成相应的XXXBean类文件,XXXBean实现建立javax.ejb.SessionBean接口和业务接口和EJB标签。
public class AIarmBean implements javax.ejb.SessionBean,IAIarmBOi
public static B0_NAME = “AlarmBO” ;
}从接口文件中解析相应的方法名称和参数,生成同样的方法体。该方法体为:
public class AIarmBean implements javax.ejb.SessionBean,IAIarmBOi
String getAI arm IdByName (Str i ng alarmName) {
}将各种数据格式的调用命令处理成统一的数据类型的调用命令。例如:
public class AIarmBean implements javax.ejb.SessionBean,IAIarmBOi
String getAI arm IdByName (Str i ng alarmName) {
BoCommand command = BoCommandFactory.createCommand (BO NAME,“getAI arm IdByName”,a IarmName);return (String) command, exec ();
}上述代码中表示,ge t AI arml dByName的数据类型为List〈String>。使用XDoclet的ejbdoclet进行编译,产生接口相关的文件XXXHome.java(EJB对象的Home对象),XXXEjbObject.j ava(EJB的远程接口文件);并进行ant编译后生成相应的代理对象。上述远程调用对象的方法的流程可以由一种远程调用对象的系统执行,请参考图4,为本发明一种远程调用对象的系统的实施例一的结构示意图。本系统包括客户端100、调用装置200和业务对象容器300。
其中,所述业务对象容器300存储所有业务对象, 所述调用装置200包括多个代理对象单元201,还包括执行单元202,其中,各代理对象单元201与客户端100 —一对应,获取所述客户端100的调用命令之后,将该调用命令转换为与客户端协议相适配的命令信息;执行单元202获取该命令信息之后,将该调用命令进行转换成统一数据类型调用命令,根据所述该统一数据类型调用命令中的业务对象的名称在所述业务对象容器300中定位所述业务对象,由该业务对象得到业务对象方法标签,按照所述业务对象方法标签对业务对象方法进行调用,并反馈调用结果至相应的客户端 100。图5示出了该实施例的执行单元的结构示意图。所述执行单元202可以由获取单元2021、归一化单元2022、定位单元2023、调用单元2024和反馈单元2025组成,所述获取单元2021获取代理对象单元201发送过来的命令信息,并将该命令信息提供给归一化单元2022,该归一化单元2022将所述命令信息转换成符合统一数据类型的调用命令,并将该调用命令提供给定位单元2023,该定位单元2023根据命令信息中的目标业务对象的名称定位该目标业务对象在业务对象容器300中的位置,并通知调用单元2024,调用单元2024由所述业务对象得知业务对象方法标签,按照该业务对象方法标签找到该业务对象方法,进行调用;所述反馈单元2025将调用结果反馈给代理对象单元201,所述代理对象单元201将所述调用结果转换为对应客户端100能够识别的数据格式的结果信息,并将该结果信息反馈给该客户端100。图6示出了上述系统执行远程调用对象的方法的流程图,具体包括以下步骤:步骤S201:代理对象生成单元生成与各客户端相对应的代理对象。步骤S202:代理对象接收对应的客户端的调用命令。步骤S203:代理对象发送该命令信息至执行单元。代理对象将所述调用命令转换成与客户端协议相适应的命令信息。所述命令信息中包含目标业务对象的名称和业务对象方法标签。步骤S204:执行单元将所述命令信息转换成符合统一数据类型的调用命令。所述调用命令包含目标业务对象的名称、目标业务对象方法的标签。步骤S205:执行单元定位所述业务对象。所述执行单元按照所述调用命令包含的目标业务对象的名称确定所述目标业务对象在业务容器中的位置。步骤S206:执行单元调用所述业务对象,并将调用结果反馈给所述代理对象单
J Li ο步骤S207:代理对象单元将所述调用结果转换成与客户端技术协议相适配的结果信息后,反馈给所述客户端。图7示出了本发明一种远程调用对象的系统的实施例二的结构示意图。在上述实施例的基础上,本发明还可以包括代理对象生成单元400,代理对象生成单元400利用接口文件生成代理对象单元201的具体方法请参考上述远程调用对象的方法部分,在此不再赘述。需要说明的是,代理对象生成单元400可以设置在所述调用装置200中,如图8所示。
图9示出了本发明一种远程调用对象的系统的实施例四的结构示意图。由于业务对象的调用涉及到业务对象的生命周期和并发的问题,所以简单将对象名称和业务对象一一对应地绑定不是最好的方式,所以在上述实施例的基础上,本系统还可以包括业务对象管理单元500,用于对业务对象容器中的业务对象进行生命周期的管理和并发调用处理。本发明实施例由与多个客户端协议适配的多个代理对象对各客户端发送过来的调用命令进行归一化,处理成统一数据类型的调用命令,实现多个业务对象的复用,使用本发明能够构建一个和接口无关的分布式系统,可以适配多个客户端,使得业务逻辑和接口分离,屏蔽各个外部接口的差异,无需针对每个客户端,开发独立一套调用系统,从而节省了开发成本,提高了查找业务对象的效率。以上公开的仅为本发明的优选实施方式,但本发明并非局限于此,任何本领域的技术人员能思之的没有创造性的变化,以及在不脱离本发明原理前提下所作的若干改进和润饰,都应落在本发明的 保护范围内。
权利要求
1.一种远程调用对象的方法,其特征在于,包括: 创建与各客户端对应的代理对象; 利用该代理对象接收相应的客户端发出的调用命令,并将其转换成与客户端协议相适应的命令息; 将所述该命令信息处理成统一数据类型的调用命令; 按照所述统一数据类型的调用命令中的业务对象的名称定位所述业务对象,由该业务对象得到业务对象方法标签; 利用该标签对业务对象方法进行调用,并由代理对象将调用结果反馈给所述客户端。
2.如权利要求1所述的方法,其特征在于,代理对象将调用结果转换成所述客户端能够识别的结果信息后,反馈给所述客户端。
3.如权利要求1或2所述的方法,其特征在于,按照以下步骤创建代理对象: 读取对应客户端的业务接口文件,分析业务对象名称和业务对象方法标签; 解析相应的业务对象方法标签和所述接口参数,生成对应的方法体; 根据所述接口 参数和所述方法体生成代理对象。
4.如权利要求1或2所述的方法,其特征在于,将命令信息处理成统一数据类型的调用命令的实现方式为: 根据各代理对象接口类型,使用不同的参数映射,转化为标准的业务对象调用,从而完成统一数据类型的调用命令的生成。
5.一种远程调用对象的系统,包括多个客户端和用于存储业务对象的业务对象容器,其特征在于,还包括调用装置,该调用装置包括多个代理对象单元和执行单元; 各代理对象单元与客户端一一对应,用于接收所述客户端的调用命令,针对该调用命令发送与该客户端技术协议相适配的命令信息,接收反馈过来的调用结果信息,并该调用结果信息转换成对应客户端能够识别的信息后,反馈给客户端; 执行单元,用于获取所述命令信息,将该命令信息转换为统一数据类型调用命令,根据所述该统一数据类型调用命令中的业务对象的名称在所述业务对象容器中定位所述业务对象,由该业务对象得到业务对象方法标签,按照所述业务对象方法标签对业务对象方法进行调用,并反馈调用结果至所述代理对象单元。
6.如权利要求5所述的系统,其特征在于,还包括: 代理对象生成单元,用于获取对应的客户端业务接口文件,并依据该业务接口文件生成与客户端技术协议相适配的代理对象单元。
7.如权利要求5或6所述的系统,其特征在于,还包括: 业务对象管理单元,用于管理所述业务对象容器中的各个业务对象。
8.如权利要求7所述的系统,其特征在于,所述执行单元由以下单元组成: 获取单元,用于获取代理对象单元发送过来的命令信息; 归一化单元,将所述命令信息转换成统一数据类型的调用命令; 定位单元,根据所述统一数据类型的调用命令中的目标业务对象的名称定位该目标业务对象在业务对象容器中的位置; 调用单元,由所述业务对象得知业务对象方法标签,按照该业务对象方法标签找到该业务对象方法,进行调用;所述反馈单元,将调用结果反馈给代理对象单元。
9.如权利要求8所述的系统,其特征在于,所述代理对象生成单元设置在所述调用装置 中。
全文摘要
本发明公开了一种远程调用对象的方法,包括创建与各客户端对应的代理对象;利用该代理对象接收相应的客户端发出的调用命令,并将其转换成与客户端协议相适应的命令信息;将所述命令信息处理成统一数据类型调用命令;按照所述统一数据类型调用命令中的业务对象的名称定位所述业务对象,由该业务对象得到业务对象方法标签;利用该标签对业务对象方法进行调用。本发明同时还公开了一种远程调用对象的系统。本发明预先创建与各客户端相对应的代理对象,并通过将各客户端发送的命令信息按照客户端的协议转换后,进行归一化,由此可以支持来自多个客户端的命令信息,实现业务逻辑的复用,从而实现业务逻辑与接口的剥离,屏蔽了业务接口的专业性,可适配多个客户端,节约了工作人员的工作量,降低成本。
文档编号G06F9/46GK103246547SQ20111045128
公开日2013年8月14日 申请日期2012年2月14日 优先权日2012年2月14日
发明者张旭 申请人:北京亿阳信通科技有限公司