Java程序执行方法和装置的制造方法

文档序号:8282111阅读:229来源:国知局
Java程序执行方法和装置的制造方法
【技术领域】
[0001] 本发明涉及计算机领域,特别涉及一种Java程序执行方法和装置。
【背景技术】
[0002] Java是一种可以撰写跨平台应用软件的面向对象的程序设计语言,是由Sun公司 推出的Java程序设计语言和Java平台的总称。Java具有卓越的通用性、高效性、平台移植 性和安全性,广泛应用于各个领域中。
[0003] Java程序在windows平台上运行时,经常需要调用Windows Powershell脚本,从 而达到相应的业务目的。而对于运行在Windows平台上的Java应用程序而言,只能通过 Java应用编程接口中提供的JavalangRuntime exec (String command)方法来达成,此方法 会在当前运行的Java应用程序进程之外重新启动一个独立的Powershell脚本进程,从而 执行该Java程序中的Powershell脚本,脚本执行完毕后再结束该进程。
[0004] 在实现本发明的过程中,发明人发现现有技术至少存在以下问题:
[0005] Java程序每执行一次Powershell脚本就会创建一个独立的Powershell脚本进 程,如果Java程序中有多个线程并发执行Powershell脚本就会同时创建多个进程,导致占 用过多的系统资源,产生开销大。

【发明内容】

