Unknown helper class executing rule in EAP
johara Jul 2, 2013 1:08 PMI am trying to instrument a class in a postgres jdbc driver deployed into EAP as a module, using a custom Helper class. Whenever the rule is executed, org.jboss.byteman.rule.Rule.typeCheck can not resolve the custom Helper class, and throws the follwoing exception:
org.jboss.byteman.rule.exception.TypeException: Rule.typecheck : unknown helper class ... for rule ...
I have tried including the jar in the sys and boot classpath argurments, I have tried submitting the jar to an running jvm with 'bmsubmit.sh -b' but have not been able to use my Helper class in EAP 6.1.
Debugging shows that the classloader (an instance of org.jboss.modules.ModuleClassLoader) can find org.jboss.byteman.rule.helper.Helper, but can not find not my rule.
Has anyone seen this problem before, have I missed something?
Any help resolving the issue I am experiecing would be gratefully appreciated.
For brevity, these are simpilfied parameters/scripts that I am having an issue running;
postgresInstrumentExample.btm;
RULE execute query entry
CLASS org.postgresql.core.v3.QueryExecutorImpl
METHOD execute
HELPER org.jboss.perf.InstrumentHelperExample
AT ENTRY
BIND query = $1
IF TRUE
DO dummyLog(Thread.currentThread().getId())
ENDRULE
org.jboss.perf.InstrumentHelperExample;
package org.jboss.perf;
import org.jboss.byteman.rule.Rule;
import org.jboss.byteman.rule.helper.Helper;
public class InstrumentHelperExample extends Helper {
protected InstrumentHelperExample(Rule rule) {
super(rule);
}
public void dummyLog(long threadID){
traceln("Started: ".concat(String.valueOf(threadID)));
}
}
jvm command line options passed to EAP;
JAVA_OPTS="$JAVA_OPTS -Dorg.jboss.byteman.transform.all -javaagent:${BYTEMAN_HOME}/lib/byteman.jar=listener:true,boot:${BYTEMAN_HOME}/lib/byteman.jar,sys:/tmp/byteman/postgresInstrument-1.0-SNAPSHOT.jar"
contents of helper jar;
$ jar tf ./target/postgresInstrument-1.0-SNAPSHOT.jar
META-INF/
META-INF/MANIFEST.MF
org/
org/jboss/
org/jboss/perf/
org/jboss/perf/InstrumentHelperExample.class
org/jboss/perf/InstrumentHelper.class
META-INF/maven/
META-INF/maven/org.jboss.perf/
META-INF/maven/org.jboss.perf/postgresInstrument/
META-INF/maven/org.jboss.perf/postgresInstrument/pom.xml
META-INF/maven/org.jboss.perf/postgresInstrument/pom.properties
stack trace of error;
17:38:17,416 INFO [stdout] (JBossWeb-threads - 36) Rule.execute called for execute query entry_2
17:38:17,418 INFO [stdout] (JBossWeb-threads - 36) Rule.ensureTypeCheckedCompiled : error type checking rule execute query entry
17:38:17,418 INFO [stdout] (JBossWeb-threads - 36) org.jboss.byteman.rule.exception.TypeException: Rule.typecheck : unknown helper class org.jboss.perf.InstrumentHelperExample for rule execute query entry
17:38:17,418 INFO [stdout] (JBossWeb-threads - 36) at org.jboss.byteman.rule.Rule.typeCheck(Rule.java:502)
17:38:17,418 INFO [stdout] (JBossWeb-threads - 36) at org.jboss.byteman.rule.Rule.ensureTypeCheckedCompiled(Rule.java:449)
17:38:17,418 INFO [stdout] (JBossWeb-threads - 36) at org.jboss.byteman.rule.Rule.execute(Rule.java:670)
17:38:17,418 INFO [stdout] (JBossWeb-threads - 36) at org.jboss.byteman.rule.Rule.execute(Rule.java:651)
17:38:17,418 INFO [stdout] (JBossWeb-threads - 36) at org.postgresql.core.v3.QueryExecutorImpl.execute(QueryExecutorImpl.java)