首页 / 专利库 / 软件 / 逻辑文件 / 业务系统中业务动态加载系统及方法

业务系统中业务动态加载系统及方法

阅读:663发布:2024-02-21

专利汇可以提供业务系统中业务动态加载系统及方法专利检索,专利查询,专利分析的服务。并且本 发明 公开了一种业务系统中业务动态加载的方法,包括:A将新增业务或/和更新业务的应用的JAVA类文件存储于业务新增及更新 指定 的文件夹中,参照配置模板编写新增业务或/和更新业务的JAVA类文件的配置文件,并用新编写完成的配置文件直接 覆盖 旧的配置文件;B线程监控文件夹中设定种类的JAVA类文件的实时新增和更新状况,在有新的JAVA类文件导入时,提取新的JAVA类文件,存储到业务系统所在的内存中;C接收到用户的业务 请求 后,业务系统获取系统的配置文件并自动进行解析,根据配置文件调用业务系统所在的内存中相应的JAVA类文件,JAVA类文件按其自身的逻辑被执行,将执行结果提供至用户,使用户获得业务支持。本发明同时公开了一种实现上述方法的系统。本发明实现了业务的动态加载。,下面是业务系统中业务动态加载系统及方法专利的具体信息内容。

1.一种业务系统中业务动态加载方法,其特征在于,在所述业务系统中指定新增及更新业务存放的文件夹,对配置新增JAVA类文件及更新JAVA类文件的配置文件进行初始化配置,并设置监控所述文件夹中设定的JAVA类文件更新状况的线程;根据用户需求确定所述业务系统的新增业务或/和更新业务,在所述业务系统的开发环境下编译所述新增业务或/和更新业务的应用,对所述新增业务或/和更新业务的应用进行调试,调试成功后将所述新增业务或/和更新业务的应用对应的JAVA源文件生成JAVA类文件;所述方法包括以下步骤:
A、将所述新增业务或/和更新业务的应用的JAVA类文件存储于所述业务新增及更新指定的文件夹中,参照配置模板编写新增业务或/和更新业务的JAVA类文件的配置指令,从而实现配置文件的编写,并用新编写完成的配置文件直接覆盖旧的配置文件;所述配置文件分为两个,一个是监控新增文件的配置文件,一个是完成更新映射的配置文件;
B、所述线程监控文件夹中设定种类的JAVA类文件的实时新增和更新状况,在有新的JAVA类文件导入时,提取新的JAVA类文件,存储到业务系统所在的内存中;
C、接收到用户的业务请求后,业务系统获取系统的配置文件并自动进行解析,根据所述配置文件调用业务系统所在的内存中相应的JAVA类文件,在业务系统的执行环境下,JAVA类文件按其自身的逻辑被执行,将JAVA类文件的执行结果提供至用户,使用户获得业务支持;其中,被执行的JAVA类文件包括新增业务或/和更新业务的JAVA类文件。
2.根据权利要求1所述的方法,其特征在于,所述步骤B中提取所述新的JAVA类文件存储到所述业务系统所在的内存中,具体为:通过解析监控新增文件的配置文件中配置的路径名自动发现该路径下的新增JAVA类文件,并通过类加载器将其加载到业务系统所在的内存中。
3.根据权利要求1所述的方法,其特征在于,所述设置所述JAVA类文件新增到所述业务系统中的配置模板,具体为:根据所述JAVA类文件的路径、存储地址的信息建立所述JAVA类文件发现的模板,将新增JAVA类文件所在的路径或存储地址信息替换所述模板中的路径、存储地址信息,即编写所述新增JAVA类文件的配置文件;设置所述JAVA类文件替换所述业务系统中原JAVA类文件的配置模板,具体为:根据所述JAVA类文件的名称、存储地址的信息建立欲更新的JAVA类文件的调用及阻止待替换的JAVA类文件调用的应用的模板,将更新JAVA类文件及待更新JAVA类文件的名称或存储地址分别替换所述应用的模板中的更新JAVA类文件及待更新JAVA类文件的名称、存储地址,即编写所述更新JAVA类文件的配置文件。
4.根据权利要求1所述的方法,其特征在于,所述步骤A中用新编写完成的配置文件直接覆盖旧的配置文件,具体为:将编写好的已测试成功的配置文件覆盖掉原先的配置文件,以避免直接进行配置而导致配置中出现异常。
5.根据权利要求1所述的方法,其特征在于,所述业务系统为JAVA支持的业务系统,所述业务包括各种Web服务业务、电信服务业务、基于各种操作系统的服务业务。
6.根据权利要求5所述的方法,其特征在于,所述步骤B中提取所述新的JAVA类文件存储到所述业务系统所在的内存中,具体为:查找具有设定名称的类或所述类的接口的二进制表示,构造供JAVA虚拟机的执行引擎引用和解释执行的与所述类或类的接口对应的内存结构。
7.一种业务系统中业务动态加载系统,其特征在于,包括:
设置单元,用于在所述业务系统中设置新增及更新业务指定的文件夹;
线程监控单元,用于监控配置文件的改变及所述文件夹中JAVA类文件的新增和更新状况;
JAVA类文件生成单元,用于根据用户需求确定所述业务系统的新增业务或/和更新业务,在所述业务系统的开发环境下编译所述新增业务或/和更新业务的应用,对所述新增业务或/和更新业务的应用进行调试,调试成功后生成所述新增业务或/和更新业务相应JAVA类文件;将所述新增业务或/和更新业务的应用的JAVA类文件存储于所述业务新增及更新指定的文件夹中;
配置模板设置单元,参照配置模板编写新增业务或/和更新业务的JAVA类文件的配置指令完成配置文件的编写,并用新编写完成的配置文件直接覆盖旧的配置文件;
JAVA类文件新增及更新单元,在所述线程监控单元监控到所述文件夹中有设定种类的新的JAVA类文件导入时,提取所述新的JAVA类文件,存储到所述业务系统所在的内存中;
执行单元,接收到用户的业务请求后,业务系统获取系统的配置文件并自动进行解析,根据配置文件调用业务系统所在的内存中相应的JAVA类文件,在业务系统的执行环境下,JAVA类文件按其自身的逻辑被执行,将JAVA类文件的执行结果提供至用户,使用户获得业务支持;其中,被执行的JAVA类文件包括新增业务或/和更新业务的JAVA类文件。
8.根据权利要求7所述的系统,其特征在于,所述业务系统为JAVA支持的业务系统,所述业务包括各种Web服务业务、电信服务业务、基于各种操作系统的服务业务。

