基于paas平台的应用部署方法和装置制造方法

文档序号:6543786阅读:128来源:国知局
基于paas平台的应用部署方法和装置制造方法
【专利摘要】本发明公开了一种基于PAAS平台的应用部署方法和装置,该方法包括:对待部署的应用的二进制文件的常量池进行扫描,从所述常量池中确定出该二进制文件所引用的通用类的名称;对于每个确定出的通用类的名称,在替换列表中查找与该通用类的名称相对应的代理类的名称,并使用查找到的代理类的名称替换所述常量池中该通用类的名称;其中,代理类中封装有调用与其对应的通用类相对应的PAAS平台中专用类的语句;所述替换列表中相对应的通用类和代理类的名称的二进制长度相等;根据替换了所述常量池中类的名称的二进制文件,部署所述应用在所述PAAS平台中运行。应用本发明,可以减少底层代码的改动量、降低BUG出现风险。
【专利说明】基于PAAS平台的应用部署方法和装置
【技术领域】
[0001]本发明涉及互联网领域,尤其涉及一种基于PAAS平台的应用部署方法和装置。
【背景技术】
[0002]随着云计算平台技术的发展,将服务器平台或者开发环境作为服务提供给用户的PAAS (Platform as a Service,平台即服务)服务模式得到广泛应用。用户在将应用成功部署至PAAS平台中之后,即可以使用PAAS平台中的云计算应用引擎服务,比如,SAE (SinaApp Engine,新浪应用引擎)服务。
[0003]具体地,用户可以将待部署的应用的java 二进制文件的压缩包上传至PAAS平台中的服务器;该服务器则将上传的压缩包解压到指定目录下,并将解压后得到的二进制文件装载至内存中。这样,该待部署的应用就可以在PAAS平台中使用其提供的云计算应用引擎服务。
[0004]目前,许多现有的应用主要是依赖JDK (Java Development’s Kit, Java开发工具包)来完成的。如果将现有的应用迁移到PAAS平台中进行部署运行,需要通过PAAS平台所提供专有的专用类(本文中也可以称为云计算应用引擎提供的类),才可以使用PAAS平台中的云计算应用引擎服务。然而,现有的应用主要是通过通用类来调用现有服务。因此,为了使现有的应用在部署至PAAS平台之后能够使用PAAS平台中的云计算应用引擎服务,往往需要修改该待部署的应用的底层的JDK代码,以使得该应用能够使用PAAS平台所提供的专用类。
[0005]而现有的应用的JDK代码一般是已经完成测试的应用代码。若将现有的应用的JDK代码针对PAAS平台所提供的专用类的引用进行通用类的引用代码修改,则可能会出现修改后的JDK代码在使用PAAS平台中的服务后无法实现的情况,甚至由于修改的代码出现一些未知的漏洞BUG。而要保证修改后的JDK代码能够在PAAS平台中通过专用类来使用云计算应用引擎服务,则需要针对JDK代码进行大量的人工代码改动及新的测试,这不仅会耗费大量的人力和物力,还可能会进一步引起其他新的问题,存在较大的BUG风险。
[0006]因此,有必要提供一种改动量少、且BUG风险低的应用迁移方法,使得现有应用在被部署至PAAS平台中后可以调用云计算应用引擎服务。

【发明内容】

