byteman with as 7 20130925

Download Byteman with as 7 20130925

If you can't read please download the document

Upload: jooho-lee

Post on 16-Apr-2017

832 views

Category:

Technology


3 download

TRANSCRIPT

Byteman with JBoss AS 7

Jooho Lee(Jay)JBoss Technical Engineer

Agenda

Configure JBoss AS 7 for BytemanDownload Byteman

Add Byteman Agent

Add Byteman Environment

Test SampleSample script

Check Byteman script

Demo

Configure JBoss AS 7

Test EnvironmentEAP 6.1 (JBoss AS 7.2)

Byteman 2.1.3

Standalone Mode

Configure JBoss AS 7

Download Bytemanhttp://www.jboss.org/byteman/downloads

BYTEMAN_HOME=/home/jooho/Applications/ProdGit/product-distributions/byteman

Structure of Directorymy-script folder is created by me

Configure JBoss AS 7

Add Byteman Agent / Environment Edit EAP_HOME/bin/standalone.conf

Add bold text following :

export BYTEMAN_HOME=/home/jooho/Applications/ProdGit/product-distributions/byteman

if [ "x$JAVA_OPTS" = "x" ]; then JAVA_OPTS="-Xms1303m -Xmx1303m -XX:MaxPermSize=256m -Djava.net.preferIPv4Stack=true" JAVA_OPTS="$JAVA_OPTS -Djboss.modules.system.pkgs=$JBOSS_MODULES_SYSTEM_PKGS -Djava.awt.headless=true" JAVA_OPTS="$JAVA_OPTS -Dorg.jboss.byteman.transform.all -javaagent:${BYTEMAN_HOME}/lib/byteman.jar=script:${BYTEMAN_HOME}/my-scripts/test.btm,boot:${BYTEMAN_HOME}/lib/byteman.jar,listener:true"

Configure JBoss AS 7

Byteman Agent
The agent reads byteman scripts when the application is launched and applies the rules to any code which matches a rule in the supplied scripts.

-javaagent options:script:scriptfile
where scriptfile is a path to a file containing Byteman rules. This option causes the agent to read the rules in scriptFile and apply them to subsequently loaded classes. Multiple script arguments may be provided to ensure that more than one rule set is installed. It is possible to start the agent with no initial script arguments but this only makes sense if the listener option is supplied with value true.

listener:boolean
where boolean is either true or false. This option causes the agent to start a listener thread at startup. The listener can be talked to using the bmsubmit script, either to provide listings of rule applications performed by the agent or to dynamically load, reload or unload rules. Loading or reloading of a rule causes any matching classes which have already been loaded into the JVM to be retransformed, inserting a trigger call for the newly loaded rules into their target methods. Unloading a rule causes trigger code to be removed from any matching classes.

boot:jarfile
where jarfile is a path to to a jar file to be added to the JVM bootstrap class path. This option provides a similar facility to the sys option but it ensures that the classes contained in the jar file are loaded by the bootstrap class loader. This is only significant when rules try to inject code into JVM classes which are loaded by the bootstrap class loader (which is a parent of the system loader).

Configure JBoss AS 7

Environmentorg.jboss.byteman.transform.all
This environment prop is set then the agent will allow rules to be injected into methods of classes in the java.lang hierarchy. (Note that this will require the Byteman jar to be installed in the bootstrap classpath using the boot: option to the -javaagent JVM command line argument.)

Test Sample

Sample Web Application

package org.jhouse.test;

public class Helloworld {

public String sayHello(String name){System.out.println("Hello "+ name);return "Hello "+ name;}}

package org.jhouse.test;Import ..../** * Servlet implementation class CallTest */@WebServlet("/CallTest")public class CallTest extends HttpServlet {.........protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {Helloworld hw = new Helloworld();hw.sayHello("JHOUSE");}}

Test Sample

Sample script(test.btm)Description : When sayHello(String name) in org.jhouse.test.Helloworld class is called, the name will print out like Name : $1.

RULE test1CLASS org.jhouse.test.HelloworldMETHOD sayHello(String)AT ENTRYIF trueDO traceln("Name : "+$1)ENDRULE

Test Sample

[stdout] (http-/127.0.0.1:8080-1) Rule.execute called for test1_0 ==> [stdout] (http-/127.0.0.1:8080-1) test1 execute[stdout] (http-/127.0.0.1:8080-1) JHOUSE JHOUSE[stdout] (http-/127.0.0.1:8080-1) Hello JHOUSE

==> Entry sayHello() method

==> Syste.out.println() in sayHello()

Result Byteman Rule Log :