1

目标:我有客户端-服务器程序,其中客户端和服务器在不同的 jvm 中运行。为了测试相同,我想以编程方式在不同的 JVM 中调用服务器,然后使用当前 jvm 运行客户端并执行不同的 C/S 测试。

有什么方法可以以编程方式在不同的 jvm 中执行方法或运行 Java 命令?

4

4 回答 4

4

1)java中最强大的运行进程的工具是ProcessBuilder

ProcessBuilder pb = new ProcessBuilder("java", "-server", "-jar", "yourJar.jar");

Process p = pb.start();

与使用Process相比,您可以操作子进程,例如读取InputStream销毁


2)如果您能够编辑两个源代码,请查看此问题以在同一主机上的 JVM 之间建立有效的通信。如果您无法更改代码,只需创建自己的加载器来加载服务器并实现 JVM 之间的通信并调用您需要的方法,因为它在同一个 JVM 空间中。

于 2013-02-05T09:49:12.443 回答
1

您几乎可以运行您手动运行的任何命令

             Runtime.getRuntime().exec(command);

有关更多信息,请参阅 Runtime.getRuntime().exec(...) 文档。

但还要注意,使用 exec 运行任何特定于平台的命令将剥夺您的程序的平台独立性。

前段时间我看到有人使用“mv”来移动文件。这使得整个程序特定于基于 Unix 的操作系统。Java 或任何基于虚拟机的语言的魅力在于其平台独立性。

于 2013-02-05T09:51:10.543 回答
0

您可以使用命令行:

 Runtime.getRuntime().exec("java -server MyServer")

或者,如果您想构建一些更复杂的调用,只需使用http://commons.apache.org/exec/来构建和运行程序。

于 2013-02-05T09:44:06.940 回答
0

据我所知,这对于普通的 java 是不可能的。可能启用网格的框架可以提供一种在多个 JVM 上运行 java 程序的方法。这里解决了一个类似的问题:

如何运行-a-java-file-project-in-remote-jvm-which-is-present-in-other-network

于 2013-02-05T09:45:50.930 回答