说明书全文

技术领域

发明涉及一种业务加载的方法,尤其涉及一种业务系统中业务动态加载系统及方法

背景技术

目前的业务系统均是根据用户的需求而设计的,业务系统为用户提供了各种各样的业务服务,这大大方便了用户对业务系统的应用。随着技术的进步、环境的变化,对于任一客户群而言,其需求也总是变化的。为满足用户需求,即使是同一业务,经常进行更新也是必要的。这里所指的业务系统,是指各种具体的应用系统,特别是网络上的服务器端的应用系统,支持相关业务的应用系统等。业务更新包括业务升级、业务扩展、新增业务等。例如目前的电信业务系统中,除了一些正常的电信业务外,运营商针对用户的需求,还推出有相关的增值业务如电话声讯业务、服务查询业务、网络服务等。对于运营商来说,增值服务的推出或更新一般能拓展其收入,运营商乐意进行业务升级的操作,但对于业务系统而言,升级操作往往需要服务器重新启动,这必然导致所有的业务中断,将对运营商造成收入损失,同时对用户而言也会因服务中断而导致不必要的损失,为降低运营损失及避免给用户带来服务上的不便,电信业务的升级是相当谨慎的,不得不升级的操作往往选择在凌晨使用用户较少的时候,即便如此,中断业务的损失也是相当大,这对于业务系统的用户特别是运营商级的用户而言,是相当棘手的一对矛盾。针对于此,目前常用的技术手段多是采用冗余备份的方式,即同时配备两套系统,当需要升级更新时,在冗余系统上进行更新,而当更新完毕后,用冗余设备替换当前使用的设备。这种方式虽然能大大缩短中断的时间,但更换设备时还是得中断所有的业务,如果操作不熟练,比更新设备花费的时间还要长。能直接在业务系统运行的设备上进行业务加载而不必重启系统,是当前业务系统用户所渴望解决的问题。

发明内容

有鉴于此,本发明的主要目的在于提供一种业务系统中业务动态加载系统及方法,能在不停止系统业务的情况下实现新增或更新业务的加载,加载完毕后不必重启业务系统。
为达到上述目的,本发明的技术方案是这样实现的:
一种业务系统中业务动态加载的方法,在所述业务系统中指定新增及更新业务存放的文件夹,对配置新增JAVA类文件及更新JAVA类文件的配置文件进行初始化配置,并设置监控所述文件夹中设定的JAVA类文件更新状况的线程;根据用户需求确定所述业务系统的新增业务或/和更新业务,在所述业务系统的开发环境下编译所述新增业务或/和更新业务的应用,对所述新增业务或/和更新业务的应用进行调试,调试成功后将所述新增业务或/和更新业务的应用对应的JAVA源文件生成JAVA类文件;所述方法包括以下步骤:
A、将所述新增业务或/和更新业务的应用的JAVA类文件存储于所述业务新增及更新指定的文件夹中,参照配置模板编写新增业务或/和更新业务的JAVA类文件的配置指令,从而实现配置文件的编写,并用新编写完成的配置文件直接覆盖旧的配置文件;所述配置文件分为两个,一个是监控新增文件的配置文件,一个是完成更新映射的配置文件;
B、所述线程监控文件夹中设定种类的JAVA类文件的实时新增和更新状况,在有新的JAVA类文件导入时,提取新的JAVA类文件,存储到业务系统所在的内存中;
C、接收到用户的业务请求后,业务系统获取系统的配置文件并自动进行解析,根据所述配置文件调用业务系统所在的内存中相应的JAVA类文件,在业务系统的执行环境下,JAVA类文件按其自身的逻辑被执行,将JAVA类文件的执行结果提供至用户,使用户获得业务支持;其中,被执行的JAVA类文件包括新增业务或/和更新业务的JAVA类文件。
其中,所述步骤B中提取所述新的JAVA类文件存储到所述业务系统所在的内存中,具体为:通过解析监控新增文件的配置文件中配置的路径名自动发现该路径下的新增JAVA类文件,并通过类加载器将其加载到业务系统所在的内存中。
其中,所述设置所述JAVA类文件新增到所述业务系统中的配置模板,具体为:根据所述JAVA类文件的路径、存储地址的信息建立所述JAVA类文件发现的模板,将新增JAVA类文件所在的路径或存储地址信息替换所述模板中的路径、存储地址信息,即编写所述新增JAVA类文件的配置文件;设置所述JAVA类文件替换所述业务系统中原JAVA类文件的配置模板,具体为:根据所述JAVA类文件的名称、存储地址的信息建立欲更新的JAVA类文件的调用及阻止待替换的JAVA类文件调用的应用的模板,将更新JAVA类文件及待更新JAVA类文件的名称或存储地址分别替换所述应用的模板中的更新JAVA类文件及待更新JAVA类文件的名称、存储地址,即编写所述更新JAVA类文件的配置文件。
其中,所述步骤A中用新编写完成的配置文件直接覆盖旧的配置文件,具体为:将编写好的已测试成功的配置文件覆盖掉原先的配置文件,以避免直接进行配置而导致配置中出现异常。
其中,所述业务系统为JAVA支持的业务系统,所述业务包括各种Web服务业务、电信服务业务、基于各种操作系统的服务业务。
其中,所述步骤B中提取所述新的JAVA类文件存储到所述业务系统所在的内存中,具体为:查找具有设定名称的类或所述类的接口的二进制表示,构造供JAVA虚拟机的执行引擎引用和解释执行的与所述类或类的接口对应的内存结构。
一种业务系统中业务动态加载系统,包括:
设置单元,用于在所述业务系统中设置新增及更新业务指定的文件夹;
线程监控单元,用于监控配置文件的改变及所述文件夹中JAVA类文件的新增和更新状况;
JAVA类文件生成单元,用于根据用户需求确定所述业务系统的新增业务或/和更新业务,在所述业务系统的开发环境下编译所述新增业务或/和更新业务的应用,对所述新增业务或/和更新业务的应用进行调试,调试成功后生成所述新增业务或/和更新业务相应JAVA类文件;将所述新增业务或/和更新业务的应用的JAVA类文件存储于所述业务新增及更新指定的文件夹中;
配置模板设置单元,参照配置模板编写新增业务或/和更新业务的JAVA类文件的配置指令完成配置文件的编写,并用新编写完成的配置文件直接覆盖旧的配置文件;
JAVA类文件新增及更新单元,在所述线程监控单元监控到所述文件夹中有设定种类的新的JAVA类文件导入时,提取所述新的JAVA类文件,存储到所述业务系统所在的内存中;
执行单元,接收到用户的业务请求后,业务系统获取系统的配置文件并自动进行解析,根据配置文件调用业务系统所在的内存中相应的JAVA类文件,在业务系统的执行环境下,JAVA类文件按其自身的逻辑被执行,将JAVA类文件的执行结果提供至用户,使用户获得业务支持;其中,被执行的JAVA类文件包括新增业务或/和更新业务的JAVA类文件。
其中,所述业务系统为JAVA支持的业务系统,所述业务包括各种Web服务业务、电信服务业务、基于各种操作系统的服务业务。
本发明在为业务系统加载新业务或进行业务更新时,将所编译的业务应用生成的文件导入到事先指定的文件夹中,同时初始化设置待加载文件的配置文件,将描述所述配置文件的配置文件存放到业务系统中,同时设置监控文件夹中设定的文件的变更情况的线程,运行所述业务系统时,线程监控所设置文件夹中设定的文件的变更情况,当有新的文件导入时,提取所述文件并存储到业务系统所在的内存中,业务系统进行业务提供时,根据各业务的配置文件调用业务系统所在的内存中的业务文件,解析所述文件并执行之,从而完成业务系统中的业务支持。在业务文件导入业务系统后,所设置的线程即刻将其导入到业务系统所在的内存中,业务系统根据所述业务的配置文件查找内存中存储的业务文件,通过对其解析并执行而实现其业务。这样,无论导入多少业务文件,只要该文件的编译没有问题,均可直接获得执行,从而不必重新启动业务系统即可实现业务的加载。本发明在不重启系统的情况下实现了业务的加载。本发明的技术方案实现简单,加载业务后可以不重启业务系统,从而在业务系统不中断业务的情况下实现了业务加载,对于如电信运营系统而言,大大降低了其业务加载所受的损失,同时也避免了这些业务系统的普通用户因业务中断所造成的损失。
附图说明
图1为本发明实施例的业务系统中业务动态加载的方法的流程图
图2为本发明实施例的业务系统中业务动态加载系统的结构示意图;
图3为本发明实施例的业务系统中业务动态加载系统中各单元核心模逻辑结构示意图;
图4为本发明实施例的业务系统中业务动态加载系统中配置文件监控模块的实现结构示意图;
图5为本发明实施例的业务系统中业务动态加载系统中新增及更新JAVA类文件监控模块的实现结构示意图;
图6为本发明实施例的业务系统中业务动态加载系统中新增及更新文件注册加载模块的实现结构示意图;
图7为本发明实施例的业务系统中业务动态加载系统中配置文件解析模块的实现结构示意图。

