Tras el primer post dedicado a Byteman (leer aquí) hoy nos toca ver algunos conceptos más avanzados.
Script bmjava
En el post anterior ejecutábamos este comando:
Esto mismo se puede hacer con el script bmjava.sh o bmjava.bat
(bmjava -l BytemanThreadRule.btm BytemanThreadExample Hilo1 Hilo2 Hilo3)
¿Cómo chequear si una regla es correcta?
Puedo usar el script bmcheck
¿Cómo cargar rules Byteman en un programa en ejecución?
Con Byteman podemos cargar y descargar reglas sobre un programa en ejecución:
Para esto hay que indicarle a Byteman que arranque su agent listener. Para esto se lanza con la opción listener=true
java -javaagent:%BYTEMAN_HOME%libbyteman.jar=listener:true,boot:%BYTEMAN_HOME%libbyteman.jar -Dorg.jboss.byteman.transform.all AppMain
El comando está escuchando lo escrito por consola y lo vuelve a imprimir:
Para hablar con el agent listener uso el comando bmsubmit o java -classpath %BYTEMAN_HOME%libbyteman-submit.jar org.jboss.byteman.agent.submit.Submit
Donde puedo ver que no tengo reglas cargadas aún.
Ahora cargaré la regla definida en el post anterior (BytemanThreadRule.btm)
bmsubmit -l BytemanThreadRule.btm
Si ahora ejecuto el programa veré como se ha cargado la regla:
Para descargar las reglas usaré bmsubmit -u BytemanThreadRule.btm
¿Cómo instalar el agente en un programa en ejecución?
Byteman también me permite instalar el agente en un programa Java en ejecución, si ejecuto el programa sin agente:
Necesito su PID, en Windows se puede ver en el administrador de tareas:
Y luego usaré el comando bminstall
Y luego ya puedo cargar la regla: