发明内容
有鉴于此,本发明的目的在于提供一种分布式***中的远程调用对象的方法和***,以解决现有技术存在的通用性不高的问题。
本发明一种远程调用对象的方法,包括:
创建与各客户端对应的代理对象;
利用该代理对象接收相应的客户端发出的调用命令,并将其转换成与客户端协议相适应的命令信息;
将所述该命令信息处理成统一数据类型的调用命令;
按照所述统一数据类型的调用命令中的业务对象的名称定位所述业务对象,由该业务对象得到业务对象方法标签;
利用该标签对业务对象方法进行调用,并由代理对象将调用结果反馈给所述客户端。
优选的,代理对象将调用结果转换成所述客户端能够识别的结果信息后,反馈给所述客户端。
优选的,按照以下步骤创建代理对象:
读取对应客户端的业务接口文件,分析业务对象名称和业务对象方法标签;
解析相应的业务对象方法标签和所述接口参数,生成对应的方法体;
根据所述接口参数和所述方法体生成代理对象。
优选的,将命令信息处理成统一数据类型的调用命令的实现方式为:
根据各代理对象所遵从的协议,按照各代理对象协议的参数映射,将各种数据类型的调用命令转换成统一数据类型的调用命令。
本发明还公开了一种远程调用对象的***,包括多个客户端和用于存储业务对象的业务对象容器,还包括调用装置,该调用装置包括多个代理对象单元和执行单元;
各代理对象单元与客户端一一对应,用于接收所述客户端的调用命令,针对该调用命令发送与该客户端技术协议相适配的命令信息,接收反馈过来的调用结果信息,并该调用结果信息转换成对应客户端能够识别的信息后,反馈给客户端;
执行单元,用于获取所述命令信息,将该命令信息转换为统一数据类型调用命令,根据所述该统一数据类型调用命令中的业务对象的名称在所述业务对象容器中定位所述业务对象,由该业务对象得到业务对象方法标签,按照所述业务对象方法标签对业务对象方法进行调用,并反馈调用结果至所述代理对象单元。
优选的,所述***还包括:
代理对象生成单元,用于获取对应的客户端业务接口文件,并依据该业务接口文件生成与客户端技术协议相适配的代理对象单元。
优选的,所述***还包括:
业务对象管理单元,用于管理所述业务对象容器中的各个业务对象。
优选的,所述执行单元由以下单元组成:
获取单元,用于获取代理对象单元发送过来的命令信息;
归一化单元,将所述命令信息转换成统一数据类型的调用命令;
定位单元,根据所述统一数据类型的调用命令中的目标业务对象的名称定位该目标业务对象在业务对象容器中的位置;
调用单元,由所述业务对象得知业务对象方法标签,按照该业务对象方法标签找到该业务对象方法,进行调用;
所述反馈单元,将调用结果反馈给代理对象单元。
优选的,所述代理对象生成单元设置在所述调用装置中。
通过上述技术方案可知,与现有技术相比,本发明预先创建与各客户端相对应的代理对象,并通过将各客户端发送的命令信息按照客户端的协议转换后,进行归一化,由此可以支持来自多个客户端的命令信息,实现业务逻辑的复用,从而实现业务逻辑与接口的剥离,屏蔽了业务接口的专业性,无需为每个客户端设计各自的调用***,便可适配多个客户端,节约了工作人员的工作量,降低成本。
具体实施方式
本发明的基本思想是:预先创建与各客户端相对应的代理对象;利用所述代理对象接收相应的客户端发出的针对目标业务对象的调用命令,并将其转换成与客户端协议相适应的命令信息;将所述命令信息处理成统一数据类型调用命令;按照所述统一数据类型调用命令中的目标业务对象的名称定位所述目标业务对象,得到所述目标业务对象,由该目标业务对象得到业务对象方法标签,利用该标签对业务对象方法进行调用,并反馈调用结果。
为了使本领域技术人员更好理解本发明技术方案,下面对本文所述的业务对象进行简单介绍描述:
首先对本文中出现的几个名词术语进行解释:
业务对象:业务方法的集合体;例如:账号管理对象;
业务对象名称:对业务对象定义的一个全局唯一的字符串标签;
业务对象方法:一定业务逻辑的集合;例如:取款;
业务对象方法标签:能够唯一定位业务方法的定义;
业务逻辑:完成一个完整业务的操作步骤;例如:取款:检查账号-是否有钱-取款-扣款。
例如:“取款”是一个业务对象方法,其封装了多种取款的业务逻辑,所述业务逻辑指的是完成一个完整业务的操作步骤,例如:客户端发送取款100元的请求信息时,该业务对象包含以下业务逻辑,如:
--查询该用户账户上的余额;
--如果该账户的余额少于100元,则将“余额不足”的信息反馈给客户端;
--如果该账户的余额多于100元,则调动送币机构将100元的纸币反馈给客户端,并将该账户的余额减去100元。
在***中,所述业务对象一般存储在对象容器中,所述对象容器就是存储多个业务对象的功能单元,每个业务对象都存在一个静态属性-业务对象名称,在所述对象容器中,一个业务对象唯一对应一个业务对象名称。
下面结合附图和实施例对本发明进行详细描述。
以传输综合资源网管***(TransNMS)为例,TransNMS是三层分布式网管***。由于这是一个复杂的中大型***,必须支持以下的应用场景:
1、支持其他***访问接口,例如EMOS(电子管理支撑***)***接口;
2、面向不同类型的用户,支持不同类型用户呈现方式,例如WebClient和Applictaion Client。
以上的需求就决定了本***必须根据不同应用场景支持不同的分布式接口。
下面通过告警监控为例来进行说明:
1、大客户需要通过WEB监控大客户电路上的告警,为了穿越防火墙,使用基于HTTP的Xml-RPC通信接口;
2、网管人员使用告警监控监控实时告警,为了能够提高访问效率,使用了EJB的无状态Bean作为接口;
3、电子运维人员使用告警生成的故障单,为了达到***无关的扩展性,采用了WebService接口;
上述需求都是由告警业务对象提供的业务对象中的一部分。因此,告警业务对象必须同时支持三种不同的外部接口。TransNMS***实现业务对象和外部接口的分离也就实现了业务逻辑的重用。
请参考图2,为本发明分布式***中远程调用对象的方法的流程图。
各客户端远程调用告警业务对象的方法可按照以下步骤进行:
步骤S101:预先创建与各客户端技术协议相对应的代理对象。
根据业务接口文件生成与大客户客户端、网管客户端和维护客户端相对应的代理对象。大客户客户端、网管客户端和维护客户端分别对应EJB代理对象、XRPC代理对象和WebService代理对象。
所述业务接口文件包含业务对象名称、业务对象方法标签和接口参数。
由于只有支持的技术协议相适配的实体才能进行通信,所以预先创建代理对象,该代理对象支持对应客户端的技术协议。
步骤S102:利用所述代理对象接收相应的客户端的调用命令,并进行转换。
利用所述代理对象接收相应的客户端发出的针对目标业务对象的调用命令,并将其转换为与客户端技术协议相适应的命令信息。
各代理对象接收对应的客户端发出的调用命令(如X1、X2和X3),并将其转换为与各自客户端技术协议相适应的命令信息,所述命令信息包含目标业务对象的名称及业务对象方法标签。
此时,来自大客户客户端的命令信息为:X1 method(T1,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机接口-以X1代替、网上银行接口-以X2代替、柜台接口-以X3代替,三个接口的数据类型分别为T1、T2、T3,三个接口有各自的代理对象(分别为第一代理对象、第二代理对象和第三代理对象)。
调用命令:对××实施转帐-以A代替(注:对于上述三个接口而言调用命令是同样的)。
三个客户端通过X1、X2、X3接口发出对××实施转帐的调用命令,调用命令分别经过所述第一代理对象、第二代理对象和第三代理对象转换后,变成每个代理对象都会根据自身协议将调用命令映射转换X1、X2、X3接口的命令信息:X1(T1,t),X2(T2,t),X3(T3,t),并将转换后的命令信息进一步转换为统一调用命令A(T,t),从而完成不同代理对象发出调用命令的归一化。
所述调用命令中包含有目标业务对象的名称。
步骤S104:按照所述调用命令中的目标业务对象的名称,得到目标业务对象方法,并调用。
按照所述调用命令中的目标业务对象的名称定位所述目标业务对象,得到目标业务对象方法,并对该目标业务对象方法进行调用。
步骤S105:代理对象将调用结果转换为与客户端技术协议相适应的结果信息后,反馈给客户端。
所述代理对象将调用结果转换为各种客户端能够识别的数据类型的结果信息后,反馈给对应的客户端。
本发明实施例通过建立与各客户端的技术协议相适配的代理单元,接收各客户端发送过来的各种数据类型的调用命令,对该调用命令进行归一化处理,处理成统一的统一数据类型调用命令(处理成统一的统一数据类型调用命令的关键是参数类型的转化,不同代理接口类型,可以使用不同的参数映射,转化为标准的业务对象调用,从而完成归一化命令),由此实现多个业务对象的复用,使得业务逻辑和接口脱离,节省了开发成本,提高了查找业务对象的效率。
图3示出了本发明远程调用对象的方法的代理对象的生成流程图。
上述实施例的步骤S101中,预先创建与各客户端技术协议相对应的代理对象的具体过程包括以下步骤:
步骤S1011:读取业务接口文件,分析业务对象名称和业务对象方法标签。
步骤S1012:生成代理接口的方法。
该方法可以根据预先设置的映射关系,将对应的业务接口的接口参数类型转换成统一数据类型。
例如:List<Stri g>类型参数在EJB接口映射是List<String>,在WebService接口映射为String[]数组。
步骤S1013:解析相应的业务对象方法标签和所述接口参数,生成对应的方法体。
步骤S1014:根据所述接口参数和所述方法体生成代理对象。
下面以EJB为例进一步说明代理对象生成的过程:
读取接口文件为:
public interface IAlarmBO{
String getAlarml dByName(String alarmName);
}
根据该接口文件生成相应的XXXBean类文件,XXXBean实现建立javax.ejb.SessionBean接口和业务接口和EJB标签。
从接口文件中解析相应的方法名称和参数,生成同样的方法体。该方法体为:
将各种数据格式的调用命令处理成统一的数据类型的调用命令。
例如:
上述代码中表示,getAlarmldByName的数据类型为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:执行单元调用所述业务对象,并将调用结果反馈给所述代理对象单元。
步骤S207:代理对象单元将所述调用结果转换成与客户端技术协议相适配的结果信息后,反馈给所述客户端。
图7示出了本发明一种远程调用对象的***的实施例二的结构示意图。
在上述实施例的基础上,本发明还可以包括代理对象生成单元400,代理对象生成单元400利用接口文件生成代理对象单元201的具体方法请参考上述远程调用对象的方法部分,在此不再赘述。
需要说明的是,代理对象生成单元400可以设置在所述调用装置200中,如图8所示。
图9示出了本发明一种远程调用对象的***的实施例四的结构示意图。
由于业务对象的调用涉及到业务对象的生命周期和并发的问题,所以简单将对象名称和业务对象一一对应地绑定不是最好的方式,所以在上述实施例的基础上,本***还可以包括业务对象管理单元500,用于对业务对象容器中的业务对象进行生命周期的管理和并发调用处理。
本发明实施例由与多个客户端协议适配的多个代理对象对各客户端发送过来的调用命令进行归一化,处理成统一数据类型的调用命令,实现多个业务对象的复用,使用本发明能够构建一个和接口无关的分布式***,可以适配多个客户端,使得业务逻辑和接口分离,屏蔽各个外部接口的差异,无需针对每个客户端,开发独立一套调用***,从而节省了开发成本,提高了查找业务对象的效率。
以上公开的仅为本发明的优选实施方式,但本发明并非局限于此,任何本领域的技术人员能思之的没有创造性的变化,以及在不脱离本发明原理前提下所作的若干改进和润饰,都应落在本发明的保护范围内。