具体实施方式

以下结合附图对本发明作进一步详细描述。
图1为本发明实施例的业务系统中业务动态加载的方法的流程图,如图1所示,本发明业务系统中业务动态加载的方法包括以下步骤:
步骤101:指定新增文件及更新文件所需存放的文件夹,对配置新增JAVA类文件及更新JAVA类文件的配置文件进行初始化配置,在业务系统中设置监控文件夹中设定的JAVA类文件新增和更新状况的线程;根据用户需求确定业务系统的新增业务或/和更新业务,在业务系统的开发环境下编译新增业务或/和更新业务的应用,对新增业务或/和更新业务的应用进行调试,调试成功后新增业务或/和更新业务的应用对应的类生成相应的JAVA类文件。
这里,业务系统即是支持各种业务的应用系统,如电信运营系统、会员管理信息系统、Web服务系统、各种服务器上装载的服务业务等,这些业务系统均是通过JAVA语言开发实现的。由于业务的编译不是本发明的重点,各种语言所执行的逻辑运算及编译理论基本相同,这里不再对业务系统作更多描述。
所述的文件夹根据业务系统中新增和更新的情况进行设定,以系统开发的逻辑结构为主要方向在配置文件中进行相应的配置即可,以JAVA语言的业务系统为例,解释一下JAVA类文件。在JAVA业务系统的标准实现中,JAVA编译器为每个JAVA类(业务)生成一个JAVA类文件,这种文件采用JAVA虚拟机(JVM)定义的JAVA类文件格式保存,并由JAVA虚拟机加载并解释执行。针对当前的业务系统,系统维护人员确定要加载或更新的业务,根据业务所需的功能,进行相应的开发即编译支持所述业务的应用,编译调试完毕后,通过JAVA编译器或类似的语言编译器将所述业务的应用生成相应的JAVA类文件。需要说明的是,JAVA类文件是一个格式文件,并不受编译环境的限制,任何JAVA编译环境均可生成相应的JAVA类文件。
设置JAVA类文件新增到业务系统中的配置模板:根据所述JAVA类文件的路径、存储地址的信息建立所述JAVA类文件发现的模板,将新增JAVA类文件所在的路径或存储地址信息替换所述模板中的路径、存储地址信息,即编写所述新增JAVA类文件的配置文件;设置所述JAVA类文件替换所述业务系统中原JAVA类文件的配置模板,具体为:根据所述JAVA类文件的名称、存储地址的信息建立欲更新的JAVA类文件的调用及阻止待替换的JAVA类文件调用的应用的模板,将更新JAVA类文件及待更新JAVA类文件的名称或存储地址分别替换所述应用的模板中的更新JAVA类文件及待更新JAVA类文件的名称、存储地址,即编写所述更新JAVA类文件的配置文件。
这里所述替换并不是通常的将新文件覆盖旧文件,而是指:在一段时间内,两个文件同时存在,更新时,只是在逻辑上进行替换即程序调用新文件而不调用旧文件,进而完成替换。当功能更新完成后,之后登录的用户访问的是新功能。而更新之前已经进行访问的用户访问的仍然是旧功能,但是在业务中端后的下一次访问的便是新功能,这也正是更新系统不影响已登录用户访问旧功能,新登录用户访问新功能的原理所在。所述JAVA类文件替换所述业务系统中原JAVA类文件的配置模板如下:
以网页所支持业务为例,在updatedes.xml文件配置如下:
      
        
           cn.bupt.pj.add.Jconn
           cn.bupt.pj.add.NewJconn
        


