2012-08-10 21 views
39

Me gustaría aprender algo sobre javaagents, pero investigar no es fácil. La mayoría del resultado se refiere a JADE. Sé agente de Java puede significar dos cosas:Tutoriales sobre javaagents

  1. Un agente programado en Java es una encarnación del agente concepto de sistemas distribuidos.
  2. Un componente de software de bajo nivel para aumentar el funcionamiento de una JVM, tales como perfiladores , herramientas de código de cobertura, etc

he encontrado here pregunta similar, pero desafortunadamente también se refiere a la versión 1

¿Conoces algún artículo, tutorial para principiantes, proyecto de muestra sobre javaagent en la versión 2? He encontrado uno here, pero estoy buscando más.

+1

http://stackoverflow.com/questions/1277219/starting-a-java-agent-after-program-start también tiene algunos enlaces útiles – Vadzim

Respuesta

62

El segundo caso se trata de Java Instrumentation API - este enlace apunta a un Javadoc que es bastante descriptivo.

Y aquí está la instrucción completa y example of how to create java instrumentation agent.

El concepto principal es:

  1. implementar un método estático premain (como una analogía a main), así:

    import java.lang.instrument.Instrumentation; 
    
    class Example { 
        public static void premain(String args, Instrumentation inst) { 
         ... 
        } 
    } 
    
  2. Crear un archivo de manifiesto (por ejemplo, manifest.txt) marcando esta clase para la ejecución pre-principal. Sus contenidos son:

    Premain-Class: Example 
    
  3. compilar la clase y el paquete de esta clase en un archivo JAR:

    javac Example.java 
    jar cmf manifest.txt yourAwesomeAgent.jar *.class 
    
  4. ejecutar su JVM con -javaagent parámetro, así:

    java -javaagent:yourAwesomeAgent.jar -jar yourApp.jar 
    
+8

Es importante que el parámetro '-javaagent' vaya antes del parámetro' -jar'. – berezovskyi

+1

Tuve que agregar una entrada adicional a mi manifiesto para que funcione con el uso de Javassist. Puede ver en mi respuesta a esta pregunta: https://stackoverflow.com/questions/10423319/how-do-you-analyze-fatal-javaagent-errors – 11101101b

+1

Recientemente, seguí estos pasos para crear un agente. Seguí teniendo problemas para crear el contenedor, hasta que descubrí que el comando debería haber enumerado primero el archivo .jar de destino y luego el archivo de manifiesto. –

Cuestiones relacionadas