Java Attach API可以附加到本地VM并向其加载代理。如何在另一台计算机上连接VM以加载代理?
我了解JMX。但我没有找到如何将我的自定义代理加载到远程VM。
也许存在另一种方法来解决我的问题(加载和执行自定义代码(代理)到远程VM)?
UPD。我想在远程JVM上执行自定义代码。初始JVM参数的独立性是加号。
感谢。
答案 0 :(得分:2)
即使使用remote debugging attached,在生产环境中运行应用程序服务器(Tomcat)也没问题。
更新
如果你想在你的应用程序中执行自定义代码,那么一个解决方案是编写一个类并编译它,将它存储在服务器上的某个地方,然后在你的应用程序中执行一些这样的方法:
/**
* This method:
* <li>loads a class from the server file system
* <li>does a lookup for the method to execute
* <li>creates a new instance of the specified class
* <li>executes the given method with the given arguments
* (which can be null if the method doesn't have arguments)
* <li>returns the result of the invoked method
*
* @param classUrlOnTheServer
* @param className
* @param methodNameToExecute
* @param argumentsForTheMethod arguments that should be passed to
* the method of the loaded class - can
* be null.
* @return returns the result of the invoked method
* @throws ClassNotFoundException
* @throws MalformedURLException
* @throws SecurityException
* @throws NoSuchMethodException
* @throws InstantiationException
* @throws IllegalAccessException
* @throws IllegalArgumentException
* @throws InvocationTargetException
*/
public static Object loadAndExecuteCustomMethodFromALoadedClass(String classUrlOnTheServer,
String className,
String methodNameToExecute,
Object ... argumentsForTheMethod)
throws ClassNotFoundException,
MalformedURLException,
SecurityException,
NoSuchMethodException,
InstantiationException,
IllegalAccessException,
IllegalArgumentException,
InvocationTargetException {
File file = new File(classUrlOnTheServer);
URL url = file.toURI().toURL();
URL[] urls = new URL[] { url };
ClassLoader cl = new URLClassLoader(urls);
Class clazz = cl.loadClass(className);
Method method = clazz.getDeclaredMethod(methodNameToExecute);
Object instance = clazz.newInstance();
Object result = method.invoke(instance, argumentsForTheMethod);
return result;
}
答案 1 :(得分:0)
我不明白这个问题,您是否只想连接到远程VM?连接后,您可以执行任何操作,事件终止VM。 您必须以调试模式启动VM:
-Xdebug -Xrunjdwp:transport = dt_socket,address = 8000,server = y,suspend = n
然后在Eclipse中创建一个新的远程应用程序配置文件。检查一下: http://www.ibm.com/developerworks/opensource/library/os-eclipse-javadebug/index.html
答案 2 :(得分:0)
我找到了实验解决方案: jsadebugd 然后你可以通过 sun.jvm.hotspot.jdi.SAPIDAttachingConnector 连接器附加到它。