一种基于沙箱的脚本更新方法及系统的制作方法

文档序号:6501909阅读:372来源:国知局
一种基于沙箱的脚本更新方法及系统的制作方法
【专利摘要】本发明公开一种基于沙箱的脚本更新方法及系统。所述方法包括:将加载脚本时生成的数据结构保存在沙箱中;在运行所述脚本的过程中,引用所述沙箱中的数据结构存放运行数据;判断所述脚本是否需要更新,得到判断结果;当所述判断结果表示所述脚本需要更新时,卸载虚拟机中的所述脚本;将更新后的脚本重新写入所述虚拟机;从所述沙箱中将所述运行数据引用为局部变量恢复使用。采用本发明的方法或系统,可以在不中断程序运行的同时实现对程序的更新,降低程序更新成本,进而提高用户体验。
【专利说明】一种基于沙箱的脚本更新方法及系统

【技术领域】
[0001] 本发明涉及程序开发领域,特别是涉及一种基于沙箱的脚本更新方法及系统。

【背景技术】
[0002] 随着信息化技术的发展,越来越多的用户将业务的运营通过计算机程序来实现。 当用户的需求发生变化时,对于程序的功能也需要进行相应的调整。这种对于程序功能的 调整可以称为对程序的更新。
[0003] 现有技术中,对程序进行更新的方法主要是先重新编译整个程序,经过长时间的 编译后再进行测试,确保测试无误后再发布更新的程序,整个过程中对用户的服务需要停 滞下来。
[0004] 但是,通常许多客户的业务都要求24小时不间断运行,对程序进行更新时,一旦 停止对用户提供服务,会给用户带来时间和经济上的损失。


【发明内容】

[0005] 本发明的目的是提供一种基于沙箱的脚本更新方法及系统,可以在不中断程序运 行的同时实现对程序的更新,降低程序更新成本,进而提高用户体验。
[0006] 为实现上述目的,本发明提供了如下方案:
[0007] -种基于沙箱的脚本更新方法,包括:
[0008] 将加载脚本时生成的数据结构保存在沙箱中;
[0009] 在运行所述脚本的过程中,引用所述沙箱中的数据结构存放运行数据;
[0010] 判断所述脚本是否需要更新,得到判断结果;
[0011] 当所述判断结果表示所述脚本需要更新时,卸载虚拟机中的所述脚本;
[0012] 将更新后的脚本重新写入所述虚拟机;
[0013] 从所述沙箱中将所述运行数据引用为局部变量恢复使用。
[0014] 可选的,所述判断所述脚本是否需要更新,包括:
[0015] 判断所述脚本是否出现逻辑故障;
[0016] 和/或,判断所述脚本是否具有新的版本。
[0017] 可选的,所述卸载虚拟机中的所述脚本,还包括:
[0018] 通过脚本管理器将所述虚拟机的所述脚本中的第一模块的模块名置空,所述第一 模块为需要更新的模块;
[0019] 相应的,所述将更新后的脚本重新写入所述虚拟机,还包括:
[0020] 在所述虚拟机的所述脚本中重新写入所述第一模块的模块名。
[0021] 可选的,还包括:
[0022] 在运行所述脚本之前,通过脚本管理器动态加载所述脚本;
[0023] 通过所述虚拟机链接及解释所述脚本;
[0024] 对所述虚拟机中的所述脚本的第一模块进行命名。
[0025] 可选的,所述脚本为java脚本,所述虚拟机为java虚拟机。
[0026] -种基于沙箱的脚本更新系统,包括:
[0027] 数据结构保存单元,用于将加载脚本时生成的数据结构保存在沙箱中;
[0028] 运行数据存放单元,用于在运行所述脚本的过程中,引用所述沙箱中的数据结构 存放运行数据;
[0029] 判断单元,用于判断所述脚本是否需要更新,得到判断结果;
[0030] 脚本卸载单元,用于当所述判断结果表示所述脚本需要更新时,卸载虚拟机中的 所述脚本;
[0031] 脚本写入单元,用于将更新后的脚本重新写入所述虚拟机;
[0032] 运行数据引用单元,用于从所述沙箱中将所述运行数据引用为局部变量恢复使 用。
[0033] 可选的,所述判断单元,包括:
[0034] 第一判断子单元,用于判断所述脚本是否出现逻辑故障;
[0035] 和/或,第二判断子单元,用于判断所述脚本是否具有新的版本。
[0036] 可选的,所述脚本卸载单元,包括:
[0037] 模块名置空子单元,用于通过脚本管理器将所述虚拟机的所述脚本中的第一模块 的模块名置空,所述第一模块为需要更新的模块;
[0038] 相应的,所述脚本写入单元,包括:
[0039] 模块名写入子单元,用于在所述虚拟机的所述脚本中重新写入所述第一模块的模 块名。
[0040] 可选的,还包括:
[0041] 脚本加载单元,用于在运行所述脚本之前,通过脚本管理器动态加载所述脚本;
[0042] 脚本链接及解释单元,用于通过所述虚拟机链接及解释所述脚本;
[0043] 命名单元,用于对所述虚拟机中的所述脚本的第一模块进行命名。
[0044] 可选的,所述脚本为java脚本,所述虚拟机为java虚拟机。
[0045] 根据本发明提供的具体实施例,本发明公开了以下技术效果:
[0046] 本发明的基于沙箱的脚本更新方法及系统,通过将运行所述脚本的过程中生成的 运行数据存放在沙箱中,当有脚本更新时,卸载虚拟机中的所述脚本,将更新后的脚本重新 写入所述虚拟机,再从所述沙箱中将所述运行数据引用为局部变量恢复使用,可以在不中 断程序运行的同时实现对程序的更新,降低程序更新成本,进而提高用户体验。