其中,cn.bupt.pj.add.Jconn为被更新的类;cn.bupt.pj.add.NewJconn为更新类。
以会员管理系统中的投票业务的更新为例,在没有使用本系统之前,业务程序初始化一个业务JAVA类文件的对象和进行这个类方法的配置文件(程序一)为:
1.ChartService chartServ=New ChartService();
2.String filename=chartServ.generatorPieChart(″会员满意度投票结果″,session,request,new PrintWriter(out));
上面程序中第一条语句是初始化一个ChartService类的对象,第二条语句是该对象调用ChartService类中的generatorPieChart方法,(″会员满意度投票结果″,session,request,new PrintWriter(out))里的内容为该方法的参数。该方式只使用于对ChartService这个类的使用,故无法实现新旧功能类之间的切换。
本发明的业务程序时初始化一个业务JAVA类文件的对象和进行这个类方法的配置文件(程序二)为:
1.Init init=new Init();//系统提供的一个类对象的初始化
2.Object chartServ=init.newObject(″com.jun.service.ChartService″);//使用该函数及类的全名字符串来进行对象的初始化,代替new关键字,该例为使用无参数构造方法,若使用带参数构造方法需在其后追加两个参数,分别为参数对象数组和参数类型数组。
3.String filename=(String)init.InvokeMethod(″generatorPieChart″,chartServ,new Object[]{″会员满意度投票结果″,session,request,new PrintWriter(out)},newClass[]{String.class,HttpSession.class,HttpServletRequest.class,PrintWriter.class});
//使用该函数调用某个方法,参数依次为方法名,调用该方法的对象名,方法的参数对象数组,方法的参数类型数组。
以上三条语句中第一条语句为使用本发明提供的配置模板对一个类对象的初始化,用这个类中的函数来代替原先的方式来初始化一个业务JAVA类文件的对象和进行这个类方法的调用。第二条语句即是使用该类对象初始化一个ChartService类的对象,第三条语句即是使用该类对象调用chartServ对象的generatorPieChart方法。
在配置文件中没有配置对ChartService类的更新时,程序二实现的功能与程序一实现的功能完全相同,在配置文件中配置了对ChartService类的更新时,例如更新后的类为NewChartService,程序二将执行xml配置文件中进行了与ChartService映射的NewChartService类,由此便实现了从执行ChartService类到NewChartService类的切换。
设置配置模板的优点是:业务系统的维护人员只需根据模板进行业务配置即可,本发明相当于提供了一个动态的接口,维护人员只需预留一个被更新的位置而无需知道将要被更新成什么样的类,只需要在xml配置文件中进行映射配置,系统便自己去解析配置文件而执行相应的新类的功能。
新增JAVA类文件的监测线程可设置为周期性监控实现方式,如每20分钟对待监测的文件夹扫描一次等。
以上只是作为示例的说明,任何种类的JAVA类文件的配置模板均可参照上述示例进行设置。
步骤102:将新增业务或/和更新业务的应用的JAVA类文件存储于业务新增及更新指定的文件夹中,参照配置模板编写新增业务或/和更新业务的JAVA类文件的配置指令完成配置文件的编写,并用新的配置文件覆盖原先的配置文件,以上所述配置文件分为两个,一个是监控新增文件的配置文件,一个是完成更新映射的配置文件。
步骤101生成业务的JAVA类文件之后,将其导入到设定的文件夹中,同时,根据配置模板设置所述JAVA类文件的配置文件。设置完配置文件后,将其覆盖原先业务系统中的配置文件。具体地,即将编写完成并通过测试的新的配置文件覆盖掉旧的配置文件即可。由于旧配置文件已被存储于业务系统所在的内存中,因此其所支持的旧业务仍可被用户所调用,但在新用户所请求的该业务的新的申请时,由于系统中旧配置文件已被覆盖,因此,新的业务申请的用户将被提供更新或新增的业务。
步骤103:线程监控文件夹中设定种类的JAVA类文件的实时新增和更新状况,在有新的JAVA类文件导入时,提取新的JAVA类文件,存储到业务系统所在的内存中。
以JAVA业务系统为例,说明JAVA类文件更新到系统的情况。
每一个JAVA虚拟机都由一个类加载器子系统(Class Loader Subsystem),负责加载程序的JAVA类文件。类的装载就是寻找一个具有特定名称的类或接口的二进制表示(即JAVA类文件),并构造与之对应的内存结构,以供JAVA虚拟机的执行引擎引用和解释执行。JAVA虚拟机的动态加载是通过JAVA系统类java.lang.ClassLoader及其子类实现的。ClassLoader类是一个抽象类,其实例或其子类的实例被称为类加载器。当指定了一个类名后,类加载器会寻找相对应的JAVA类文件并将其加载到JAVA虚拟机环境中,同时为该类创建一个对应的类对象。一般情况下,JAVA虚拟机从本地文件系统中加载JAVA类文件,JAVA虚拟机也允许应用程序通过实现ClassLoader的子类从网络加载JAVA类文件。
线程实时监控待监控的文件夹,当有所设定的JAVA类文件插入时,立刻提取其相应信息,存储到业务系统所在的内存中。所存储到业务系统所在内存中的信息,包括JAVA类文件的名称、存储地址、JAVA类文件生成时间等相关属性信息,以使业务系统能调用该JAVA类文件。用于存储JAVA类文件的文件监控线程(JAVA环境下)可按以下设置:
假设待监控的文件夹的路径设置为:
monitor.path=\\com\\jun\\service;\\com\\jun\\struts\\action
monitor.pack=\\com\\jun
说明:
monitor.path为检测新增和更新JAVA类文件所在的目录,多个目录之间用分号分开,目录须严格按照从应用名的下一个目录开始。monitor.pack是为了从文件的路径中截取出类的包名,为了描述文件较好的容错性需为其定义规则如下:JAVA类文件所在的包应建在三层以上,而且被检测的所有JAVA类文件必须至少有两层公共目录。
updatedes.xml配置文件:
<?xml version=”1.0”encoding=“UTF-8”>

  
        com.jun.service.ChartService
        com.jun.service.NewChartService
  


  com.jun.service.RegisterService
  com.jun.service.NewRegisterService


  com.jun.service.LogonService
  com.jun.service.NewLogonService