[0007]本发明实施例提供了一种基于PAAS平台的应用部署方法和装置,用以减少底层代码的改动量、并降低BUG出现风险。
[0008]根据本发明的一个方面,提供了一种基于PAAS平台的应用部署方法,包括:
[0009]对待部署的应用的二进制文件的常量池进行扫描,从所述常量池中确定出该二进制文件所引用的通用类的名称;
[0010]对于每个确定出的通用类的名称,在替换列表中查找与该通用类的名称相对应的代理类的名称,并使用查找到的代理类的名称替换所述常量池中该通用类的名称;其中,代理类中封装有调用与其对应的通用类相对应的平台即服务PAAS平台中专用类的语句;所述替换列表中相对应的通用类和代理类的名称的二进制长度相等;
[0011]根据替换了所述常量池中类的名称的二进制文件,部署所述应用在所述PAAS平台中运行。
[0012]较佳地,所述根据替换了所述常量池中类的名称的二进制文件,部署所述应用在所述PAAS平台中运行,具体包括:
[0013]所述PAAS平台对所述应用,根据其替换了所述常量池中类的名称的二进制文件所引用的代理类的名称,调用相应的代理类,该代理类进而调用与其对应的通用类相对应的PAAS平台中的专用类。
[0014]较佳地,所述替换列表中的代理类的名称的第一字节段为特定长度的特定字符,其余字节段均与其对应的通用类的名称的相应字节段内容相同。
[0015]较佳地,所述特定长度为4位;以及
[0016]所述PAAS平台中的专用类具体为PAAS平台中的云计算应用引擎提供的类。
[0017]较佳地,所述通用类和代理类的名称的各字节段之间有相同的特定分隔符。
[0018]较佳地,在所述对待部署的应用的二进制文件的常量池进行扫描之前,还包括:
[0019]上传所述待部署的应用的二进制文件的压缩包到所述PAAS平台中的服务器;
[0020]所述服务器周期性将上传的压缩包解压到指定目录下;以及
[0021]所述对待部署的应用的二进制文件的常量池进行扫描,具体为:
[0022]对所述指定目录下存储的待部署的应用的二进制文件的常量池进行扫描。
[0023]根据本发明的另一个方面,还提供了一种基于PAAS平台的应用部署装置,包括:
[0024]扫描模块,用于对待部署的应用的二进制文件的常量池进行扫描,从所述常量池中确定出该二进制文件所引用的通用类的名称;
[0025]替换模块,用于对于所述扫描模块确定出的每个通用类的名称,在替换列表中查找与该通用类的名称相对应的代理类的名称,并使用查找到的代理类的名称替换所述常量池中该通用类的名称;其中,代理类中封装有调用与其对应的通用类相对应的PAAS平台中专用类的语句;所述替换列表中相对应的通用类和代理类的名称的二进制长度相等;
[0026]部署模块,用于根据所述替换模块替换了所述常量池中类的名称后得到的二进制文件,部署所述应用在所述PAAS平台中运行。
[0027]较佳地,所述部署模块具体用于对所述应用,根据其替换了所述常量池中类的名称的二进制文件所引用的代理类的名称,调用相应的代理类,该代理类进而调用与其对应的通用类相对应的PAAS平台中的专用类。
[0028]较佳地,所述替换列表中的代理类的名称的第一字节段为特定长度的特定字符,其余字节段均与其对应的通用类的名称的相应字节段内容相同。
[0029]较佳地,所述装置还包括:
[0030]预处理模块,用于周期性将上传到所述PAAS平台中的各待部署的应用的二进制文件的压缩包解压到指定目录下;以及
[0031]所述扫描模块具体用于对所述指定目录下存储的待部署的应用的二进制文件的常量池进行扫描。
[0032]本发明实施例的技术方案中,预先针对PAAS平台中的每个专用类,将该专用类封装成名称的二进制长度与通用类的名称的二进制长度相同的代理类并存储在替换列表中。对于待部署的应用,可以将替换列表中与确定出该待部署的应用的二进制文件所引用的通用类的名称相对应的代理类的名称,替换至该二进制文件中,并根据替换了常量池中类的名称后的二进制文件,部署该待部署的应用在PAAS平台中运行。这样,在将待部署的应用进行部署之前,无需对该应用的底层代码进行修改,在部署的过程中进行二进制长度相等的类的名称的替换,就可以实现该待部署的应用在运行时能够通过代理类调用PAAS平台中的云计算应用引擎服务的同时,大大减少了改动量,并降低了 BUG出现的风险。
【专利附图】