【专利附图】

【附图说明】
[0047] 为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例中所 需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施 例,对于本领域普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图 获得其他的附图。
[0048] 图1为本发明的基于沙箱的脚本更新方法实施例1的流程图;
[0049] 图2为本发明的基于沙箱的脚本更新方法实施例2的流程图;
[0050] 图3为本发明的基于沙箱的脚本更新方法实施例3的流程图;
[0051] 图4为本发明的基于沙箱的脚本更新系统实施例的结构图。

【具体实施方式】
[0052] 下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完 整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于 本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他 实施例,都属于本发明保护的范围。
[0053] 为使本发明的上述目的、特征和优点能够更加明显易懂,下面结合附图和具体实 施方式对本发明作进一步详细的说明。
[0054] 发明人经过研究发现,大多数程序(例如java程序)中嵌入有脚本管理器和虚拟 机。程序运行的过程,也是执行脚本的过程。一个脚本中可以具有多个模块,不同的模块可 以实现不同的功能。对于程序的更新,大多数情况是对于脚本中某一模块的更新。因此,本 发明的方案中,通过对于程序脚本的模块进行更新,进而实现对于程序的更新。
[0055] 图1为本发明的基于沙箱的脚本更新方法实施例1的流程图。如图1所示,所述 方法可以包括 :
[0056] 步骤101 :将加载脚本时生成的数据结构保存在沙箱中;
[0057] 数据结构可以是加载脚本时需要的数据结构,即实现该脚本所对应的一个特定的 业务流程中需要的数据,然后初始化并保存在沙箱中。
[0058] 沙箱(SandBox)在网络技术中是指一种按照安全策略限制程序行为的执行环境。
[0059] SUN公司在设计Java的时候,设计了一套精密的安全模型:即安全管理器 (Security Manager)将检查有权使用的所有系统资源。在默认的情况下,只允许那些无害 的操作,要想允许执行其他操作,代码需得到数字签名,用户必须得到数字认证。这种受限 制的执行环境称为沙箱。
[0060] 步骤102 :在运行所述脚本的过程中,引用所述沙箱中的数据结构存放运行数据;
[0061] 由于沙箱本身具有的属性可以形成一个隔离的运行环境,所以存放在沙箱中的运 行数据相当于存放在单独的存储空间。
[0062] 步骤103 :判断所述脚本是否需要更新,得到判断结果;
[0063] 脚本需要更新的情况主要有两种。一种情况是,在执行脚本的过程中,发生了逻辑 故障;另一种情况是,程序开发人员对于脚本进行了改动,编写出了具有新的版本的脚本。 [0064] 判断脚本是否需要更新,具体可以根据程序是否陷入死循环来判断是否发生逻辑 故障,根据是否接收到表示脚本具有新版本的指令来判断该脚本是否具有新的版本。
[0065] 步骤104 :当所述判断结果表示所述脚本需要更新时,卸载虚拟机中的所述脚本;
[0066] 虚拟机(Virtual Machine)指通过软件模拟的具有完整硬件系统功能的、运行在 个完全隔尚环境中的完整计算机系统。
[0067] 本发明实施例中,脚本可以在虚拟机的环境中执行。
[0068] 步骤105 :将更新后的脚本重新写入所述虚拟机;
[0069] 步骤106 :从所述沙箱中将所述运行数据引用为局部变量恢复使用。
[0070] 由于沙箱中存储有运行数据,当虚拟机中的所述脚本被卸载时,执行所述脚本所 生成的运行数据并没有被删除,还保存在沙箱中,所以可以从所述沙箱中将所述运行数据 引用为局部变量恢复使用。并且,还可以防止有效数据被重新初始化。
[0071] 本实施例中,通过将运行所述脚本的过程中生成的运行数据存放在沙箱中,当有 脚本更新时,卸载虚拟机中的所述脚本,将更新后的脚本重新写入所述虚拟机,再从所述沙 箱中将所述运行数据引用为局部变量恢复使用,可以在不中断程序运行的同时实现对程序 的更新,降低程序更新成本,进而提高用户体验。
[0072] 图2为本发明的基于沙箱的脚本更新方法实施例2的流程图。如图2所示,所述 方法可以包括 :
[0073] 步骤201 :将加载脚本时生成的数据结构保存在沙箱中;
[0074] 步骤202 :在运行所述脚本的过程中,引用所述沙箱中的数据结构存放运行数据;
[0075] 步骤203 :判断所述脚本是否需要更新,得到判断结果;
[0076] 步骤204 :当所述判断结果表示所述脚本需要更新时,通过脚本管理器将所述虚 拟机的所述脚本中的第一模块的模块名置空,所述第一模块为需要更新的模块;
[0077] 由于在更新程序时,虚拟机会阻止重新加载模块名相同的模块,所以在重新载入 前需要将已载入的第一模块删除,以此指示虚拟机目前该模块无效,这样虚拟机才会对修 改后的模块(相当于整个脚本中的一部分)进行重新链接和解释。
[0078] 步骤205 :将更新后的脚本重新写入所述虚拟机;
[0079] 需要说明的是,将更新后的脚本重新写入所述虚拟机的过程,可以包括先将原有 的脚本删除,再将新版本的脚本写入的过程;也可以只包括将新版本的脚本写入的过程。这 取决于步骤204中,是否执行了删除原有脚本的操作。
[0080] 步骤206 :在所述虚拟机的所述脚本中重新写入所述第一模块的模块名。
[0081] 步骤207 :从所述沙箱中将所述运行数据引用为局部变量恢复使用。
[0082] 图3为本发明的基于沙箱的脚本更新方法实施例3的流程图。如图3所示,所述 方法可以包括 :
[0083] 步骤301 :在运行所述脚本之前,通过脚本管理器动态加载所述脚本;
[0084] 步骤302 :通过所述虚拟机链接及解释所述脚本;
[0085] 步骤303 :对所述虚拟机中的所述脚本的第一模块进行命名。
[0086] 步骤304 :将加载脚本时生成的数据结构保存在沙箱中;
[0087] 步骤305 :在运行所述脚本的过程中,引用所述沙箱中的数据结构存放运行数据;
[0088] 步骤306 :判断所述脚本是否需要更新,得到判断结果;
[0089] 步骤307 :当所述判断结果表示所述脚本需要更新时,通过脚本管理器将所述虚 拟机的所述脚本中的第一模块的模块名置空,所述第一模块为需要更新的模块;
[0090] 由于在更新程序时,虚拟机会阻止重新加载模块名相同的模块,所以在重新载入 前需要将已载入的第一模块删除,以此指示虚拟机目前该模块无效,这样虚拟机才会对修 改后的模块(相当于整个脚本中的一部分)进行重新链接和解释。
[0091] 步骤308 :将更新后的脚本重新写入所述虚拟机;
[0092] 需要说明的是,将更新后的脚本重新写入所述虚拟机的过程,可以包括先将原有 的脚本删除,再将新版本的脚本写入的过程;也可以只包括将新版本的脚本写入的过程。这 取决于步骤204中,是否执行了删除原有脚本的操作。
[0093] 步骤309 :在所述虚拟机的所述脚本中重新写入所述第一模块的模块名。
[0094] 步骤310 :从所述沙箱中将所述运行数据引用为局部变量恢复使用。
[0095] 需要说明的是,本发明实施例中,所述脚本可以为java脚本,所述虚拟机可以为 java虚拟机。
[0096] 本发明还提供了一种基于沙箱的脚本更新系统。
[0097] 图4为本发明的基于沙箱的脚本更新系统实施例的结构图。如图4所示,所述系 统可以包括:
[0098] 数据结构保存单元401,用于将加载脚本时生成的数据结构保存在沙箱中;
[0099] 运行数据存放单元402,用于在运行所述脚本的过程中,引用所述沙箱中的数据结 构存放运行数据;
[0100] 判断单元403,用于判断所述脚本是否需要更新,得到判断结果;
[0101] 脚本卸载单元404,用于当所述判断结果表示所述脚本需要更新时,卸载虚拟机中 的所述脚本;
[0102] 脚本写入单元405,用于将更新后的脚本重新写入所述虚拟机;
[0103] 运行数据引用单元406,用于从所述沙箱中将所述运行数据引用为局部变量恢复 使用。
[0104] 本实施例中,通过将运行所述脚本的过程中生成的运行数据存放在沙箱中,当有 脚本更新时,卸载虚拟机中的所述脚本,将更新后的脚本重新写入所述虚拟机,再从所述沙 箱中将所述运行数据引用为局部变量恢复使用,可以在不中断程序运行的同时实现对程序 的更新,降低程序更新成本,进而提高用户体验。
[0105] 本发明的基于沙箱的脚本更新系统的实施例中,所述判断单元403,可以包括:
[0106] 第一判断子单元,用于判断所述脚本是否出现逻辑故障;
[0107] 和/或,第二判断子单元,用于判断所述脚本是否具有新的版本。
[0108] 所述脚本卸载单元404,可以包括:
[0109] 模块名置空子单元,用于通过脚本管理器将所述虚拟机的所述脚本中的第一模块 的模块名置空,所述第一模块为需要更新的模块;
[0110] 相应的,所述脚本写入单元405,可以包括:
[0111] 模块名写入子单元,用于在所述虚拟机的所述脚本中重新写入所述第一模块的模 块名。
[0112] 需要说明的是,所述系统还可以包括:
[0113] 脚本加载单元,用于在运行所述脚本之前,通过脚本管理器动态加载所述脚本;
[0114] 脚本链接及解释单元,用于通过所述虚拟机链接及解释所述脚本;
[0115] 命名单元,用于对所述虚拟机中的所述脚本的第一模块进行命名。
[0116] 上述系统中,所述脚本可以为java脚本,所述虚拟机可以为java虚拟机。
[0117] 本说明书中各个实施例采用递进的方式描述,每个实施例重点说明的都是与其他 实施例的不同之处,各个实施例之间相同相似部分互相参见即可。对于实施例公开的系统 而言,由于其与实施例公开的方法相对应,所以描述的比较简单,相关之处参见方法部分说 明即可。
[0118] 本文中应用了具体个例对本发明的原理及实施方式进行了阐述,以上实施例的说 明只是用于帮助理解本发明的方法及其核心思想;同时,对于本领域的一般技术人员,依据 本发明的思想,在【具体实施方式】及应用范围上均会有改变之处。综上所述,本说明书内容不 应理解为对本发明的限制。
【权利要求】
1. 一种基于沙箱的脚本更新方法,其特征在于,包括: 将加载脚本时生成的数据结构保存在沙箱中; 在运行所述脚本的过程中,引用所述沙箱中的数据结构存放运行数据; 判断所述脚本是否需要更新,得到判断结果; 当所述判断结果表示所述脚本需要更新时,卸载虚拟机中的所述脚本; 将更新后的脚本重新写入所述虚拟机; 从所述沙箱中将所述运行数据引用为局部变量恢复使用。
2. 根据权利要求1所述的方法,其特征在于,所述判断所述脚本是否需要更新,包括: 判断所述脚本是否出现逻辑故障; 和/或,判断所述脚本是否具有新的版本。
3. 根据权利要求1所述的方法,其特征在于,所述卸载虚拟机中的所述脚本,还包括: 通过脚本管理器将所述虚拟机的所述脚本中的第一模块的模块名置空,所述第一模块 为需要更新的模块; 相应的,所述将更新后的脚本重新写入所述虚拟机,还包括: 在所述虚拟机的所述脚本中重新写入所述第一模块的模块名。
4. 根据权利要求1-3任一项所述的方法,其特征在于,还包括: 在运行所述脚本之前,通过脚本管理器动态加载所述脚本; 通过所述虚拟机链接及解释所述脚本; 对所述虚拟机中的所述脚本的第一模块进行命名。
5. 根据权利要求1-3任一项所述的方法,其特征在于,所述脚本为java脚本,所述虚拟 机为java虚拟机。
6. -种基于沙箱的脚本更新系统,其特征在于,包括: 数据结构保存单元,用于将加载脚本时生成的数据结构保存在沙箱中; 运行数据存放单元,用于在运行所述脚本的过程中,引用所述沙箱中的数据结构存放 运行数据; 判断单元,用于判断所述脚本是否需要更新,得到判断结果; 脚本卸载单元,用于当所述判断结果表示所述脚本需要更新时,卸载虚拟机中的所述 脚本; 脚本写入单元,用于将更新后的脚本重新写入所述虚拟机; 运行数据引用单元,用于从所述沙箱中将所述运行数据引用为局部变量恢复使用。
7. 根据权利要求6所述的系统,其特征在于,所述判断单元,包括: 第一判断子单元,用于判断所述脚本是否出现逻辑故障; 和/或,第二判断子单元,用于判断所述脚本是否具有新的版本。
8. 根据权利要求6所述的系统,其特征在于,所述脚本卸载单元,包括: 模块名置空子单元,用于通过脚本管理器将所述虚拟机的所述脚本中的第一模块的模 块名置空,所述第一模块为需要更新的模块; 相应的,所述脚本写入单元,包括: 模块名写入子单元,用于在所述虚拟机的所述脚本中重新写入所述第一模块的模块 名。
9. 根据权利要求6-8任一项所述的系统,其特征在于,还包括: 脚本加载单元,用于在运行所述脚本之前,通过脚本管理器动态加载所述脚本; 脚本链接及解释单元,用于通过所述虚拟机链接及解释所述脚本; 命名单元,用于对所述虚拟机中的所述脚本的第一模块进行命名。
10. 根据权利6-8任一项所述的系统,其特征在于,所述脚本为java脚本,所述虚拟机 为java虚拟机。
【文档编号】G06F9/455GK104111843SQ201310135064
【公开日】2014年10月22日 申请日期:2013年4月17日 优先权日:2013年4月17日
【发明者】郭铁志, 张宝玉, 马向晖 申请人:苏州墨提斯信息科技有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1