说明:
将整个描述文件的内容包含在里面,它可以包含多个,每个中表示一个更新映射,用来显示被更新的类,类必须为包含包名在内的完整类名,用来显示所有的更新后的类,类必须为包含包名在内的完整类名,其必须与同一个中的里的类名一一对应,以得知此类对象为哪个类的更新版本。
本发明中,一个类用其完全匹配类名作为标识,这里指的完全匹配类名包括包名和类名。但在JAVA虚拟机中一个类用其全名和一个加载类ClassLoader的实例作为唯一标识,不同类加载器加载的类将被置于不同的命名空间。
如果用同一加载器加载一个同名的JAVA文件,或者直接用更新后的文件覆盖原有文件,该加载器首先会检查给类是否被加载过,如果被加载过就不再进行加载,也就无法被引用。这使得无法在同一个加载器下进行源文件的更新。如果用不同的加载器来加载更新后的文件,那么因为不同类加载器加载的类将被置于不同的命名空间,这些类之间也无法相互访问。这使得无法在不同加载器下进行源文件的更新。业务动态加载系统的加载过程是通过以下方式来实现的:
假定系统原有的JAVA类文件为A.class,要对其进行更新,并且把修改后的更新文件命名为B.class(B和A不相同),并将B.class放入监控目录下。事实上B.class和A.class具有相同的类结构,只是名称不同而已。更新时,在配置文件updatedes.xml中描述新旧功能的映射关系,这样在更新过程结束后,当程序调用A.class时,业务动态加载系统会到updatedes.xml中查找A.class所对应的更新类,如果没有就直接加载A.class,否则用当前加载器(同一个类加载器)加载其所对应的B.class,这样同一个类加载器加载的类就可以相互调用,程序调用A.class时,实际上调用的是B.class,这些对用户是透明的。系统由此便实现了在新旧业务之间的动态切换,便实现了业务系统的动态更新功能。
步骤104:接收到用户的业务请求后,业务系统获取系统的配置文件并自动进行解析,根据配置文件调用业务系统所在内存中相应的JAVA类文件,在业务系统的执行环境下,JAVA类文件按其自身的逻辑被执行,将JAVA类文件的执行结果提供至用户,使用户获得业务支持。其中,被执行的JAVA类文件包括新增业务或/和更新业务的JAVA类文件。步骤104主要用于说明业务执行的详细过程,以下仍以JAVA业务系统为例进行说明。
在JAVA虚拟机规范中,加载和连接被定义为两个相互递归的过程。加载是指JAVA虚拟机根据指定的类文件名或接口名查找相应的JAVA类文件,并将JAVA类文件装载到运行环境中的过程。连接是指JAVA虚拟机对JAVA类文件进行验证和解析符号引用的过程。JAVA虚拟机通过JAVA系统的类java.lang.ClassLoader及其子类实现这一加载过程。ClassLoader类是一个抽象类,其实例或其子类的实例被称为类加载器。当指定了一个类名后,类加载器会寻找相对应的JAVA类文件并将其加载到JAVA虚拟机环境中,同时为该类创建一个对应的类对象。一般情况下,JAVA虚拟机从本地文件系统中加载JAVA类文件,JAVA虚拟机也允许应用程序通过实现ClassLoader的子类从网络加载JAVA类文件。在JAVA平台中,所有类都是由类加载器加载的。JAVA中的类加载器可以分为四类:
1.Bootstrp loader
Bootstrp加载器是用C++语言写的,它是在JAVA虚拟机启动后初始化的,它主要负责加载%JAVA_HOME%/jre/lib以及%JAVA_HOME%/jre/classes中的类。
2.ExtClassLoader
Bootstrp loader加载ExtClassLoader,并且将ExtClassLoader的父加载器设置为Bootstrp loader.ExtClassLoader主要加载%JAVA_HOME%/jre/lib/ext中的jar文档,以及此路径下的所有classes目录。
3.AppClassLoader
Bootstrp loader加载完ExtClassLoader后,就会加载AppClassLoader,并且将AppClassLoader的父加载器指定为ExtClassLoader。AppClassLoader主要负责加载classpath所指定的位置的类或者是jar文档。
4.URLClassLoader
URLClassLoader是可以自定义的加载器,可以通过指定一个URL对象来创建此加载器,它所加载路径就是URL所代表的逻辑位置。并且它的父加载器是AppClassLoader。很多时候都是通过类加载器来控制JAVA虚拟机中的类加载行为。
JAVA虚拟机的类加载机制采用委托模型。所谓委托模型就是指:当一个加载器在加载某个类的时候先让父加载器去加载,父加载器再让其父加载器加载,依此类推,如果所有的父加载器都不能加载,再由自己来加载,而如果此时自己也不能加载,则产生java.lang.NoClassDefFoundError错误。委托模型最大的好处就是提高了JAVA的安全性,比如:如果加载器的父加载器已经加载了某个类,那么自己就不能再加载此类了,这样就使得一些与JAVA类库中同名的类不能加载进来。
需要说明的是,业务系统实现新业务的更新工作之后,新接入用户访问的是新功能,一直未退出的已接入用户使用的仍然是旧功能。两种用户之间均可获得相应的业务支持,并互不影响,当已接入用户执行的旧功能完成之后,下次接入时将全部执行新功能。当该某业务的在线用户全部退出后,旧功能所占内存将由JAVA虚拟机自动进行回收。JAVA虚拟机的这种垃圾回收机制可以如下表述:
一个对象,可以有一个或多个引用变量指向它。当一个对象不再有任何一个引用变量指向它时,这个对象可以被JAVA虚拟机的垃圾回收机制回收了。JAVA虚拟机的垃圾回收机制对堆空间做实时检测。当发现某对象可以被回收时,就将该对象列入待回收列表中。在合适的时机内,JAVA虚拟机会对回收列表中的垃圾进行回收。
图2为本发明实施例的业务系统中业务动态加载系统的结构示意图,如图2所示,本发明实施例的业务系统中业务动态加载系统包括设置单元20、线程监控单元21、JAVA类文件生成单元22、配置模板设置单元23、JAVA类文件新增及更新单元24以及执行单元25,其中,设置单元20用于在所述业务系统中设置新增及更新业务专用的文件夹。设置单元20为本发明的系统设置指定文件夹,以存储更新或新增业务功能的JAVA类文件。线程监控单元21用于监控所述文件夹中设定的JAVA类文件新增及更新状况。线程监控单元21用于监控配置文件的改变及文件夹中所设定JAVA类文件的变换情况,在有更新JAVA类文件加入到文件夹中时,通知JAVA类文件更新单元24。线程监控单元21实现的主要功能是在系统启动时启动监控线程,该监控线程用于不断的监控配置文件及配置文件中指定的文件夹,以发现新增的及更新的JAVA类文件。其配置过程为在web.xml中配置一个servlet,随服务器的启动同时启动,其配置结构如下:

    StartDaemon
    
        cn.edu.bupt.extend.monitor.StartDaemon
    

    0
  