【附图说明】
[0033]图1为本发明实施例的基于PAAS平台的应用部署方法的流程示意图;
[0034]图2为本发明实施例的基于PAAS平台的应用部署装置的内部结构图。
【具体实施方式】
[0035]为使本发明的目的、技术方案及优点更加清楚明白,以下参照附图并举出优选实施例,对本发明进一步详细说明。然而,需要说明的是,说明书中列出的许多细节仅仅是为了使读者对本发明的一个或多个方面有一个透彻的理解,即便没有这些特定的细节也可以实现本发明的这些方面。
[0036]本申请使用的“模块”、“系统”等术语旨在包括与计算机相关的实体,例如但不限于硬件、固件、软硬件组合、软件或者执行中的软件。例如,模块可以是,但并不仅限于:处理器上运行的进程、处理器、对象、可执行程序、执行的线程、程序和/或计算机。举例来说,计算设备上运行的应用程序和此计算设备都可以是模块。一个或多个模块可以位于执行中的一个进程和/或线程内。
[0037]本发明的发明人考虑到,可以将现有的应用的java 二进制文件中所引用的通用类替换为PAAS平台所提供的专用类,从而使得部署应用在PAAS平台上运行时,可以通过PAAS平台所提供的专用类来使用PAAS平台中的服务。
[0038]然而,若将现有的应用的二进制文件中所引用的通用类替换为PAAS平台所提供的专用类,可能会出现修改后的JDK代码无法使用PAAS平台中的服务的情况,主要原因在于:将现有的应用的二进制文件中所引用的通用类主要存在于二进制文件的常量池中,而常量池通常为紧缩型结构,也就是说,常量池中内容的长度有严格的规范;而与现有的应用的二进制文件中所引用的通用类的名称相比,PAAS平台所提供的专用类的名称的长度发生了变化。例如,将引用通用类的字符串常量“ java/io/Fi IeOutputStrearn”替换成引用专用类的字符串常量“com/sina/sae/StorageFileOutputStream”,其二进制长度明显增加。这样,在编译替换后的专用类时,得到的常量池中的内容可能会因字符串常量的二进制长度变长而属于非法内容,导致虚拟机读取该字节码失败,最终使得修改后的JDK代码在PAAS平台中无法正常运行,甚至有可能会出现一些未知的BUG。
[0039]虽然,现有可以通过在将现有的应用的二进制文件中所引用的通用类替换为PAAS平台所提供的专用类之后,将引用该通用类的常量池内容的后续内容以及原始JDK代码的后续内容进行挨个移动来保证现有的应用的二进制文件中常量池中不出现非法内容,这不仅耗费大量的人力,且改动量非常大,增加BUG风险的出现概率。[0040]因此,本发明的发明人考虑到,为保证修改后的字符串常量长度跟原始字符串常量的长度一致,避免因长度变化导致BUG风险的出现概率的增加,可以针对PAAS平台中的每个专用类,将该专用类的基础上进一步封装成名称的二进制长度与通用类的名称的二进制长度相同的代理类;进一步地,通过将现有的应用的二进制文件中的通用类的名称替换为相应的代理类的名称,就可以通过代理类进一步调用相应的PAAS平台中的专用类。这样,通过代理类的名称的字节码替换,避免了现有的应用的修改后的二进制文件中常量池的字符串常量的二进制长度发生变化,在实现现有的应用成功被部署至PAAS平台中的同时,还大大减少了原始代码的改动量,进而降低BUG风险。
[0041]下面结合附图详细说明本发明的技术方案。
[0042]本发明实施例中,在将待部署的应用部署至PAAS平台的过程中,首先需要预先收集本领域中通用的类的名称作为本发明实施例的通用类的名称,继而针对PAAS平台中所专有的每个专用类,将该专用类封装成名称的二进制长度与收集的通用类的名称的二进制长度相同的代理类,并存储在代理类的名称与通用类的名称之间的替换列表中。其中,PAAS平台中所专有的每个专用类具体是指PAAS平台中的云计算应用引擎提供的类(比如,SAE提供的类);代理类的名称与通用类的名称具有一一对应的关系;而且,在PAAS平台中对代理类进行编译时,可以直接调用该代理类所封装的专用类。
[0043]实际应用中,通用类主要是依赖JDK来完成的,其名称可以包括多个字节段,各字节段之间有特定分隔符,例如“/”;且通用类的名称的第一字节段的内容一般采用特定字符“java”,该特定字符的特定长度为4位。因此,可以考虑使代理类的名称中的第一字节段的二进制长度与相应的通用类的名称中的第一字节段的特定字符的特定长度相等,且相应地,代理类的名称的各字节段之间的特定分隔符与通用类的各字节段之间的特定分隔符相同。例如,将第一字节段“java”、替换为“saex”;同时,代理类的名称中的其余字节段与其对应的通用类的名称的相应字节段内容相同。例如,若通用类分别为:“java/io/FileInputStream,,、“ java/io/FileOutputStream,,、“ java/net/Socket” 时,相应的代理类分别为:“saex/io/FileInputStream,,、“saex/io/FileOutputStream,,、“saex/net/Socket”。进而,在运行代理类“saex/io/FileOutputStream”时,可以直接调用PAAS平台中的专用类 “com/ sina/sae/StorageFileOutputStream,,。
[0044]这样,修改通用类的第一字节段的字节码,既可保证修改后的JDK代码与原始代码中的常量池内容的二进制长度相同,降低了 PAAS平台中的专用类的调用过程中出现BUG的风险,且改动量少。
[0045]基于上述代理类的名称与通用类的名称之间的替换列表,本发明实施例提供的一种基于PAAS平台的应用部署方法,具体流程,如图1所示,包括如下步骤:
[0046]SlOl:对待部署的应用的二进制文件的常量池进行扫描,从常量池中确定出该二进制文件所引用的通用类的名称。
[0047]具体地,可以在获取待部署的应用的java 二进制文件之后,对该二进制文件的常量池进行扫描,并从常量池中确定出该二进制文件所引用的所有通用类的名称。实际应用中,可以在对待部署的应用的二进制文件的常量池进行扫描之前,上传待部署的应用的二进制文件的压缩包到PAAS平台中的服务器;继而,服务器可以周期性地将上传的压缩包解压到指定目录下。这样,PAAS平台可以对指定目录下存储的待部署的应用的二进制文件的常量池进行扫描。
[0048]S102:对于每个确定出的通用类的名称,在替换列表中查找与该通用类的名称相对应的代理类的名称。
[0049]具体地,替换列表中预先存储有PAAS平台中代理类的名称与通用类的名称之间的替换对应关系,因此,对于每个由步骤SlOl确定出的通用类的名称,可以在依次从替换列表中查找出与该通用类的名称相对应的代理类的名称。其中,对于替换列表中的每个代理类,在PAAS平台中该代理类中封装有调用与该代理类对应的通用类相对应的PAAS平台中的专用类的语句;且替换列表中相对应的通用类和代理类的名称的二进制长度相等。更优地,替换列表中的云计算应用引擎提供的类的名称的第一字节段为特定长度的特定字符,其余字节段均与其对应的通用类的名称的相应字节段内容相同。实际应用中,对于未被收集的通用类,也可以添加至替换列表中,并将PAAS平台中云计算应用引擎提供的专用类中与该收集的通用类相对应的专用类封装后所形成的代理类添加至替换列表中相应位置。
[0050]S103:对于每个确定出的通用类的名称,使用查找到的与该通用类的名称相对应的代理类的名称替换常量池中该通用类的名称。
[0051]具体地,可以对于每个确定出的通用类的名称,将扫描出的常量池中所有涉及到该通用类的名称的字节码替换为从替换列表中查找到的、与该通用类的名称相对应的代理类的名称的字节码。例如,将确定出的通用类:“ java/io/FileOutputStream替换为代理类 “saex/io/FileOutputStream,,、“ java/io/FilelnputStream” 替换为 “saex/io/FileInputStream”、“ java/net/Socket” 替换为 “saex/net/Socket”。这样,在将每个确定出的通用类的名称,替换为相应的代理类的名称后,替换类的名称后的二进制文件的运行过程中,运行该二进制文件中替换后的代理类时,将可以调用该代理类所封装的云计算应用引擎提供的专用类;也就是说,待部署的应用可以通过PAAS平台中的云计算应用引擎提供的专用类使用PAAS平台中的服务。
[0052]S104:根据替换了常量池中类的名称的二进制文件,部署该待部署的应用在PAAS平台中运行。
[0053]具体地,可以根据已经完成常量池中代理类的名称的替换的二进制文件,将该待部署的应用部署在PAAS平台中运行。由于替换列表中的代理类具体是由PAAS平台中所提供的专用类封装而成的,所以,PAAS平台对待部署的应用,根据其替换了常量池中类的名称的二进制文件所引用的代理类的名称,调用相应的代理类;该代理类进而调用与其对应的通用类相对应的PAAS平台中的专用类,即调用PAAS平台中的云计算应用引擎提供的类。这样,该待部署的应用部署至PAAS平台中后,可以通过PAAS平台中的专用类来使用PAAS平台中提供的服务。当然,实际应用中,在运行之前,还可以将替换常量池中类的名称后的二进制文件存储到PAAS平台中的内存中。
[0054]基于上述基于PAAS平台的应用部署方法,本发明实施例还提供了一种基于PAAS平台的应用部署装置,如图2所示,具体包括:扫描模块201、替换模块202、部署模块203。
[0055]其中,扫描模块201用于对待部署的应用的二进制文件的常量池进行扫描,从常量池中确定出该二进制文件所引用的通用类的名称。
[0056]替换模块202用于对于扫描模块201确定出的每个通用类的名称,在替换列表中查找与该通用类的名称相对应的代理类的名称,并使用查找到的代理类的名称替换扫描出的常量池中该通用类的名称。其中,代理类中封装有调用与其对应的通用类相对应的PAAS平台中的专用类的语句;替换列表中相对应的通用类和代理类的名称的二进制长度相等。
[0057]作为一种更优的实施方式,为了减少底层代码的改动量,替换列表中的代理类的名称的第一字节段为特定长度的特定字符,其余字节段均与其对应的通用类的相应字节段内容相同。这样,在通用类的名称的替换过程中,修改第一字节段即可,改动量少、且不会引起字符串常量的长度的变化,降低了 BUG的出现风险。
[0058]部署模块203用于根据替换模块202替换了常量池中类的名称后得到的二进制文件,部署该待部署的应用在PAAS平台中运行。
[0059]具体地,部署模块203在PAAS平台中,对于待部署的应用,可以根据其替换了常量池中类的名称后的二进制文件所引用的代理类的名称,调用相应的代理类,且该代理类进而调用与其对应的通用类相对应的PMS平台中的专用类,即PAAS平台中的云计算应用引擎提供的类。
[0060]本发明实施例中,关于基于PAAS平台的应用部署装置中的各模块具体是如何进行待部署的应用的部署,可以参照上述流程的具体方法。
[0061]更优地,基于PAAS平台的应用部署装置还可以包括:预处理模块。预处理模块用于周期性将上传到PAAS平台中的各待部署的应用的二进制文件的压缩包解压到指定目录下。相应地,扫描模块201具体用于对指定目录下存储的待部署的应用的二进制文件的常量池进行扫描。
[0062]本发明实施例中,关于基于PAAS平台的应用部署装置中的各模块具体是如何进行待部署的应用的部署,可以参照上述流程的具体方法。
[0063]本发明的技术方案中,可以预先针对PAAS平台中的每个专用类,将该专用类封装成名称的二进制长度与通用类的名称的二进制长度相同的代理类并存储在替换列表中。进而,对于待部署的应用,可以将替换列表中与确定出该待部署的应用的二进制文件所引用的通用类的名称相对应的代理类的名称,替换至该二进制文件中,并根据替换类的名称后的二进制文件,部署该待部署的应用在PAAS平台中运行。这样,在将待部署的应用进行部署之前,无需对该应用的底层代码进行修改,在部署的过程中进行二进制长度相等的类的名称的替换,就可以实现该待部署的应用在运行时能够通过代理类调用PAAS平台中的云计算应用引擎服务的同时,大大减少了改动量,并降低了 BUG出现的风险。
[0064]本领域普通技术人员可以理解实现上述实施例方法中的全部或部分步骤是可以通过程序来指令相关的硬件来完成,该程序可以存储于一计算机可读取存储介质中,如:R0M/RAM、磁碟、光盘等。
[0065]以上所述仅是本发明的优选实施方式,应当指出,对于本【技术领域】的普通技术人员来说,在不脱离本发明原理的前提下,还可以作出若干改进和润饰,这些改进和润饰也应视为本发明的保护范围。
【权利要求】
1.一种基于PAAS平台的应用部署方法,其特征在于,包括: 对待部署的应用的二进制文件的常量池进行扫描,从所述常量池中确定出该二进制文件所引用的通用类的名称; 对于每个确定出的通用类的名称,在替换列表中查找与该通用类的名称相对应的代理类的名称,并使用查找到的代理类的名称替换所述常量池中该通用类的名称;其中,代理类中封装有调用与其对应的通用类相对应的平台即服务PAAS平台中专用类的语句;所述替换列表中相对应的通用类和代理类的名称的二进制长度相等; 根据替换了所述常量池中类的名称的二进制文件,部署所述应用在所述PAAS平台中运行。
2.如权利要求1所述的方法,其特征在于,所述根据替换了所述常量池中类的名称的二进制文件,部署所述应用在所述PAAS平台中运行,具体包括: 所述PAAS平台对所述应用,根据其替换了所述常量池中类的名称的二进制文件所引用的代理类的名称,调用相应的代理类,该代理类进而调用与其对应的通用类相对应的PAAS平台中的专用类。
3.如权利要求1所述的方法,其特征在于,所述替换列表中的代理类的名称的第一字节段为特定长度的特定字符,其余字节段均与其对应的通用类的名称的相应字节段内容相同。
4.如权利要求3所述的方法,其特征在于,所述特定长度为4位;以及 所述PAAS平台中的专用类具体为PAAS平台中的云计算应用引擎提供的类。
5.如权利要求4所述的方法,其特征在于,所述通用类和代理类的名称的各字节段之间有相同的特定分隔符。
6.如权利要求1-5任一所述的方法,其特征在于,在所述对待部署的应用的二进制文件的常量池进行扫描之前,还包括: 上传所述待部署的应用的二进制文件的压缩包到所述PAAS平台中的服务器; 所述服务器周期性将上传的压缩包解压到指定目录下;以及 所述对待部署的应用的二进制文件的常量池进行扫描,具体为: 对所述指定目录下存储的待部署的应用的二进制文件的常量池进行扫描。
7.一种基于PAAS平台的应用部署装置,其特征在于,包括: 扫描模块,用于对待部署的应用的二进制文件的常量池进行扫描,从所述常量池中确定出该二进制文件所引用的通用类的名称; 替换模块,用于对于所述扫描模块确定出的每个通用类的名称,在替换列表中查找与该通用类的名称相对应的代理类的名称,并使用查找到的代理类的名称替换所述常量池中该通用类的名称;其中,代理类中封装有调用与其对应的通用类相对应的PAAS平台中专用类的语句;所述替换列表中相对应的通用类和代理类的名称的二进制长度相等; 部署模块,用于根据所述替换模块替换了所述常量池中类的名称后得到的二进制文件,部署所述应用在所述PAAS平台中运行。
8.如权利要求7所述的装置,其特征在于, 所述部署模块具体用于对所述应用,根据其替换了所述常量池中类的名称的二进制文件所引用的代理类的名称,调用相应的代理类,该代理类进而调用与其对应的通用类相对应的PAAS平台中的专用类。
9.如权利要求7所述的装置,其特征在于,所述替换列表中的代理类的名称的第一字节段为特定长度的特定字符,其余字节段均与其对应的通用类的名称的相应字节段内容相同。
10.如权利要求8所述的装置,其特征在于,还包括: 预处理模块,用于周期性将上传到所述PAAS平台中的各待部署的应用的二进制文件的压缩包解压到指定目录下;以及 所述扫描模块具体用于对所述指定目录下存储的待部署的应用的二进制文件的常量池进行扫 描。
【文档编号】G06F9/44GK103942051SQ201410150666
【公开日】2014年7月23日 申请日期:2014年4月15日 优先权日:2014年4月15日
【发明者】王阳 申请人:新浪网技术(中国)有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1