¿Es posible insertar un javaagent después del inicio de la máquina virtual desde la misma máquina virtual?Iniciar un agente de Java después del inicio del programa
Digamos, por ejemplo, que tenemos un agente en un contenedor myagent.jar con la configuración de metadatos adecuada y un método agentmain ya implementado. Ahora el programa de los usuarios llama a una llamada de API que debería resultar en la inserción del agente para que pueda redefinir las clases.
¿Se puede hacer y cómo?
Sin embargo, no especifica cuál es la llamada al método. Sin embargo, si miramos más adentro ((URLClassLoader) ClassLoader.getSystemClassLoader()). AddURL (....) ¿dónde la URL agregada apuntó al resultado myagent.jar en el que se llama al agente principal? –
¿Es este Java 6 en general o solo con HotSpot? –
@Paul: No lo he probado, así que no puedo decir si funciona así, pero parece razonable. Sin embargo, tendrá que llamar a addURL por reflexión ya que está protegido. Algo así como: URLClassLoader sysloader = (URLClassLoader) ClassLoader.getSystemClassLoader(); \t Clase sysclass = URLClassLoader.class; \t try { \t \t Método method = sysclass.getDeclaredMethod ("addURL", parámetros); \t \t method.setAccessible (true); \t \t method.invoke (sysloader, new Object [] {yourURL}); \t} – HerdplattenToni