程序自动更新方法及更新程序生成装置
【技术领域】
本发明涉及分布式系统中的信息传输领域,特别涉及一种分布式系统中客户端自动更新方案。
【背景技术】
分布式系统是支持分布式处理的系统,是在有通讯网络互联的多处理体系结构上执行任务的系统。对于部署在网络上的分布式软件系统,通常分为客户端、服务端、数据库三层,业务数据一般存储在数据库中,客户端在需要读取业务数据时,需要和服务端进行通信,服务端再和数据库通讯,从中获取业务数据后,再进行若干处理,返回给客户端。
在Java领域中经常采用的C/S(Client/Server)结构,也即客户机和服务器结构就是一种常见、大量被使用的分布式系统,通过C/S结构可以充分利用两端硬件环境的优势,将任务合理分配到客户端和服务器端来实现,有效降低了系统的通讯开销。但是,在实际应用中,当客户端应用程序有新的版本或者组件需要更新时,通常有两种方式:第一,用户手动从服务器端下载新版本的客户端应用程序并更新;第二,提供一个更新程序,所述更新程序伴随用户的操作系统或者客户端应用程序启动,不断检测服务器端是否有新版本的客户端主程序,在有新版本的客户端主程序时进行下载并更新。
而在实际使用中发现,如果采用第一种方式,也即让用户手动更新的方案,用户的使用体验较差。如果采用第二种方式,由于所述更新程序与客户端主程序分别是两个不同的程序,也就是说在运行时是两个独立的进程,那么会有两个缺点:一方面,所述更新程序有时自身也需要更新,当所述更新程序自身需要更新时,因为所述更新程序自身处于运行态,显然它无法对自身进行更新;另一方面,有时更新程序在更新所述客户端主程序时,需要获知客户端主程序的一些即时运行信息或者需要利用客户端主程序正在占用的类库资源,但是由于它们分属于两个独立的进程,故而进行数据交互和共享是比较困难的。
虽然现有技术也有一种方案,利用更新程序来对客户端主程序更新的同时,也可以利用客户端主程序对所述更新程序进行更新,也就是说,将客户端主程序作为所述更新程序的更新程序,两者可以分别对对方进行更新。但是这种方案虽然解决了上述第一方面的缺点,但是却提高了客户端主程序的复杂度。对于第二方面的缺点,很多现有方案中采用更新程序更新时将当前客户端主程序关闭的方式来获得相应类库资源的使用权,牺牲了用户的使用体验。
因此,有必要提出一种新的技术方案来解决上述缺点。
【发明内容】
本部分的目的在于概述本发明的实施例的一些方面以及简要介绍一些较佳实施例。在本部分以及本申请的说明书摘要和发明名称中可能会做些简化或省略以避免使本部分、说明书摘要和发明名称的目的模糊,而这种简化或省略不能用于限制本发明的范围。
本发明的一个目的在于提供一种程序自动更新方法。
本发明的另一目的在于提供一种更新程序生成装置。
为了达到本发明的目的,本发明提供一种程序自动更新方法,所述方法包括:在主程序中预设更新生成程序和更新类库;所述更新生成程序检测是否存在更新文件,如果是,则下载所述更新文件;所述更新生成程序利用所述更新文件和更新类库生成更新程序;和利用所述更新程序更新所述主程序。
进一步地,所述更新类库包括替换类库、删除类库和修改类库。
进一步地,所述更新生成程序利用所述更新文件和更新类库生成更新程序包括:所述更新生成程序利用所述更新文件确定更新步骤;所述更新生成程序根据所述更新步骤结合相应更新类库生成更新类;所述更新生成程序编译所述更新类以生成更新程序,
其中更新步骤包括若干更新操作,所述更新操作包括替换主程序文件、删除主程序文件和修改主程序文件。
进一步地,所述利用所述更新程序更新所述主程序包括:所述更新程序按照所述更新步骤替换、删除和修改所述主程序的相应文件。
进一步地,所述程序、主程序、更新生成程序、更新类库和更新程序是由java编程语言实现的。
根据本发明的另一方面,本发明同时提供一种更新程序生成装置,生成用于更新主程序模块的更新程序,所述装置包括:更新类库模块,存储生成更新程序所需类库;更新文件检测模块,检测是否存在主程序的更新文件;更新文件下载模块,当存在所述更新文件时下载所述更新文件;更新步骤确定模块,根据所述更新文件确定更新步骤;更新类生成模块,根据更新步骤结合所述更新类库模块内的相应类库生成更新类;和更新类编译模块,编译所述更新类以生成更新程序。
进一步地,所述更新类库模块包括替换类库、删除类库和修改类库。
进一步地,所述更新类生成模块,根据更新步骤中的替换更新操作、删除更新操作和修改更新操作选择相应的替换类库、删除类库和修改类库作为所述更新类的一部分。
进一步地,所述更新程序生成装置集成于所述主程序模块中。
进一步地,所述更新程序生成装置由java编程语言实现。
与现有技术相比,所述更新程序作为主程序的一部分,而非独立的进程,易于与所述主程序之间交互数据和共享类库资源。同时所述更新程序是通过动态生成的更新类编译获得,故一方面,所述更新程序可以实现“自我更新”;另一方面,所述更新类采用java类而不是shell或者bat,故所述更新程序可以实现跨平台使用。
【附图说明】
为了更清楚地说明本发明实施例的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。
图1为本发明的一个实施例中的程序自动更新方法的方法流程图;和
图2为本发明的一个实施例中的更新程序生成装置的结构示意图。
【具体实施方式】
为使本发明的上述目的、特征和优点能够更加明显易懂,下面结合附图和具体实施方式对本发明作进一步详细的说明。
本发明中的程序自动更新方法及更新程序生成装置可以通过软件、硬件或者两者的组合实现成为一个模块、一个系统或者一个系统的一部分。所述程序自动更新方法及更新程序生成装置中的更新程序是通过根据更新文件动态生成的更新类编译获得的,并且集成于主程序中。为了便于描述本发明,下文将利用java语言作为本发明的实施例中所采用的语言来描述和展示本发明的各个方面,但是本领域的技术人员应当了解,本发明还可以通过其他面向对象的编程语言来实施。
请参考图1,其示出了本发明的一个实施例中的程序自动更新方法100的方法流程图。在本实施例中,主程序可以是客户端应用程序,更新程序用于更新所述主程序,更新生成程序用来生成所述更新程序。具体地讲,所述程序更新方法100包括:
步骤102,在主程序中预设更新生成程序和更新类库;
由于更新主程序时,主要涉及如下几种操作:替换主程序中原有的一些文件、删除主程序中原有的一些文件和修改主程序中原有的一些文件。比如,主程序中的一些类库和预设数据需要替换为较新的版本;主程序中的一些数据和功能代码在新版本中不需要了,需要删除;主程序新增加了功能或者改进了功能,需要进行修改。更新程序需要按照一定的更新步骤对所述主程序更新,在此过程中,可能还需要获知主程序的一些当前运行信息和占用主程序正在使用的类库资源。并且在进行较大或者较复杂的更新时,所述更新程序自身也需要更新以改变原有的更新步骤。为了便于获得主程序的一些当前运行信息和占用主程序正在使用的类库资源。在本实施例中,并不直接单独提供更新程序,而是在主程序中预设更新生成程序和更新类库,将与更新相关的程序作为主程序的一部分,这样与更新相关的程序随着主程序一起运行,并且在运行时与主程序相比不是两个独立的进程,可以较为容易地获知所述主程序的当前运行信息和占用主程序正在使用的类库资源。其中,所述更新生成程序用于动态生成更新程序,所述更新类库中包含了一些生成更新程序所必需的类库,比如实现替换操作的类库或者说函数、实现删除操作的类库或者说函数和实现修改操作的类库或者说函数等。
步骤104,所述更新生成程序检测是否存在更新文件,如果是,则下载所述更新文件;
所述更新生成程序检测是否存在更新文件,具体地讲,所述更新生成程序可以从服务器端或者其他预设机制检测是否存在主程序的更新文件,比如可以是每隔预定时间间隔检测一次,每次主程序启动时检测等等。当检测到有更新文件时,下载所述更新文件。
步骤106,所述更新生成程序利用所述更新文件和更新类库生成更新程序;
所述更新生成程序根据所述更新文件的内容,分析并确定此次更新所需要的更新步骤,比如先删除某些文件、然后替换某些文件,并修改相应关联的文件的内容等等,视具体的实施例而定,可能还包括其他步骤。在一些实施例中,所述更新文件中包含有关于更新步骤的相关文件,所述更新生成程序根据所述相关文件来确定更新步骤;在另外一些实施例中,所述更新文件中并不包含有关于更新步骤的相关文件,此时所述更新生成程序分析所述更新文件内的实际内容来确定所述更新步骤。显然,在不同的实施例中,对于不同的更新文件,所述更新步骤可以不同。当所述更新步骤确定后,所述更新生成程序根据所述更新步骤结合相应更新类库生成更新类,比如所述更新步骤包括有替换主程序文件的更新操作,那么就将所述更新类库中的替换类或者替换函数作为更新类的一部分。最后所述更新生成程序编译所述更新类以生成更新程序。在一个实施例中,由于所述更新生成程序等由java语言编写,所述更新类可以是Update.java,然后编译后所得的更新程序Update.class。
步骤108,利用所述更新程序更新所述主程序。
由于具体的更新过程为现有技术,本文不再累述。
综上所述,所述更新类是根据对更新文件的分析而动态生成的,故生成的更新程序可能每次都不同,可以认为是所述更新程序能够实现自我更新。同时所述更新程序并不是独立提供的,而是由预设在主程序中的更新生成程序和更新类库生成的,其运行时也属于主程序的进程中,故需要获得主程序的相关运行信息或者占用主程序的某些类库资源时比较容易地实现。
同时本发明还提供了一种更新程序生成装置,生成用于更新主程序模块的更新程序,所述更新程序生成装置集成于所述主程序模块。
请参考图2,其示出了本发明的一个实施例中的更新程序生成装置200的结构示意图。所述更新程序生成装置200包括更新类库模块201、更新文件检测模块202、更新文件下载模块203、更新步骤确定模块204、更新类生成模块205和更新类编译模块206。
所述更新类库模块201存储生成更新程序所需类库。在一个实施例中,所述更新类库模块201内包括替换类库、删除类库和修改类库。当然视实施例不同,所述更新类库模块201可能还包括其他类库或者函数,以方便所述更新类生成模块205使用。
所述更新文件检测模块202检测是否存在主程序的更新文件。在一个实施例中,所述更新文件检测模块202每隔预定时间间隔从服务器端或者其他预设地址检测是否存在主程序的更新文件。在另一个实施例中,所述更新文件检测模块202在每次启动运行时,从服务器端或者其他预设地址检测是否存在主程序的更新文件。
所述更新文件下载模块203在所述更新文件检测模块202检测到存在更新文件时下载所述更新文件。在一个实施例中,所述更新文件下载模块203可以利用P2P下载技术从服务器端或者其他客户端下载所述更新文件。
所述更新步骤确定模块204根据所述更新文件确定更新步骤。在一个实施例中,所述更新步骤确定模块204根据所述更新文件的内容,分析此次更新所需要的更新步骤,比如先删除某些文件、然后替换某些文件,并修改相应关联的文件的内容等等,视具体的实施例而定,可能还包括其他步骤。
所述更新类生成模块205根据更新步骤结合所述更新类库模块内的相应类库生成更新类。在一个实施例中,所述更新类生成模块205根据更新步骤中的替换更新操作、删除更新操作和修改更新操作选择相应的替换类库、删除类库和修改类库作为所述更新类的一部分。
所述更新类编译模块206编译所述更新类以生成更新程序。在一个实施例中,所述更新类可以是Update.java,然后编译后所得的更新程序Update.class。
所述更新程序也可以形成一个更新模块,然后利用下载的所述更新文件对所述主程序模块完成自动更新,由于所述更新程序是动态生成的,故可以不断保持“最新”,也即实现了自我更新。
上述说明已经充分揭露了本发明的具体实施方式。需要指出的是,熟悉该领域的技术人员对本发明的具体实施方式所做的任何改动均不脱离本发明的权利要求书的范围。相应地,本发明的权利要求的范围也并不仅仅局限于所述具体实施方式。