CN110275706A - 程序发布和加载方法、装置、计算机系统及可读存储介质 - Google Patents
程序发布和加载方法、装置、计算机系统及可读存储介质 Download PDFInfo
- Publication number
- CN110275706A CN110275706A CN201910586779.2A CN201910586779A CN110275706A CN 110275706 A CN110275706 A CN 110275706A CN 201910586779 A CN201910586779 A CN 201910586779A CN 110275706 A CN110275706 A CN 110275706A
- Authority
- CN
- China
- Prior art keywords
- class
- program
- write
- programming language
- released
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
- 238000011068 loading method Methods 0.000 title claims abstract description 22
- 238000000034 method Methods 0.000 claims abstract description 46
- 239000003550 marker Substances 0.000 claims description 44
- 230000009466 transformation Effects 0.000 claims description 24
- 230000006870 function Effects 0.000 claims description 17
- 238000012800 visualization Methods 0.000 claims description 13
- 230000015654 memory Effects 0.000 claims description 6
- 238000006243 chemical reaction Methods 0.000 claims description 5
- 238000010586 diagram Methods 0.000 description 16
- 230000008569 process Effects 0.000 description 14
- 238000012423 maintenance Methods 0.000 description 7
- 229910002056 binary alloy Inorganic materials 0.000 description 5
- 238000004590 computer program Methods 0.000 description 5
- 230000008859 change Effects 0.000 description 4
- 230000006854 communication Effects 0.000 description 4
- 238000011161 development Methods 0.000 description 4
- 230000008901 benefit Effects 0.000 description 3
- 238000004891 communication Methods 0.000 description 3
- 238000005516 engineering process Methods 0.000 description 3
- 230000006399 behavior Effects 0.000 description 2
- 239000000284 extract Substances 0.000 description 2
- 238000012360 testing method Methods 0.000 description 2
- 239000004973 liquid crystal related substance Substances 0.000 description 1
- 238000012856 packing Methods 0.000 description 1
- 230000003252 repetitive effect Effects 0.000 description 1
- 239000004065 semiconductor Substances 0.000 description 1
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/30—Creation or generation of source code
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/60—Software deployment
- G06F8/65—Updates
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/44—Arrangements for executing specific programs
- G06F9/445—Program loading or initiating
- G06F9/44505—Configuring for program initiating, e.g. using registry, configuration files
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Computer Security & Cryptography (AREA)
- Devices For Executing Special Programs (AREA)
Abstract
本公开实施例公开了一种程序发布和加载方法、装置、计算机系统及可读存储介质,所述发布方法包括:获取使用第一编程语言编写的待发布程序;将所述待发布程序转换成使用第二编程语言编写的类;发布所述使用第二编程语言编写的类。
Description
技术领域
本公开涉及计算机领域,具体涉及一种程序发布和加载方法、装置、计算机系统及可读存储介质。
背景技术
传统的软件开发流程中,编码阶段采用硬编码的方式,开发人员首先会按照业务需求进行编码,然后经过一系列编译、打包以及部署来完成整个需求的迭代。但是,随着业务需求的不断增加以及频繁的需求变更,不断地编译、打包以及部署等重复性的工作已经成为了开发人员的负担,极大地降低了开发的效率。
发明内容
为了解决相关技术中的问题,本公开实施例提供一种程序发布和加载方法、装置、计算机系统及可读存储介质。
第一方面,本公开实施例中提供了一种程序发布方法。
具体地,所述程序发布方法,包括:获取使用第一编程语言编写的待发布程序;
将所述待发布程序转换成使用第二编程语言编写的类;
发布所述使用第二编程语言编写的类。
结合第一方面,本公开在第一方面的第一种实现方式中,所述使用第一编程语言编写的待发布程序包括使用领域特定语言DSL编写的脚本或使用可视化格式语言VFL编写的脚本;和/或
所述第二编程语言包括Java语言或C++语言或C#语言。
结合第一方面,本公开在第一方面的第二种实现方式中,所述将所述待发布程序转换成使用第二编程语言编写的类,包括:
根据所述待发布程序的名称生成类名;
根据所述待发布程序的内容生成所述第二编程语言的指令;
基于所述类名和所述指令得到所述使用第二编程语言编写的类。
结合第一方面的第二种实现方式,本公开在第一方面的第三种实现方式中,所述根据所述待发布程序的名称生成类名,包括根据所述待发布程序的名称和所述待发布程序的版本号生成类名。
结合第一方面,本公开在第一方面的第四种实现方式中,所述发布所述使用第二编程语言编写的类,包括:将所述使用第二编程语言编写的类转换成二进制代码;
发布所述二进制代码。
结合第一方面的第四种实现方式,本公开在第一方面的第五种实现方式中,所述二进制代码包括字节码。
结合第一方面的第四种实现方式,本公开在第一方面的第六种实现方式中,在所述使用第二编程语言编写的类有更新时,更新与所述使用第二编程语言编写的类相对应的标识位。
第二方面,本公开实施例中提供了一种程序加载方法。
具体地,所述程序加载方法,包括:获取使用第二编程语言编写的类,所述类是从使用第一编程语言编写的待发布程序转换得到的;
通过以类加载的方式加载所述类,来执行所述待发布程序的功能。
结合第二方面,本公开在第二方面的第一种实现方式中,所述使用第一编程语言编写的待发布程序包括使用领域特定语言DSL编写的脚本或使用可视化格式语言VFL编写的脚本;和/或
所述第二编程语言包括Java语言或C++语言或C#语言。
结合第二方面,本公开在第二方面的第二种实现方式中,从所述待发布程序转换成使用第二编程语言编写的类,包括:
根据所述待发布程序的名称生成类名;
根据所述待发布程序的内容生成所述第二编程语言的指令;
基于所述类名和所述指令得到所述使用第二编程语言编写的类。
结合第二方面的第二种实现方式,本公开在第二方面的第三种实现方式中,所述根据所述待发布程序的名称生成类名,包括根据所述待发布程序的名称和所述待发布程序的版本号生成类名。
结合第二方面,本公开在第二方面的第四种实现方式中,所述获取使用第二编程语言编写的类,包括从外部实体接收从所述使用第二编程语言编写的类转换得到的二进制代码;
所述以类加载的方式加载所述类,包括以类加载的方式加载所述二进制代码。
结合第二方面的第四种实现方式,本公开在第二方面的第五种实现方式中,所述二进制代码包括字节码。
结合第二方面,本公开在第二方面的第六种实现方式中,所述获取使用第二编程语言编写的类,包括:
监听与所述使用第二编程语言编写的类相对应的标识位;
在监听到所述标识位有更新时,获取所述使用第二编程语言编写的类。
第三方面,本公开实施例中提供了一种程序发布装置。
具体地,所述程序发布装置,包括:
待发布程序获取模块,用于获取使用第一编程语言编写的待发布程序;
类转换模块,用于将所述待发布程序转换成使用第二编程语言编写的类;
类发布模块,用于发布所述使用第二编程语言编写的类。
结合第三方面,本公开在第三方面的第一种实现方式中,所述使用第一编程语言编写的待发布程序包括使用领域特定语言DSL编写的脚本或使用可视化格式语言VFL编写的脚本;和/或
所述第二编程语言包括Java语言或C++语言或C#语言。
结合第三方面,本公开在第三方面的第二种实现方式中,所述将所述待发布程序转换成使用第二编程语言编写的类,包括:
根据所述待发布程序的名称生成类名;
根据所述待发布程序的内容生成所述第二编程语言的指令;
基于所述类名和所述指令得到所述使用第二编程语言编写的类。
结合第三方面的第二种实现方式,本公开在第三方面的第三种实现方式中,所述根据所述待发布程序的名称生成类名,包括根据所述待发布程序的名称和所述待发布程序的版本号生成类名。
结合第三方面,本公开在第三方面的第四种实现方式中,所述发布所述使用第二编程语言编写的类,包括:将所述使用第二编程语言编写的类转换成二进制代码;
发布所述二进制代码。
结合第三方面的第四种实现方式,本公开在第三方面的第五种实现方式中,所述二进制代码包括字节码。
结合第三方面的第五种实现方式,本公开在第三方面的第六种实现方式中,所述程序发布装置还包括:类标识位更新模块,用于在所述使用第二编程语言编写的类有更新时,更新与所述使用第二编程语言编写的类相对应的标识位。
第四方面,本公开实施例中提供了一种程序加载装置。
具体地,所述程序加载装置,包括:类获取模块,用于获取使用第二编程语言编写的类,所述类是从使用第一编程语言编写的待发布程序转换得到的;
类加载模块,用于通过以类加载的方式加载所述类,来执行所述待发布程序的功能。
结合第四方面,本公开在第四方面的第一种实现方式中,所述使用第一编程语言编写的待发布程序包括使用领域特定语言DSL编写的脚本或使用可视化格式语言VFL编写的脚本;和/或
所述第二编程语言包括Java语言或C++语言或C#语言。
结合第四方面,本公开在第四方面的第二种实现方式中,从所述待发布程序转换成使用第二编程语言编写的类,包括:
根据所述待发布程序的名称生成类名;
根据所述待发布程序的内容生成所述第二编程语言的指令;
基于所述类名和所述指令得到所述使用第二编程语言编写的类。
结合第四方面的第二种实现方式,本公开在第四方面的第三种实现方式中,所述根据所述待发布程序的名称生成类名,包括根据所述待发布程序的名称和所述待发布程序的版本号生成类名。
结合第四方面,本公开在第四方面的第四种实现方式中,所述获取使用第二编程语言编写的类,包括从外部实体接收从所述使用第二编程语言编写的类转换得到的二进制代码;
所述以类加载的方式加载所述类,包括以类加载的方式加载所述二进制代码。
结合第四方面的第四种实现方式,本公开在第四方面的第五种实现方式中,所述二进制代码包括字节码。
结合第四方面,本公开在第四方面的第六种实现方式中,所述获取使用第二编程语言编写的类,包括:
监听与所述使用第二编程语言编写的类相对应的标识位;
在监听到所述标识位有更新时,获取所述使用第二编程语言编写的类。
第五方面,本公开实施例中提供了一种计算机系统。具体地,所述计算机系统,包括:处理器;存储器,存储有可执行指令,当所述可执行指令被处理器执行时,实现以下方法步骤:
获取使用第一编程语言编写的待发布程序;
将所述待发布程序转换成使用第二编程语言编写的类;
发布所述使用第二编程语言编写的类。
结合第五方面,本公开在第五方面的第一种实现方式中,所述使用第一编程语言编写的待发布程序包括使用领域特定语言DSL编写的脚本或使用可视化格式语言VFL编写的脚本;和/或
所述第二编程语言包括Java语言或C++语言或C#语言。
结合第五方面,本公开在第五方面的第二种实现方式中,所述将所述待发布程序转换成使用第二编程语言编写的类,包括:
根据所述待发布程序的名称生成类名;
根据所述待发布程序的内容生成所述第二编程语言的指令;
基于所述类名和所述指令得到所述使用第二编程语言编写的类。
结合第五方面的第二种实现方式,本公开在第五方面的第三种实现方式中,所述根据所述待发布程序的名称生成类名,包括根据所述待发布程序的名称和所述待发布程序的版本号生成类名。
结合第五方面,本公开在第五方面的第四种实现方式中,所述发布所述使用第二编程语言编写的类,包括:将所述使用第二编程语言编写的类转换成二进制代码;
发布所述二进制代码。
结合第五方面的第四种实现方式,本公开在第五方面的第五种实现方式中,所述二进制代码包括字节码。
结合第五方面的第四种实现方式,本公开在第五方面的第六种实现方式中,在所述使用第二编程语言编写的类有更新时,更新与所述使用第二编程语言编写的类相对应的标识位。
第六方面,本公开实施例中提供了一种计算机系统。具体地,所述计算机系统,包括:处理器;存储器,存储有可执行指令,当所述可执行指令被处理器执行时,实现以下方法步骤:
获取使用第二编程语言编写的类,所述类是从使用第一编程语言编写的待发布程序转换得到的;
通过以类加载的方式加载所述类,来执行所述待发布程序的功能。
结合第六方面,本公开在第六方面的第一种实现方式中,所述使用第一编程语言编写的待发布程序包括使用领域特定语言DSL编写的脚本或使用可视化格式语言VFL编写的脚本;和/或
所述第二编程语言包括Java语言或C++语言或C#语言。
结合第六方面,本公开在第六方面的第二种实现方式中,从所述待发布程序转换成使用第二编程语言编写的类,包括:
根据所述待发布程序的名称生成类名;
根据所述待发布程序的内容生成所述第二编程语言的指令;
基于所述类名和所述指令得到所述使用第二编程语言编写的类。
结合第六方面的第二种实现方式,本公开在第六方面的第三种实现方式中,所述根据所述待发布程序的名称生成类名,包括根据所述待发布程序的名称和所述待发布程序的版本号生成类名。
结合第六方面,本公开在第六方面的第四种实现方式中,所述获取使用第二编程语言编写的类,包括从外部实体接收从所述使用第二编程语言编写的类转换得到的二进制代码;
所述以类加载的方式加载所述类,包括以类加载的方式加载所述二进制代码。
结合第六方面的第四种实现方式,本公开在第六方面的第五种实现方式中,所述二进制代码包括字节码。
结合第六方面,本公开在第六方面的第六种实现方式中,所述获取使用第二编程语言编写的类,包括:
监听与所述使用第二编程语言编写的类相对应的标识位;
在监听到所述标识位有更新时,获取所述使用第二编程语言编写的类。
第七方面,本公开实施例中提供了一种计算机可读存储介质。
具体地,所述计算机可读存储介质,存储有可执行指令,当所述可执行指令被处理器执行时,实现如第一方面、第一方面的第一种实现方式到第一方面的第四种实现方式、第二方面、第二方面的第一种实现方式到第一方面的第六种实现方式中任一项所述的方法。
附图说明
结合附图,通过以下非限制性实施方式的详细描述,本公开的其它目的和优点将变得更加明显。在附图中:
图1示出根据本公开实施例的应用场景的示意图;
图2示出根据本公开实施例的程序发布方法的流程图;
图3示出根据本公开实施例的程序发布方法的流程图;
图4示出根据本公开实施例的程序加载方法的流程图;
图5示出根据本公开实施例的程序发布装置的框图;
图6示出根据本公开实施例的程序发布装置的框图;
图7示出根据本公开实施例的程序加载装置的框图;
图8示出根据本公开实施例的计算机系统的结构框图;
图9示出根据本公开实施例适于程序发布方法或程序加载方法的计算机体系架构的结构框图。
具体实施方式
下文中,将参考附图详细描述本公开的示例性实施方式,以使本领域技术人员可容易地实现它们。此外,为了清楚起见,在附图中省略了与描述示例性实施方式无关的部分。
在本公开中,应理解,诸如“包括”或“具有”等的术语旨在指示本说明书中所公开的特征、数字、步骤、行为、部件、部分或其组合的存在,并且不欲排除一个或多个其他特征、数字、步骤、行为、部件、部分或其组合存在或被添加的可能性。
另外还需要说明的是,在不冲突的情况下,本公开中的实施例及实施例中的特征可以相互组合。下面将参考附图并结合实施例来详细说明本公开。
在提出本公开的过程中,发明人发现,在Java语言实现的业务系统中,在更新服务器上的jar包时,需要在本地提前将业务逻辑修改后的源码编译成jar包,jar包的名称必须与服务器上的jar包名称保持一致,然后将编译好的jar包通过FTP上传到服务器指定的目录下,替换服务器上现有的jar包,从而达到程序运行动态加载的目的。而且,替换完jar包后,服务器上的服务需要重新启动,造成服务更新、上线周期较长。另外,随着应用的不断扩张,集群和服务器的数量也越来越多,很容易导致重复替换或者遗漏等问题,不能保证所有服务器运行统一版本的应用,极大影响工作的效率,而且针对不同版本的应用维护也变得更加困难。为至少部分解决上述问题而提出本公开。
图1示出了根据本公开实施例的应用场景的示意图。可以理解,图1所示应用场景仅为了说明本公开的概念和原理,而并非意味着本公开仅适用于这样的应用场景。
如图1所示,示例性应用场景包括发布方主机100、数据库200、第一服务器300、第二服务器400。发布方主机100生成待发布程序并将其上传到数据库200,第一服务器300和第二服务器400是待发布程序的使用方主机,从数据库200下载待发布程序并执行相应的功能。需要注意的是,本文中的待发布程序可以是待发布的新程序,也可以是对已有程序进行更新的更新程序。
具体地,发布方主机100执行步骤S101~S105:
在步骤S101中,获取第一语言程序,例如获取或生成以第一编程语言编写的待发布程序。
在步骤S102中,解析成第二语言的类,例如解析所述以第一编程语言编写的待发布程序并生成以第二编程语言编写的类。
在步骤S103中,编译成二进制代码,例如对以第二编程语言编写的类进行编译,以生成二进制代码。
在步骤S104中,发布二进制代码,例如将所述二进制代码发布到数据库200中。
在步骤S105中,发送标识位,例如,如果待发布程序是新的程序,则将与该待发布程序相对应的标识位的初始值发送到第一服务器300和第二服务器400;如果待发布程序是对原有程序的更新,则将与该待发布程序相对应的标识位的更新值发送到第一服务器300和第二服务器400。
第一服务器300和第二服务器400执行相同的步骤S106~S108以加载待发布程序:
在步骤S106中,监听标识位。
在步骤S107中,获取二进制代码,例如,如果监听到新标识位(说明有新的待发布程序)或标识位有更新(说明原有程序有更新),则从数据库200下载相应待发布程序的二进制代码,所述二进制代码是由发布方主机100发布到数据库200中的。
在步骤S108中,加载执行二进制代码,例如,以类加载的形式加载二进制代码,并执行所述二进制代码。
图2示出根据本公开实施例的程序发布方法的流程图。
在步骤S201中,获取使用第一编程语言编写的待发布程序。
在步骤S202中,将所述待发布程序转换成使用第二编程语言编写的类。
在步骤S203中,发布所述使用第二编程语言编写的类。
根据本公开实施例,通过以类的形式发布程序,待发布程序的使用方可以在服务运行的过程中,方便使用方主机通过类加载的形式来加载待发布程序,而无需下载服务所对应的所有二进制代码并重启服务,简化了使用方主机的操作,减少了服务更新、上线的时间。
根据本公开实施例,所述使用第一编程语言编写的待发布程序包括使用领域特定语言DSL编写的脚本;和/或所述第二编程语言包括Java语言。
例如,现有技术中,在使用例如Java的第二编程语言实现的业务系统中,在版本更新的过程中,要将编译好的jar包上传到服务器,用老版本替换成新版本的jar包。由于更新的程序中往往包含与之前版本相同的内容,每次使用Java语言来编写更新程序可能包含大量的重复劳动,效率不高。根据本公开实施例,使用例如DSL的第一编程语言编写待发布程序,开发语法更简洁。DSL内置多种工具类,拿来即用,无需重复开发。通过DSL构建抽象模型,抽取公共代码,减少重复劳动,提高了开发效率。可以理解,虽然这里是以DSL语言作为第一编程语言,以Java作为第二编程语言来进行说明,但根据系统设计的不同,所述第一编程语言和第二编程语言也可以是其它编程语言。例如,第一编程语言可以是可视化格式语言VFL,第二编程语言可以是C++语言或者C#语言。
根据本公开实施例,所述将所述待发布程序转换成使用第二编程语言编写的类,包括:根据所述待发布程序的名称生成类名;根据所述待发布程序的内容生成所述第二编程语言的指令;基于所述类名和所述指令得到所述使用第二编程语言编写的类。
例如,在将DSL脚本转换成Java类的过程中,可以根据待发布DSL脚本的名称生成类名,DSL脚本名称和Java类名一致。根据DSL脚本内容自动转换生成Java指令。基于Java类名和Java指令得到Java类。DSL脚本名称和Java类名一致,而由DSL脚本内容自动转换成Java类中的指令,保证了转换前、后的功能完全对应,方便系统的维护和更新。第二编程语言的指令可以是Java源代码,也可以是其它指令,例如C++源代码、C#源代码。
根据本公开实施例,所述根据所述待发布程序的名称生成类名,包括根据所述待发布程序的名称和所述待发布程序的版本号生成类名。
例如,在生成Java类名时,用DSL脚本名称和版本号共同生成类名。在DSL脚本更新迭代的过程中,类名也随之更新,利于系统维护。但是,本公开不限于此,除了用DSL脚本名称和版本号,也可以用其它方式生成类名。通过在类名中包括版本号,便于不同版本的管理和维护,同一份DSL脚本,可以实现多版本共存,在实际执行中,可以指定版本号去执行相应的DSL脚本。同时,在日常应用发布时,可以选择部分使用方主机发布指定版本号的应用。待版本号的应用运行、测试稳定后,再在所有使用方主机上发布指定的版本号的应用。
根据本公开实施例,所述发布所述使用第二编程语言编写的类,包括:将所述使用第二编程语言编写的类转换成二进制代码;发布所述二进制代码。
例如,将Java的类转换成二进制代码,将二进制代码发布到数据库中,以便使用方主机获取。除了数据库之外,也可以将二进制代码发布到其它位置。通过将类转换成二进制代码并发布二进制代码,使用方主机可以直接使用二进制代码运行,而无需将类转换成二进制代码,提高了使用方主机的执行效率。使用方主机可以在服务运行的过程中,直接以类加载的形式加载该类的二进制代码并运行,而无需下载服务所对应的所有二进制代码并重启服务,简化了使用方主机的操作,减轻了使用方主机的工作负荷,减少了服务更新、上线的时间。
根据本公开实施例,可以将转换得到的二进制代码存储在数据库中,使用方主机从数据库下载二进制代码。这样做的好处是防止由于例如机器重启等原因造成二进制代码丢失而需要再次编译,从而可以保证程序运行速度,提高运行效率。
根据本公开实施例,所述二进制代码包括字节码。例如,二进制代码是Java类编译出来的字节码,也可以是其它二进制代码,例如C++源代码编译的二进制代码或者C#源代码编译的二进制代码。
图3示出根据本公开实施例的程序发布方法的流程图。
图3除了包括与图2相同的步骤S201~S203之外,还增加了步骤S204。
在步骤S204中,在所述使用第二编程语言编写的类有更新时,更新与所述使用第二编程语言编写的类相对应的标识位。
例如,使用方主机在获取到新发布的程序时,可以相应地设置一个标识位。该标识位的初始值可以由发布程序的服务器推送,也可以由使用方主机根据设置使用默认值。当该程序有更新时,发布方主机可以将标识位的更新值推送到使用方主机以更新使用方主机上相对应的标识位。使用方主机监听到该标识位改变时,从数据库下载对应的待发布程序以更新本地程序。在待发布程序加载完成后,使用方主机可以改变该标识位的值以表明待发布程序加载完成。例如,使用方主机在获取到新发布的程序Program时,可以相应地设置一个标识位F_Program,初始值为0,说明其是新的程序。当该程序有更新时,发布方主机可以将标识位的更新值1推送到使用方主机以更新使用方主机上相对应的标识位F_Program。当使用方主机监听到该标识位的值变为1时,从数据库下载对应的待发布程序以更新本地程序。在待发布程序加载完成后,使用方主机可以将该标识位的值从1变为2,以表明待发布程序加载完成。
图4示出根据本公开实施例的程序加载方法的流程图。
在步骤S401中,获取使用第二编程语言编写的类,所述类是从使用第一编程语言编写的待发布程序转换得到的。
在步骤S402中,通过以类加载的方式加载所述类,来执行所述待发布程序的功能。
根据本公开实施例,通过以类的形式发布程序,待发布程序的使用方主机可以在服务运行的过程中,直接以类加载的形式加载该类的二进制代码并直接运行,而无需下载服务所对应的所有二进制代码并重启服务,简化了使用方主机的操作,减轻了使用方主机的工作负荷,相比于现有技术显著简化了程序更新的过程,减少了服务更新、上线的时间,提高系统效率。
通过将类转换成二进制代码并发布二进制代码,使用方主机可以直接使用二进制代码运行,而无需将类转换成二进制代码,提高了使用方主机的执行效率。
根据本公开实施例,所述使用第一编程语言编写的待发布程序包括使用领域特定语言DSL编写的脚本或使用可视化格式语言VFL编写的脚本;和/或所述第二编程语言包括Java语言或C++语言或C#语言。
例如,使用方主机获取使用例如Java的第二编程语言编写的类,所述类是从使用例如DSL的第一编程语言编写的待发布程序转换得到的。
例如,现有技术中,在使用例如Java的第二编程语言实现的业务系统中,在版本更新的过程中,要将编译好的jar包上传到服务器,用老版本替换成新版本的jar包。由于更新的程序中往往包含与之前版本相同的内容,每次使用Java语言来编写更新程序可能包含大量的重复劳动,效率不高。根据本公开实施例,使用例如DSL的第一编程语言编写待发布程序,开发语法更简洁。DSL内置多种工具类,拿来即用,无需重复开发。通过DSL构建抽象模型,抽取公共代码,减少重复劳动,提高了开发效率。可以理解,虽然这里是以DSL语言作为第一编程语言,以Java作为第二编程语言来进行说明,但根据系统设计的不同,所述第一编程语言和第二编程语言也可以是其它编程语言。
根据本公开实施例,第一编程语言可以是DSL之外的其它编程语言,例如VFL语言,第二编程语言可以是Java外的其它编程语言,例如C++语言或者C#语言。
根据本公开实施例,从所述待发布程序转换成使用第二编程语言编写的类,包括:根据所述待发布程序的名称生成类名;根据所述待发布程序的内容生成所述第二编程语言的指令;基于所述类名和所述指令得到所述使用第二编程语言编写的类。
例如,在将DSL脚本转换成Java类的过程中,可以根据待发布DSL脚本的名称生成类名,DSL脚本名称和Java类名一致。根据DSL脚本内容自动转换生成Java指令。基于Java类名和Java指令得到Java类。DSL脚本名称和Java类名一致,而由DSL脚本内容自动转换成Java类中的指令,保证了转换前、后的功能完全对应,方便系统的维护和更新。第二编程语言的指令可以是Java源代码,也可以是其它指令。
根据本公开实施例,所述根据所述待发布程序的名称生成类名,包括根据所述待发布程序的名称和所述待发布程序的版本号生成类名。
例如,在生成Java类名时,用DSL脚本名称和版本号共同生成类名。在DSL脚本更新迭代的过程中,类名也随之更新,利于系统维护。但是,本公开不限于此,除了用DSL脚本名称和版本号,也可以用其它方式生成类名。通过在类名中包括版本号,便于不同版本的管理和维护,同一份DSL脚本,可以实现多版本共存,在实际执行中,可以指定版本号去执行相应的DSL脚本。同时,在日常应用发布时,可以选择部分使用方主机发布指定版本号的应用。待版本号的应用运行、测试稳定后,再在所有使用方主机上发布指定的版本号的应用。
根据本公开实施例,所述获取使用第二编程语言编写的类,包括从外部实体接收从所述使用第二编程语言编写的类转换得到的二进制代码;所述以类加载的方式加载所述类,包括以类加载的方式加载所述二进制代码。
例如,发布方主机将Java的类转换成二进制代码,将二进制代码发布到例如数据库的外部实体中,以便使用方主机获取。除了数据库之外,也可以将二进制代码发布到其它外部实体。通过预先将类转换成二进制代码并发布二进制代码,使用方主机可以直接以类加载的形式加载二进制代码运行,而无需对下载的程序进行编译或解释,简化了使用方主机的操作,减轻了使用方主机的工作负荷。
根据本公开实施例,发布方主机可以将转换得到的二进制代码存储在例如数据库的外部实体中,使用方主机从数据库下载二进制代码。这样做的好处是防止由于例如机器重启等原因造成二进制代码丢失而需要再次编译,从而可以保证程序运行速度,提高运行效率。
根据本公开实施例,所述二进制代码包括字节码。例如,二进制代码是Java类编译出来的字节码,也可以是其它二进制代码。
根据本公开实施例,所述获取使用第二编程语言编写的类,包括:监听与所述使用第二编程语言编写的类相对应的标识位;在监听到所述标识位有更新时,获取所述使用第二编程语言编写的类。
例如,使用方主机在获取到新发布的程序时,可以相应地设置一个标识位。该标识位的初始值可以由发布程序的服务器推送,也可以由使用方主机根据设置使用默认值。当该程序有更新时,发布方主机可以将标识位的更新值推送到使用方主机以更新使用方主机上相对应的标识位。使用方主机监听到该标识位改变时,从数据库下载对应的待发布程序以更新本地程序。例如,使用方主机在获取到新发布的程序Program时,可以相应地设置一个标识位F_Program,初始值为0,说明其是新的程序。当该程序有更新时,发布方主机可以将标识位的更新值1推送到使用方主机以更新使用方主机上相对应的标识位F_Program。当使用方主机监听到该标识位的值变为1时,从数据库下载对应的待发布程序以更新本地程序。在待发布程序加载完成后,使用方主机可以将该标识位的值从1变为2,以表明待发布程序加载完成。
图5示出根据本公开实施例的程序发布装置的框图。
在图5中,程序发布装置500包括:
待发布程序获取模块501,用于获取使用第一编程语言编写的待发布程序;
类转换模块502,用于将所述待发布程序转换成使用第二编程语言编写的类;
类发布模块503,用于发布所述使用第二编程语言编写的类。
根据本公开实施例,所述使用第一编程语言编写的待发布程序包括使用领域特定语言DSL编写的脚本或使用可视化格式语言VFL编写的脚本;和/或所述第二编程语言包括Java语言或C++语言或C#语言。
根据本公开实施例,根据所述待发布程序的名称生成类名;根据所述待发布程序的内容生成所述第二编程语言的指令;基于所述类名和所述指令得到所述使用第二编程语言编写的类。
根据本公开实施例,所述根据所述待发布程序的名称生成类名,包括根据所述待发布程序的名称和所述待发布程序的版本号生成类名。
根据本公开实施例,所述发布所述使用第二编程语言编写的类,包括:将所述使用第二编程语言编写的类转换成二进制代码;发布所述二进制代码。
根据本公开实施例,所述二进制代码包括字节码。
图6示出根据本公开实施例的程序发布装置的框图。
在图6中,程序发布装置500除了包括与图5相同的模块501~503外,还增加了模块:
类标识位更新模块504,用于在所述使用第二编程语言编写的类有更新时,更新与所述使用第二编程语言编写的类相对应的标识位。
图7示出根据本公开实施例的程序加载装置的框图。
在图7中,程序加载装置700包括:
类获取模块701,用于获取使用第二编程语言编写的类,所述类是从使用第一编程语言编写的待发布程序转换得到的;
类加载模块702,用于通过以类加载的方式加载所述类,来执行所述待发布程序的功能。
根据本公开实施例,所述使用第一编程语言编写的待发布程序包括使用领域特定语言DSL编写的脚本或使用可视化格式语言VFL编写的脚本;和/或所述第二编程语言包括Java语言或C++语言或C#语言。
根据本公开实施例,从所述待发布程序转换成使用第二编程语言编写的类,包括:根据所述待发布程序的名称生成类名;根据所述待发布程序的内容生成所述第二编程语言的指令;基于所述类名和所述指令得到所述使用第二编程语言编写的类。
根据本公开实施例,所述根据所述待发布程序的名称生成类名,包括根据所述待发布程序的名称和所述待发布程序的版本号生成类名。
根据本公开实施例,所述获取使用第二编程语言编写的类,包括从外部实体接收从所述使用第二编程语言编写的类转换得到的二进制代码;所述以类加载的方式加载所述类,包括以类加载的方式加载所述二进制代码。
根据本公开实施例,所述二进制代码包括字节码。
根据本公开实施例,所述获取使用第二编程语言编写的类,包括:监听与所述使用第二编程语言编写的类相对应的标识位;在监听到所述标识位有更新时,获取所述使用第二编程语言编写的类。
图8示出根据本公开实施例的计算机系统的结构框图。
如图8中所示,该计算机系统800可以包括一个或多个处理器801以及一个或多个存储器802。所述一个或多个存储器802用于存储一条或多条可执行指令,当所述可执行指令被所述一个或多个处理器801执行时,可以实现以下步骤:
一种程序发布方法,其特征在于,包括:获取使用第一编程语言编写的待发布程序;将所述待发布程序转换成使用第二编程语言编写的类;发布所述使用第二编程语言编写的类。
根据本公开实施例,所述使用第一编程语言编写的待发布程序包括使用领域特定语言DSL编写的脚本或使用可视化格式语言VFL编写的脚本;和/或所述第二编程语言包括Java语言或C++语言或C#语言。
根据本公开实施例,所述将所述待发布程序转换成使用第二编程语言编写的类,包括:根据所述待发布程序的名称生成类名;根据所述待发布程序的内容生成所述第二编程语言的指令;基于所述类名和所述指令得到所述使用第二编程语言编写的类。
根据本公开实施例,所述根据所述待发布程序的名称生成类名,包括根据所述待发布程序的名称和所述待发布程序的版本号生成类名。
根据本公开实施例,所述发布所述使用第二编程语言编写的类,包括:将所述使用第二编程语言编写的类转换成二进制代码;发布所述二进制代码。
根据本公开实施例,所述二进制代码包括字节码。
根据本公开实施例,在所述使用第二编程语言编写的类有更新时,更新与所述使用第二编程语言编写的类相对应的标识位。
根据本公开实施例,当所述可执行指令被所述一个或多个处理器801执行时,可以实现以下步骤:
一种程序加载方法,其特征在于,包括:获取使用第二编程语言编写的类,所述类是从使用第一编程语言编写的待发布程序转换得到的;通过以类加载的方式加载所述类,来执行所述待发布程序的功能。
根据本公开实施例,所述使用第一编程语言编写的待发布程序包括使用领域特定语言DSL编写的脚本或使用可视化格式语言VFL编写的脚本;和/或所述第二编程语言包括Java语言或C++语言或C#语言。
根据本公开实施例,所述从所述待发布程序转换成使用第二编程语言编写的类,包括:根据所述待发布程序的名称生成类名;根据所述待发布程序的内容生成所述第二编程语言的指令;基于所述类名和所述指令得到所述使用第二编程语言编写的类。
根据本公开实施例,所述根据所述待发布程序的名称生成类名,包括根据所述待发布程序的名称和所述待发布程序的版本号生成类名。
根据本公开实施例,所述获取使用第二编程语言编写的类,包括从外部实体接收从所述使用第二编程语言编写的类转换得到的二进制代码;所述以类加载的方式加载所述类,包括以类加载的方式加载所述二进制代码。
根据本公开实施例,所述二进制代码包括字节码。
根据本公开实施例,所述获取使用第二编程语言编写的类,包括:监听与所述使用第二编程语言编写的类相对应的标识位;在监听到所述标识位有更新时,获取所述使用第二编程语言编写的类。
图9示出根据本公开实施例适于程序发布方法或程序加载方法的计算机体系架构的结构框图。
如图9所示,计算机系统900包括处理器(CPU)901,其可以根据存储在只读存储器(ROM)902中的程序或者从存储部分908加载到随机访问存储器(RAM)903中的程序而执行上述方法。在RAM 903中,还存储有系统900操作所需的各种程序和数据。CPU 901、ROM 902以及RAM 903通过总线904彼此相连。输入/输出(I/O)接口905也连接至总线904。
以下部件连接至I/O接口905:包括键盘、鼠标等的输入部分906;包括诸如阴极射线管(CRT)、液晶显示器(LCD)等以及扬声器等的输出部分907;包括硬盘等的存储部分908;以及包括诸如LAM卡、调制解调器等的网络接口卡的通信部分909。通信部分909经由诸如因特网的网络执行通信处理。驱动器910也根据需要连接至I/O接口905。可拆卸介质911,诸如磁盘、光盘、磁光盘、半导体存储器等等,根据需要安装在驱动器910上,以便于从其上读出的计算机程序根据需要被安装入存储部分908。
另外,根据本公开的实施方式,上文描述的方法可以被实现为计算机软件程序。例如,本公开的实施方式包括一种计算机程序产品,其包括有形地包含在及其可读介质上的计算机程序,所述计算机程序包含用于执行上述方法的程序代码。在这样的实施方式中,该计算机程序可以通过通信部分909从网络上被下载和安装,和/或从可拆卸介质911被安装。
根据本公开的实施例,可以采用一个如上文描述的计算机体系架构来实现根据本公开实施例的方法,也可以采用多个如上文描述的计算机体系架构彼此协作来实现根据本公开实施例的方法。
附图中的流程图和框图,图示了按照本公开各种实施方式的系统、方法和计算机程序产品的可能实现的体系架构、功能和操作。在这点上,流程图或框图中的每个方框可以代表一个模块、程序段或代码的一部分,所述模块、程序段或代码的一部分包含一个或多个用于实现规定的逻辑功能的可执行指令。也应当注意,在有些作为替换的实现中,方框中所标注的功能也可以以不同于附图中所标注的顺序发生。例如,两个接连地表示的方框实际上可以基本并行地执行,它们有时也可以按相反的顺序执行,这依所涉及的功能而定。也要注意的是,框图和/或流程图中的每个方框、以及框图和/或流程图中的方框的组合,可以用执行规定的功能或操作的专用的基于硬件的系统来实现,或者可以用专用硬件与计算机指令的组合来实现。
描述于本公开实施方式中所涉及到的单元或模块可以通过软件的方式实现,也可以通过可编程硬件的方式来实现。所描述的单元或模块也可以设置在处理器中,这些单元或模块的名称在某种情况下并不构成对该单元或模块本身的限定。
作为另一方面,本公开还提供了一种计算机可读存储介质,该计算机可读存储介质可以是上述实施方式中所述装置中所包含的计算机可读存储介质;也可以是单独存在,未装配入设备中的计算机可读存储介质。计算机可读存储介质存储有一个或者一个以上程序,所述程序被一个或者一个以上的处理器用来执行描述于本公开的方法。
以上描述仅为本公开的较佳实施例以及对所运用技术原理的说明。本领域技术人员应当理解,本公开中所涉及的发明范围,并不限于上述技术特征的特定组合而成的技术方案,同时也应涵盖在不脱离所述发明构思的情况下,由上述技术特征或其等同特征进行任意组合而形成的其它技术方案。例如上述特征与本公开中公开的(但不限于)具有类似功能的技术特征进行互相替换而形成的技术方案。
Claims (10)
1.一种程序发布方法,其特征在于,包括:
获取使用第一编程语言编写的待发布程序;
将所述待发布程序转换成使用第二编程语言编写的类;
发布所述使用第二编程语言编写的类。
2.根据权利要求1所述的方法,其特征在于:
所述使用第一编程语言编写的待发布程序包括使用领域特定语言DSL编写的脚本或使用可视化格式语言VFL编写的脚本;和/或
所述第二编程语言包括Java语言或C++语言或C#语言。
3.根据权利要求1所述的方法,其特征在于,所述将所述待发布程序转换成使用第二编程语言编写的类,包括:
根据所述待发布程序的名称生成类名;
根据所述待发布程序的内容生成所述第二编程语言的指令;
基于所述类名和所述指令得到所述使用第二编程语言编写的类。
4.根据权利要求1所述的方法,其特征在于,所述发布所述使用第二编程语言编写的类,包括:
将所述使用第二编程语言编写的类转换成二进制代码;
发布所述二进制代码。
5.根据权利要求4所述的方法,其特征在于,还包括:
在所述使用第二编程语言编写的类有更新时,更新与所述使用第二编程语言编写的类相对应的标识位。
6.一种程序加载方法,其特征在于,包括:
获取使用第二编程语言编写的类,所述类是从使用第一编程语言编写的待发布程序转换得到的;
通过以类加载的方式加载所述类,来执行所述待发布程序的功能。
7.一种程序发布装置,其特征在于,包括:
待发布程序获取模块,用于获取使用第一编程语言编写的待发布程序;
类转换模块,用于将所述待发布程序转换成使用第二编程语言编写的类;
类发布模块,用于发布所述使用第二编程语言编写的类。
8.一种程序加载装置,其特征在于,包括:
类获取模块,用于获取使用第二编程语言编写的类,所述类是从使用第一编程语言编写的待发布程序转换得到的;
类加载模块,用于通过以类加载的方式加载所述类,来执行所述待发布程序的功能。
9.一种计算机系统,其特征在于,包括:处理器;存储器,存储有可执行指令,当所述可执行指令被处理器执行时,实现根据权利要求1~6中任一项所述的方法。
10.一种计算机可读存储介质,存储有可执行指令,当所述可执行指令被处理器执行时,实现根据权利要求1~6中任一项所述的方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910586779.2A CN110275706A (zh) | 2019-07-01 | 2019-07-01 | 程序发布和加载方法、装置、计算机系统及可读存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910586779.2A CN110275706A (zh) | 2019-07-01 | 2019-07-01 | 程序发布和加载方法、装置、计算机系统及可读存储介质 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN110275706A true CN110275706A (zh) | 2019-09-24 |
Family
ID=67962686
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201910586779.2A Pending CN110275706A (zh) | 2019-07-01 | 2019-07-01 | 程序发布和加载方法、装置、计算机系统及可读存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN110275706A (zh) |
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112765512A (zh) * | 2021-01-29 | 2021-05-07 | 北京达佳互联信息技术有限公司 | 延迟加载的检测方法、装置、电子设备、存储介质及产品 |
CN113377638A (zh) * | 2021-06-11 | 2021-09-10 | 北京百度网讯科技有限公司 | 性能测试工具的生成方法和装置 |
CN114118026A (zh) * | 2020-08-28 | 2022-03-01 | 北京仝睿科技有限公司 | 文档自动化生成方法、装置及计算机存储介质、电子设备 |
Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20130198726A1 (en) * | 2012-01-27 | 2013-08-01 | Amx, Llc | Mapping and formatting input commands to a third party protocol |
CN107210931A (zh) * | 2015-01-02 | 2017-09-26 | 希斯泰克公司 | 控制基础架构 |
CN107273143A (zh) * | 2017-07-26 | 2017-10-20 | 北京计算机技术及应用研究所 | 一种基于Xtext的特定领域语言的软件工程设计方法 |
CN108664248A (zh) * | 2018-05-14 | 2018-10-16 | 北京汉能光伏投资有限公司 | 一种微信小程序的生成方法及装置 |
CN109376166A (zh) * | 2018-08-20 | 2019-02-22 | 中国平安财产保险股份有限公司 | 脚本转换方法、装置、计算机设备及存储介质 |
CN109597618A (zh) * | 2018-10-23 | 2019-04-09 | 深圳微迅信息科技有限公司 | 程序开发方法、装置、计算机设备及存储介质 |
-
2019
- 2019-07-01 CN CN201910586779.2A patent/CN110275706A/zh active Pending
Patent Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20130198726A1 (en) * | 2012-01-27 | 2013-08-01 | Amx, Llc | Mapping and formatting input commands to a third party protocol |
CN107210931A (zh) * | 2015-01-02 | 2017-09-26 | 希斯泰克公司 | 控制基础架构 |
CN107273143A (zh) * | 2017-07-26 | 2017-10-20 | 北京计算机技术及应用研究所 | 一种基于Xtext的特定领域语言的软件工程设计方法 |
CN108664248A (zh) * | 2018-05-14 | 2018-10-16 | 北京汉能光伏投资有限公司 | 一种微信小程序的生成方法及装置 |
CN109376166A (zh) * | 2018-08-20 | 2019-02-22 | 中国平安财产保险股份有限公司 | 脚本转换方法、装置、计算机设备及存储介质 |
CN109597618A (zh) * | 2018-10-23 | 2019-04-09 | 深圳微迅信息科技有限公司 | 程序开发方法、装置、计算机设备及存储介质 |
Cited By (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN114118026A (zh) * | 2020-08-28 | 2022-03-01 | 北京仝睿科技有限公司 | 文档自动化生成方法、装置及计算机存储介质、电子设备 |
CN114118026B (zh) * | 2020-08-28 | 2022-07-19 | 北京仝睿科技有限公司 | 文档自动化生成方法、装置及计算机存储介质、电子设备 |
CN112765512A (zh) * | 2021-01-29 | 2021-05-07 | 北京达佳互联信息技术有限公司 | 延迟加载的检测方法、装置、电子设备、存储介质及产品 |
CN113377638A (zh) * | 2021-06-11 | 2021-09-10 | 北京百度网讯科技有限公司 | 性能测试工具的生成方法和装置 |
CN113377638B (zh) * | 2021-06-11 | 2023-10-27 | 北京百度网讯科技有限公司 | 性能测试工具的生成方法和装置 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN111770113B (zh) | 一种执行智能合约的方法、区块链节点和节点设备 | |
US6836883B1 (en) | Method and system for compiling multiple languages | |
EP2249249B1 (en) | Systems and methods for modifying code generation templates | |
US7962904B2 (en) | Dynamic parser | |
TWI566180B (zh) | 一種動態創建可附加和可拆除二進位檔案的系統和方法 | |
CN110275706A (zh) | 程序发布和加载方法、装置、计算机系统及可读存储介质 | |
EP2098954B1 (en) | Systems and methods for template reverse engineering | |
CN111770116B (zh) | 一种执行智能合约的方法、区块链节点、存储介质 | |
CN111770204A (zh) | 一种执行智能合约的方法、区块链节点和存储介质 | |
CN115756451A (zh) | 一种多项目代码文件重用的方法、装置、设备、存储介质 | |
CN111768184A (zh) | 一种执行智能合约的方法及区块链节点 | |
CN110569040A (zh) | 一种在嵌入式系统内安装、运行应用程序的方法 | |
CN113553035A (zh) | 一种通用的前端ui组件库的设计和构建方法 | |
CN111768183A (zh) | 一种执行智能合约的方法、区块链节点和存储介质 | |
CN111770202A (zh) | 一种执行智能合约的方法、区块链节点和存储介质 | |
US10452364B2 (en) | Method and system for preparing code to be executed by programmable control devices | |
Sánchez Cuadrado et al. | The program is the model: Enabling transformations@ run. time | |
CN104380250B (zh) | 一种动态创建可附加和可拆除二进制文件的系统和方法 | |
Nagy et al. | Utilizing design informaiton in aspect-oriented programming | |
JP2007226788A (ja) | 仮想マシン環境におけるメソッド呼び出し方法、および前記方法を行う仮想マシンが搭載されたシステム | |
CN112585581B (zh) | 用于跨指令集架构过程调用的线程编织 | |
Dunbar et al. | Arduino Compilation | |
CN116679912A (zh) | 代码生成方法、装置、设备、存储介质及计算机程序 | |
CN118349235A (zh) | 一种sparc嵌入式软件的重构编译器的方法及系统 | |
CN114296694A (zh) | 小程序的生成方法和加载方法 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
RJ01 | Rejection of invention patent application after publication | ||
RJ01 | Rejection of invention patent application after publication |
Application publication date: 20190924 |