Rule execution for java.util.concurrent.ThreadPoolExecutor
jaikiran Apr 14, 2010 1:30 PMI am trying out Byteman (1.2.2) against JBoss AS. The rule script includes a rule for java.util.concurrent.ThreadPoolExecutor and one for a JBoss specific class: {code} RULE ThreadPoolExecutor_Creation CLASS ^java.util.concurrent.ThreadPoolExecutor METHOD AT ENTRY IF TRUE DO System.out.println("Creating threadpool executor") ENDRULE RULE ThreadPoolExecutor_Shutdown CLASS ^java.util.concurrent.ThreadPoolExecutor METHOD shutdown AT ENTRY IF TRUE DO System.out.println("Shutting down threadpool executor") ENDRULE RULE test123 CLASS org.jboss.bootstrap.impl.as.server.JBossASServerImpl METHOD AT ENTRY IF TRUE DO System.out.println("hellllooooo") ENDRULE {code} The startup script includes enabling verbose logging and dumping the class file: {code} JAVA_OPTS="-Xms128m -Xmx512m -XX:MaxPermSize=256m -Dorg.jboss.resolver.warning=true -javaagent:$BYTEMAN_HOME/lib/byteman.jar=script:/home/jaikiran/Desktop/bytemanrule.txt -Dorg.jboss.byteman.verbose -Dorg.jboss.byteman.dump.generated.classes -Dorg.jboss.byteman.dump.generated.classes.directory=/home/jaikiran/deleteme" {code} When I start the JBoss AS, I can see that the JVM options are picked up and even verbose logging is triggered: {code} jaikiran@jaikiran-desktop:bin$ ./run.sh -b 0.0.0.0 ========================================================================= JBoss Bootstrap Environment JBOSS_HOME: /home/jaikiran/jbossas/trunk/build/target/jboss-6.0.0-SNAPSHOT JAVA: /opt/Java/SunJava-6/jdk1.6.0_16//bin/java JAVA_OPTS: -server -Xms128m -Xmx512m -XX:MaxPermSize=256m -Dorg.jboss.resolver.warning=true -javaagent:/home/jaikiran/byteman/lib/byteman.jar=script:/home/jaikiran/Desktop/bytemanrule.txt -Dorg.jboss.byteman.transform.all -Dorg.jboss.byteman.verbose -Dorg.jboss.byteman.dump.generated.classes -Dorg.jboss.byteman.dump.generated.classes.directory=/home/jaikiran/deleteme -Djava.net.preferIPv4Stack=true -Dprogram.name=run.sh -Djava.library.path=/home/jaikiran/jbossas/trunk/build/target/jboss-6.0.0-SNAPSHOT/bin/native/lib CLASSPATH: /home/jaikiran/jbossas/trunk/build/target/jboss-6.0.0-SNAPSHOT/bin/run.jar:/opt/Java/SunJava-6/jdk1.6.0_16//lib/tools.jar ========================================================================= org.jboss.byteman.agent.Transformer : possible trigger for rule test123 in class org.jboss.bootstrap.impl.as.server.JBossASServerImpl RuleTriggerMethodAdapter.injectTriggerPoint : inserting trigger into method () void for rule test123 RuleTriggerMethodAdapter.injectTriggerPoint : inserting trigger into method (org.jboss.bootstrap.api.as.config.JBossASServerConfig) void for rule test123 org.jboss.byteman.agent.Transformer : inserted trigger for test123 in class org.jboss.bootstrap.impl.as.server.JBossASServerImpl org.jboss.byteman.agent.Transformer : Saving transformed bytes to /home/jaikiran/deleteme/org/jboss/bootstrap/impl/as/server/JBossASServerImpl.class Rule.execute called for test123_1 test123 execute hellllooooo Rule.execute called for test123_0 test123 execute hellllooooo 22:41:24,074 INFO [AbstractJBossASServerBase] Server Configuration: JBOSS_HOME URL: file:/home/jaikiran/NotBackedUp/business/jboss/wc/jbossas/trunk/build/target/jboss-6.0.0-SNAPSHOT/ Bootstrap: $JBOSS_HOME/server/default/conf/bootstrap.xml Common Base: $JBOSS_HOME/common/ Common Library: $JBOSS_HOME/common/lib/ Server Name: default Server Base: $JBOSS_HOME/server/ Server Library: $JBOSS_HOME/server/default/lib/ Server Config: $JBOSS_HOME/server/default/conf/ Server Home: $JBOSS_HOME/server/default/ Server Data: $JBOSS_HOME/server/default/data/ Server Log: $JBOSS_HOME/server/default/log/ Server Temp: $JBOSS_HOME/server/default/tmp/ 22:41:24,082 INFO [AbstractServer] Starting: JBossAS [6.0.0.SNAPSHOT "Neo"] org.jboss.byteman.agent.Transformer : possible trigger for rule ThreadPoolExecutor_Creation in class java.util.concurrent.ThreadPoolExecutor RuleTriggerMethodAdapter.injectTriggerPoint : inserting trigger into method (int,int,long,java.util.concurrent.TimeUnit,java.util.concurrent.BlockingQueue) void for rule ThreadPoolExecutor_Creation RuleTriggerMethodAdapter.injectTriggerPoint : inserting trigger into method (int,int,long,java.util.concurrent.TimeUnit,java.util.concurrent.BlockingQueue,java.util.concurrent.ThreadFactory) void for rule ThreadPoolExecutor_Creation RuleTriggerMethodAdapter.injectTriggerPoint : inserting trigger into method (int,int,long,java.util.concurrent.TimeUnit,java.util.concurrent.BlockingQueue,java.util.concurrent.RejectedExecutionHandler) void for rule ThreadPoolExecutor_Creation RuleTriggerMethodAdapter.injectTriggerPoint : inserting trigger into method (int,int,long,java.util.concurrent.TimeUnit,java.util.concurrent.BlockingQueue,java.util.concurrent.ThreadFactory,java.util.concurrent.RejectedExecutionHandler) void for rule ThreadPoolExecutor_Creation org.jboss.byteman.agent.Transformer : inserted trigger for ThreadPoolExecutor_Creation in class java.util.concurrent.ThreadPoolExecutor org.jboss.byteman.agent.Transformer : possible trigger for rule log on threadpoolexecutor shutdown in class java.util.concurrent.ThreadPoolExecutor RuleTriggerMethodAdapter.injectTriggerPoint : inserting trigger into method shutdown() void for rule log on threadpoolexecutor shutdown org.jboss.byteman.agent.Transformer : inserted trigger for log on threadpoolexecutor shutdown in class java.util.concurrent.ThreadPoolExecutor 22:41:27,514 INFO [ServerInfo] Java version: 1.6.0_16,Sun Microsystems Inc. 22:41:27,515 INFO [ServerInfo] Java Runtime: Java(TM) SE Runtime Environment (build 1.6.0_16-b01) 22:41:27,515 INFO [ServerInfo] Java VM: Java HotSpot(TM) Server VM 14.2-b01,Sun Microsystems Inc. 22:41:27,515 INFO [ServerInfo] OS-System: Linux 2.6.28-18-generic,i386 22:41:27,515 INFO [ServerInfo] VM arguments: -Xms128m -Xmx512m -XX:MaxPermSize=256m -Dorg.jboss.resolver.warning=true -javaagent:/home/jaikiran/NotBackedUp/business/me/byteman/lib/byteman.jar=script:/home/jaikiran/Desktop/bytemanrule.txt -Dorg.jboss.byteman.verbose -Dorg.jboss.byteman.dump.generated.classes -Dorg.jboss.byteman.dump.generated.classes.directory=/home/jaikiran/deleteme -Djava.net.preferIPv4Stack=true -Dprogram.name=run.sh -Djava.library.path=/home/jaikiran/NotBackedUp/business/jboss/wc/jbossas/trunk/build/target/jboss-6.0.0-SNAPSHOT/bin/native/lib -Djava.endorsed.dirs=/home/jaikiran/NotBackedUp/business/jboss/wc/jbossas/trunk/build/target/jboss-6.0.0-SNAPSHOT/lib/endorsed 22:41:27,570 INFO [JMXKernel] Legacy JMX core initialized ... {code} but the rule for java.util.concurrent.ThreadPoolExecutor is never *executed*. The logs just show that the transformation is inserted, but there's no rule execution. Unlike for java.* package, I can see that for the JBoss specific package, the rule is executed: {code} 22:34:59,450 INFO [STDOUT] org.jboss.byteman.agent.Transformer : possible trigger for rule test456 in class org.jboss.system.server.jmx.JMXConnector 22:34:59,451 INFO [STDOUT] RuleTriggerMethodAdapter.injectTriggerPoint : inserting trigger into method () void for rule test456 22:34:59,453 INFO [STDOUT] org.jboss.byteman.agent.Transformer : inserted trigger for test456 in class org.jboss.system.server.jmx.JMXConnector 22:34:59,454 INFO [STDOUT] org.jboss.byteman.agent.Transformer : Saving transformed bytes to /home/jaikiran/deleteme/org/jboss/system/server/jmx/JMXConnector.class 22:34:59,465 INFO [STDOUT] Rule.execute called for test456_7 22:34:59,466 INFO [STDOUT] test456 execute 22:34:59,466 INFO [STDOUT] wohooooooooooooooooooooooooooooooooooooooooooooo {code} Also, the transformed class file is dumped only for org.jboss.* class and not for java.* class. Is there something I am missing with enabling rule execution for java.* package? P.S: I have tried adding -Dorg.jboss.byteman.transform.all property, but that didn't help (I did not expect that to work anyway :) )