[0006] 为了解决现有技术中Java程序每执行一次Powershell脚本就会创建一个独立的 进程,造成占用过多的系统资源的问题,本发明实施例提供了一种Java程序执行方法和装 置。所述技术方案如下:
[0007] -方面,本发明实施例提供一种Java程序执行方法,所述方法包括:
[0008] 加载动态链接库文件,所述动态链接库文件包括:用于创建Powershell脚本执行 环境池的第一本地方法的实现、以及用于执行Powershell脚本的第二本地方法的实现;
[0009] 调用所述第一本地方法,创建Powershell脚本执行环境池,所述Powershell脚本 执行环境池包括多个Powershell脚本执行环境;
[0010] 调用所述第二本地方法,在所述Powershell脚本执行环境中执行所述Java程序 中的Powershell脚本;
[0011] 返回Powershell脚本执行结果。
[0012] 在本发明实施例的一种实现方式中,所述动态链接库文件还包括用于预先加载 Powershell脚本依赖类库的第三本地方法的实现,所述方法还包括:
[0013] 在调用所述第二本地方法前,调用所述第三本地方法,在每个所述Powershell脚 本执行环境中预先加载Powershell脚本依赖类库。
[0014] 在本发明实施例的另一种实现方式中,所述加载动态链接库文件,包括:
[0015] 装载用于执行Powershell脚本的class文件,所述class文件包括所调用的动态 链接库的名称的声明,以及所述第一本地方法、所述第二本地方法和所述第三本地方法的 声明;
[0016] 根据所述class文件声明的动态链接库的名称,加载所述动态链接库文件。
[0017] 在本发明实施例的另一种实现方式中,所述方法还包括:
[0018] 生成所述动态链接库文件和所述class文件。
[0019] 在本发明实施例的另一种实现方式中,所述生成所述动态链接库文件和所述 class文件,包括:
[0020] 获取Java文件,所述Java文件中包括所调用的动态链接库的名称的声明,以及所 述第一本地方法、所述第二本地方法和所述第三本地方法的声明;
[0021] 编译所述Java文件,获得所述class文件;
[0022] 根据所述class文件生成Java本地接口头文件;
[0023] 获取并编译C#代码,生成CS文件,所述C#代码包括所述Java本地接口头文件的 引入,以及所述头文件中声明的所述第一本地方法、所述第二本地方法和所述第三本地方 法的实现;
[0024] 将所述CS文件编译为所述动态链接库文件。
[0025] 在本发明实施例的另一种实现方式中,所述生成所述动态链接库文件和所述 class文件,包括:
[0026] 获取并编译C#代码,生成CS文件,所述C#代码包括所述第一本地方法、所述第二 本地方法和所述第三本地方法的实现;
[0027] 将所述CS文件编译为所述动态链接库文件;
[0028] 使用JNI4NET编译工具编译所述动态链接库文件,得到所述class文件。
[0029] 另一方面,本发明实施例还提供了一种Java程序执行装置,所述装置包括:
[0030] 输入模块,用于加载动态链接库文件,所述第一动态链接库文件包括:用于创建 Powershell脚本执行环境池的第一本地方法的实现、以及用于执行Powershell脚本的第 二本地方法的实现;
[0031] 第一处理模块,用于调用所述第一本地方法,创建Powershell脚本执行环境池, 所述Powershell脚本执行环境池包括多个Powershell脚本执行环境;
[0032] 第二处理模块,用于调用所述第二本地方法,在所述Powershell脚本执行环境中 执行所述Java程序中的Powershell脚本;
[0033] 输出模块,用于返回Powershell脚本执行结果。
[0034] 在本发明实施例的一种实现方式中,所述动态链接库文件还包括用于预先加载 Powershell脚本依赖类库的第三本地方法的实现,所述装置还包括:
[0035] 第三处理模块,用于在调用所述第二本地方法前,调用所述第三本地方法,在每个 所述Powershell脚本执行环境中预先加载Powershell脚本依赖类库。
[0036] 在本发明实施例的另一种实现方式中,所述输入模块,包括:
[0037] 加载单元,用于装载用于执行Powershell脚本的class文件,所述class文件包 括所调用的动态链接库的名称的声明,以及所述第一本地方法、所述第二本地方法和所述 第三本地方法的声明;
[0038] 执行单元,用于根据所述class文件声明的动态链接库的名称,加载所述动态链 接库文件。
[0039] 在本发明实施例的另一种实现方式中,所述装置还包括:
[0040] 生成模块,用于生成所述动态链接库文件和所述class文件。
[0041] 在本发明实施例的另一种实现方式中,所述生成模块,包括:
[0042] 获取单元,用于获取Java文件,所述Java文件包括所调用的动态链接库的名称的 声明,以及所述第一本地方法、所述第二本地方法和所述第三本地方法的声明;
[0043] 第一编译单元,用于编译所述Java文件,获得所述class文件;
[0044] 第二编译单元,用于根据所述class文件生成Java本地接口头文件;
[0045] 第三编译单元,用于获取并编译C#代码,生成CS文件,所述C#代码包括所述Java 本地接口头文件的引入,以及所述头文件中声明的所述第一本地方法、所述第二本地方法 和所述第三本地方法的实现;
[0046] 第四编译单元,用于将所述CS文件编译为所述动态链接库文件。
[0047] 在本发明实施例的另一种实现方式中,所述生成模块,包括:
[0048] 第五编译单元,用于获取并编译C#代码,生成CS文件,所述C#代码包括所述第一 本地方法、所述第二本地方法和所述第三本地方法的实现;
[0049] 第六编译单元,用于将所述CS文件编译为所述动态链接库文件;
[0050] 第七编译单元,用于使用JNI4NET编译工具编译所述动态链接库文件,得到所述 class文件。
[0051] 本发明实施例提供的技术方案带来的有益效果是:
[0052] 通过加载DLL文件,并调用该DLL中的第一本地方法,创建Powershell脚本执 行环境池,Powershell脚本执行环境池包括多个Powershell脚本执行环境,调用DLL中 的第二本地方法,执行Java程序中的Powershell脚本;一方面,由于采用了本地方法 来执行Powershell脚本,因此不会在执行Powershell脚本时创建新的进程,同时,在 Powershell脚本执行环境池中包括多个Powershell脚本执行环境,使得可以同时执行多 个Powershell脚本,避免了每执行一个Powershell脚本就会创建一个独立的进程,造成的 资源浪费的问题;另一方面,DLL文件中还包括第三本地方法,通过第三本地方法可以在创 建Powershell脚本执行环境池后,在Powershell脚本执行环境中加载依赖类库,缩短了 Java程序执行Powershell脚本的时间。
【附图说明】
[0053] 为了更清楚地说明本发明实施例中的技术方案,下面将对实施例描述中所需要使 用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于 本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他 的附图。
[0054] 图1是本发明实施例一提供的Java程序执行方法流程图;
[0055] 图2是本发明实施例二提供的Java程序执行方法流程图;
[0056] 图3是本发明实施例三提供的Java程序执行方法流程图;
[0057] 图4是本发明实施例四提供的Java程序执行装置的结构示意图;
[0058] 图5是本发明实施例五提供的Java程序执行装置的结构示意图。
【具体实施方式】
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1