线程监控单元21主要分为两个模块,一个为配置文件监控模块30,一个为新增及更新的JAVA类文件监控模块32。配置文件监控模块30主要负责监控配置文件的改变,配置文件一旦有所变动系统便重新加载新的配置文件。新增及更新JAVA类文件监控模块32主要负责监控配置文件中指定的监控文件夹,一旦配置文件中描述的文件夹下面的JAVA类文件有所增加,便通知JAVA类文件新增及更新单元24进行JAVA类文件的加载。JAVA类文件生成单元22用于根据用户需求确定所述业务系统的新增业务或/和更新业务,在所述业务系统的开发环境下编译所述新增业务或/和更新业务的应用,对所述新增业务或/和更新业务的应用进行调试,调试成功后生成所述新增业务或/和更新业务相应JAVA类文件;将所述新增业务或/和更新业务的应用的JAVA类文件存储于所述业务新增及更新指定的文件夹中。配置模板设置单元23用于参照配置模板编写新增业务或/和更新业务的JAVA类文件的配置指令完成配置文件的编写,并用新编写完成的配置文件直接覆盖旧的配置文件。
更新JAVA类文件的配置文件模板(updatedes.xml)的实现如下:
<?xml version=”1.0”encoding=“UTF-8”>

  
     com.jun.service.ChartService
     com.jun.service.NewChartService
  

  
     com.jun.service.RegisterService
     com.jun.service.NewRegisterService
  

  
     com.jun.service.LogonService
     com.jun.service.NewLogonService
  


