我有一个小测试类,我想在已经启动并运行的特定jvm上运行(基本上它是在Tomcat上运行的Web应用程序)。我想这样做的原因是我想在jvm中执行一个小测试类(使用main方法和所有),以便为测试类获得相同的环境(加载和初始化类)。
是否可以通过jvm参数指示它不应该初始化新的vm以执行我的类,而是在远程vm上执行并在我的控制台上显示结果。那么本地jvm是一种瘦代理吗?
我不知道如果有一些工具可以使这成为可能。也听说java 6 jvm附带了这样的选项,这是真的吗? 请帮帮我。
谢谢,
答案 0 :(得分:1)
您可能需要查看btrace。它允许您在已启动的JVM中运行代码,前提是您不更改JVM中的变量状态。通过这种跟踪,您可以以不同的方式解决问题。不是通过以新类的形式运行额外的代码,而是通过向JVM中运行的现有类添加安全代码。
例如,当您呼叫System.out.println
时,您可能会File.exists
该文件的名称。
答案 1 :(得分:1)
在阅读了这个问题和答案之后,我决定推出自己的小实用程序:remoteJunit
它是轻量级的,可以动态地将类从客户端加载到服务器JVM。它使用HTTP进行通信。
答案 2 :(得分:0)
您可能会发现JMX很有用。在服务器进程中注册MBean
。使用visualvm
(或jconsole
)调用它。 (tutorial)我从来没有尝试过,请记住。
答案 3 :(得分:0)
RMI也会发挥魔力。
http://java.sun.com/javase/6/docs/technotes/guides/rmi/index.html
使您的Web应用程序启动RMI注册表并注册您的服务 那里的豆子。
然后在其他JVM中,您可以运行查询RMI注册表的程序 由您的Web应用程序启动,以获取您要验证的服务 你完成了。
答案 4 :(得分:0)
我认为“小测试类”基本上是一些调试代码,您希望运行这些代码来监视您的实际应用程序,该应用程序是在Tomcat上远程部署的。如果是这种情况,您应该将Eclipse调试器远程连接到Tomcat实例,这样您就可以在有趣的位置设置断点,然后使用Eclipse的Display视图来运行执行高级调试代码所需的任意代码。由于java使用调试机制支持热代码替换,您还可以在运行时使用新代码更改远程端的现有代码。