Подключить к удаленной (не локальной) ВМ - PullRequest
3 голосов
/ 28 октября 2011

API Java Attach может подключаться к локальным виртуальным машинам и загружать на него агентов.Как подключиться к виртуальной машине на другом компьютере для загрузки агента?

Я знаю о JMX.Но я не выяснил, как загрузить мой пользовательский агент на удаленную виртуальную машину.

Может быть, существуют другие способы решения моей проблемы (загрузить и выполнить пользовательский код (агент) на удаленной виртуальной машине)?

обн.Я хочу выполнить пользовательский код на удаленной JVM.Независимость начальных параметров JVM - плюс.

Спасибо.

Ответы [ 3 ]

2 голосов
/ 29 октября 2011

Нет проблем с запуском сервера приложений (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;
}
0 голосов
/ 07 ноября 2011

Я нашел экспериментальное решение: jsadebugd .
Затем вы можете подключиться к нему с помощью sun.jvm.hotspot.jdi.SAPIDAttachingConnector разъем.

0 голосов
/ 28 октября 2011

Я не понимаю вопроса, вы просто хотите подключиться к удаленной виртуальной машине? При подключении вы можете выполнить все, что захотите, событие завершит работу виртуальной машины. Вы должны запустить свою виртуальную машину в режиме отладки:

-Xdebug -Xrunjdwp: transport = dt_socket, address = 8000, server = y, suspend = n

Затем в Eclipse, например, создайте новый профиль удаленного приложения. Проверь это : http://www.ibm.com/developerworks/opensource/library/os-eclipse-javadebug/index.html

...