通过对完成更新映射的配置文件进行类名之间一对一的映射描述,被配置文件监控模块30检测到改变以后加载到系统所在内存中并对配置文件进行解析,并提取出配置文件中描述的一对一的映射关系交给JAVA类文件新增及更新模块载入系统所在内存中,待执行模块执行程序时在系统所在内存中对关系映射表进行查询。JAVA类文件新增及更新单元24在所述线程监控单元21监控到所述文件夹中有设定种类的新的JAVA类文件导入时,提取所述新的JAVA类文件,存储到所述业务系统所在的内存中。对于JAVA类的业务系统而言,更新到所述业务系统所在的内存中具体为:查找具有设定名称的类或所述类的接口的二进制表示,构造供JAVA虚拟机的执行引擎引用和解释执行的与所述类或类的接口对应的内存结构。JAVA类文件新增及更新单元24实现方式为:首先通过线程监控单元21发现的最新监控新增文件的配置文件的描述,交给配置模板设置单元23获取相应的路径,并交回线程监控单元21发现该路径下面增加和更新的相应的JAVA类文件,使用JAVA虚拟机中的动态类加载机制对新增及更新的JAVA类文件进行加载。JAVA语言具有一个重要特性——动态类加载,它使JAVA程序可以在运行的过程中安装程序组件。JAVA的动态加载具有惰性加载、用户自定义加载策略以及动态命名空间的特征。动态加载是JAVA语言平台的一种非常重要的底层实现机制。在标准的实现中,JAVA编译器为每个JAVA类生成一个JAVA类文件,这种文件采用JAVA虚拟机定义的JAVA类文件格式保存,并由JAVA虚拟机加载并解释执行。在JAVA平台中,所有类都是由类加载器加载的。类加载器的实现可参见前述本发明方法中的相关描述,这里不再赘述。JAVA类文件新增及更新单元24利用新增功能的实现将新的业务文件加载至内存,并不断读取配置文件中的内容,将新旧文件的信息存入一个hash表中,键为旧文件,值为新文件。用户在开发程序的时候使用为其提供的代码进行类的初始化和方法的调用,每次初始化一个类时,便会在hash表中寻找键值对。如果初始化的类有更新类,则初始化更新类;否则使用原有旧业务功能类。JAVA类文件新增及更新单元24中包括有新增及更新文件注册加载模块33。执行单元25接收到用户的业务请求后,业务系统获取系统的配置文件并自动进行解析,根据配置文件调用业务系统所在内存中相应的JAVA类文件,在业务系统的执行环境下,JAVA类文件按其自身的逻辑被执行,将JAVA类文件的执行结果提供至用户,使用户获得业务支持;其中,被执行的JAVA类文件包括新增业务或/和更新业务的JAVA类文件。执行单元25从配置模板设置单元23获取已载入内存的更新映射表,并从JAVA类文件新增及更新单元24中获取已载入内存的相应JAVA类文件,当系统接到用户的请求后,如果请求访问的是新增的业务逻辑,则直接访问已经加载到内存的新增JAVA类文件,如果请求访问的不是新增的业务逻辑,则执行单元25先进入业务系统所在内存中的更新映射表进行查询,如果更新映射表中不存在需要访问类的映射关系则直接执行该类的业务逻辑并将执行结果返回给用户,如果更新映射表中存在需要访问的类的映射关系,则通过该映射关系执行更新后的JAVA类文件中的业务逻辑,并将执行结果返回给用户。在JAVA虚拟机规范中,加载和连接被定义为两个相互递归的过程。加载是指JAVA虚拟机根据指定的类名或接口名查找相应的JAVA类文件,并将JAVA类文件装载到运行环境中的过程。连接指JAVA虚拟机对JAVA类文件进行验证和解析符号引用的过程。JAVA虚拟机的动态加载是通过JAVA系统类java.lang.ClassLoader及其子类实现的。ClassLoader类是一个抽象类,其实例或其子类的实例被称为类加载器。当指定了一个类名后,类加载器会寻找相对应的JAVA类文件并将其加载到JAVA虚拟机环境中,同时为该类创建一个对应的类对象。一般情况下,JAVA虚拟机从本地文件系统中加载JAVA类文件,JAVA虚拟机也允许应用程序通过实现ClassLoader的子类从网络加载JAVA类文件。执行单元25可通过JAVA虚拟机的连接过程而实现,从而实现对JAVA类文件的解析执行,为用户提供新增或更新的业务,提供了相应的业务支持。执行单元25中还包括有配置文件解析模块31。
图3为本发明实施例的业务系统中业务动态加载系统中各单元核心模块逻辑结构示意图,如图3所示,本发明实施例的业务系统中业务动态加载系统的核心模块包括配置文件监控模块30、配置文件解析模块31、新增及更新的JAVA类文件监控模块32以及新增及更新文件注册加载模块33,其中,业务动态加载系统包含四个包,每个包划分为一个模块,各个包的成分包括:
common包:包含了其它模块用到的公共类,比如常量数据声明类、封装插件类、业务配置改变时的通知接口实现类等。
monitor包:包含了与监控线程相关的类,比如监控线程类、监控器类等。
parse包:包含了解析updatedes.xml文件用到的相关类,以及初始化及反射调用某个对象的方法的相关类。
register包:包含了与注册相关的类,即如果能正常创建实例对象,则将该文件封装为插件类型。最后将该文件封装成可用插件类型,更新已有文件集合。
以下详细说明上述各模块是如何实现的。
图4为本发明实施例的业务系统中业务动态加载系统中配置文件监控模块的实现结构示意图,如图4所示,StartDaemon类为系统入口,触发监视目录程序的执行。FileMonitor类负责不断的检测监视目录是否发生改变,并唤醒对新增业务和更新业务的发现和注册的操作。Notifier类负责从监视目录中获取新增业务文件和更新业务文件,进行合法性检验并将文件路径转换为类名,并调用注册模块。图5为本发明实施例的业务系统中业务动态加载系统中新增及更新的JAVA类文件监控模块的实现结构示意图,如图5所示,ClassObjectInterface接口负责加载类的接口,由register包中ClassObjectFactory类实现。ConfigWrapper类负责读取配置文件,从配置文件中获取监控目录。Records类负责保存新增业务和更新业务的发现记录。PlugIn类负责保存新增业务和更新业务的相关信息。AvailPlugIn类负责保存合法的新增业务和更新业务的相关信息。FilePool类负责发现新增业务和更新业务,并保存其文件信息和合法业务文件的信息,更新内存中新增业务和更新业务的列表。图6为本发明实施例的业务系统中业务动态加载系统中新增及更新文件注册加载模块的实现结构示意图,如图6所示,ClassObjectFactory类实现common包中的ClassObjectInterface接口,加载新增业务文件和更新业务文件。register类负责提取内存中新增业务和更新业务,并调用ClassObjectFactory类对新增业务文件和更新业务文件进行注册加载。图7为本发明实施例的业务系统中业务动态加载系统中配置文件解析模块的实现结构示意图,如图7所示,ClassSet类负责存储被更新业务的列表和新旧业务更新的映射表。ParseDescriptionInterface接口负责获取被更新业务的列表和新旧业务更新的映射表的接口。ParseDescription类实现ParseDescriptionInterface接口,负责获取被更新业务的列表和新旧业务更新的映射列表。ParseResult类负责解析更新业务功能的配置文件,获取新旧业务更新的配置信息,并将其信息存储到ClassSet类中。Init类提供为程序员开发使用的对象初始化的方法和方法调用的方法,程序员通过使用这些方法对对象进行初始化和方法调用可通过配置文件实现新旧业务的自动切换。
本发明业务动态加载系统就是为了实现不影响用户对现有业务的使用的前提下对新业务进行动态的加载以及对升级更新业务进行实时替换的系统,其主要功能包括:
实现系统集成:业务动态加载系统包含一个入口供业务系统调用,能够被任何业务系统调用执行以使得该系统能够正常运行在服务器上,从而可以通过该系统发现新的业务或发现更新过的业务。
向运行的业务系统中添加新的业务:在原有业务平台上添加新的业务,可以采用插件的实现方法,发现的每个新业务都作为一个新的插件来使用,通过对插件的发现,合法性检查,注册添加后,可以对新业务进行调用。
对插件的发现:业务动态加载系统能够检测到指定的新业务所在目录,对新业务所在目录中的所有JAVA类文件进行扫描,主动发现业务系统中新添加的业务,并提取出所有JAVA类文件的文件名,将所有文件的文件名保存在一张列表里,并输出对新插件的发现记录。对新业务进行合法性检查:系统对列表中的新插件进行合法性检查,检查扫描列表中的文件名是否为合法的JAVA类文件,如果不是则不进行加载操作,避免出现无法进行动态加载的文件加入到列表中而在对新业务注册添加时出现加载错误。
新业务注册添加:业务动态加载系统对通过合法性检查的JAVA类文件进行注册添加,通过JAVA的反射机制及类加载机制,从列表中将所有的JAVA类文件名取出,并查找到相应的文件目录,启动类加载器,对列表中的JAVA类文件逐一加载,并输出对文件的注册信息。
在运行的业务系统中更新业务:在原有业务平台上更新业务,也可以采用插件的实现方法,发现的每个经过更新的业务都作为一个新的插件来使用,通过对插件的发现,合法性检查,注册添加后,通过与旧业务对比与旧业务进行切换,对旧业务反注册,使新业务上线,旧业务下线。
更新业务的插件发现:业务动态加载系统能够检测到指定的存放更新业务所在的目录,对更新业务所在目录中的所有JAVA类文件进行扫描,通过描述文件中配置的新旧业务文件的映射主动发现更新后的文件,并提取出所有更新后的JAVA类文件的文件名,并将所有更新后的文件的文件名保存在一张列表里,并输出对新插件的发现记录。
对更新业务的合法性检查:系统对列表中的插件进行合法性检查,扫描列表中的文件名是否为合法的JAVA类文件,如果不是则不进行加载操作,避免出现无法进行动态加载的文件加入到列表中而在对新业务注册添加时出现加载错误。
新旧业务的替换:业务动态加载系统对通过合法性检查的JAVA类文件进行注册添加,通过JAVA的反射机制及类加载机制,从列表中将所有的JAVA类文件名取出,并查找到相应的文件目录,启动类加载器,对列表中的JAVA类文件逐一加载,并输出对文件的注册信息,新业务注册加载完毕后,若有新的访问者访问业务则直接转入到更新后的业务中执行,已经连接到旧业务的将旧业务执行完毕,直到旧业务已经无人使用时对旧业务进行反注册,即将旧业务废除,使旧业务下线。上述所述JAVA的反射机制是JAVA被视为动态语言的关键,它允许程序于执行期取得任何已知名称的类的内部信息,包括包名、参数、超类、执行接口、内部类、外部类、域名、构造器、方法及修饰符,并可于执行期生成实例、变更域的内容或唤起方法。根据JAVA的反射机制可以在执行过程中决定某个对象所属的类,取得类的修饰符、域名、方法、构造器和超类的相关信息,找出接口中的约束和方法声明,为一个执行期才得知名称的类产生对象,以及唤起执行期才能获得的对象的方法。
本发明业务动态加载系统中,在新业务的注册添加以及新旧业务的替换中都使用到了JAVA的反射机制,在新业务的注册添加过程中通过JAVA的反射机制在加载过程中获取类的包名及其类名并将其存储在业务系统所在的内存中,在新旧业务的替换中,系统通过解析配置文件updates.xml,将该配置文件中被更新的类以及更新的类的类名映射关系载入业务系统所在内存中,在新旧业务进行替换时从内存中取出映射关系中存储的新业务的类名并获取该类名对应类的构造器,用获取的构造器以及构造器中使用的参数及参数类型动态地初始化类的对象,从而实现了在运行期中旧类和新类之间的切换,并通过在运行期中获取的类的对象及类中的方法名和方法中使用的参数及参数类型来动态调用某个对象中的方法,从而实现了在运行期对某个对象中方法的动态调用,从而实现了业务之间的切换,即新旧业务之间的替换。
本发明业务动态加载系统中,JAVA类文件生成单元22以及执行单元25是现有的处理单元,其中,执行单元25是JAVA应用系统的基本功能单元;JAVA类文件生成单元22由业务维护人员根据业务需要来生成,并不是本发明业务动态加载系统改进所涉及的。
以下简单介绍本发明业务动态加载系统是如何被用户使用的,具体是通过向用户提供接口来实现的,以支持用户的业务动态加载。
系统为用户提供了一个名为Init的类,该类有三个方法,分别为:
1.public Object newObject(String classname);
2.public Object newObject(String classname,Object[]Obpara,Class[]Clpara);
3.public Object InvokeMethod(String methodName,Object obj,Object[]Obpara,Class[]Clpara)。
第一个方法的作用是通过无参数的构造器初始化一个类对象,第二个方法的作用是初始化一个带参数构造器类的对象,第三个方法的作用是调用某个对象的类方法。系统在启动后会不断的检测解析updatedes.xml配置文件,并把进行过更新配置的所有旧功能类保存在内存的一个列表unloadList里,把所有新旧类的映射关系保存在内存的一个映射表reLoadTable里,在用户通过前两个方法来初始化一个对象时会首先去判断在unloadList里是否存在要初始化的类,如果unloadList里没有该类则直接对该类进行初始化,如果unloadList里存在该类,则从reLoadTable里获取对应该类的新类,并对新类进行初始化。在使用上述的第三个方法进行方法调用时第二个参数Object obj会将初始化的类对象传递进来,以确定是调用旧类的某个方法还是新类的某个方法。前两个方法与第三个方法搭配使用,实现了由旧业务向新业务之间的切换。
本发明的业务系统为JAVA支持的业务系统,所述业务包括各种Web服务业务、电信服务业务、基于各种操作系统的服务业务等。
本发明的业务系统中业务动态加载系统是实现图1所示方法的系统,其各单元的功能及实现方式可参照图1所示方法加以理解。本领域技术人员应当理解,图2所示的各单元可通过编写程序而实现。
目前,对于用JAVA开发的已经上线运行的业务系统,如果对其增加新功能或者对原有功能进行更新,必须停止服务器的运行,并对新业务或更新业务进行重新编译或发布,这必然导致业务服务在一定时间内处于停滞状态,从而影响用户对系统的使用,并会造成一部分经济损失。本发明业务动态加载系统能够在不停机的情况下动态的对新增功能进行加载投入使用,动态的加载更新业务并进行旧业务向新业务的切换,将旧业务逐渐抛弃使新业务投入使用,这个过程不会影响已经在使用旧业务的用户,新来的用户请求也可以直接执行新的业务,该系统对于访问业务系统的用户来说是透明的,克服了对JAVA开发的业务系统新增业务或更新业务时必须停机的缺陷。本发明向用户提供业务支持的接口,用户可以根据自身业务的特点,自己设计新增业务或更新业务,所支持业务的灵活度相当大,并提供标准的配置文件,大大方便了用户新增及更新业务。
以上所述,仅为本发明的较佳实施例而已,并非用于限定本发明的保护范围。
高效检索全球专利

专利汇是专利免费检索,专利查询,专利分析-国家发明专利查询检索分析平台,是提供专利分析,专利查询,专利检索等数据服务功能的知识产权数据服务商。

我们的产品包含105个国家的1.26亿组数据,免费查、免费专利分析。

申请试用

分析报告

专利汇分析报告产品可以对行业情报数据进行梳理分析,涉及维度包括行业专利基本状况分析、地域分析、技术分析、发明人分析、申请人分析、专利权人分析、失效分析、核心专利分析、法律分析、研发重点分析、企业专利处境分析、技术处境分析、专利寿命分析、企业定位分析、引证分析等超过60个分析角度,系统通过AI智能系统对图表进行解读,只需1分钟,一键生成行业专利分析报告。

申请试用

QQ群二维码
意见反馈