java.lang.VerifyError when using byteman in JBOSS AS7
aceyin Sep 2, 2013 2:52 AMHi folks,
i am trying to use byteman in JBOSS AS7, but i always get the "java.lang.VerifyError" when i using "bmsubmit.sh" to submit a script.
Below is the full error message:
bmsubmit.sh -l aaa.btm
install rule aaa
VerifyError during retransformation : some rules may not have been correctly injected or uninjected!
java.lang.VerifyError
at sun.instrument.InstrumentationImpl.retransformClasses0(Native Method)
at sun.instrument.InstrumentationImpl.retransformClasses(InstrumentationImpl.java:144)
at org.jboss.byteman.agent.Retransformer.installScript(Retransformer.java:136)
at org.jboss.byteman.agent.TransformListener.handleScripts(TransformListener.java:337)
at org.jboss.byteman.agent.TransformListener.loadScripts(TransformListener.java:260)
at org.jboss.byteman.agent.TransformListener.handleConnection(TransformListener.java:213)
at org.jboss.byteman.agent.TransformListener.run(TransformListener.java:146)
Below is the script file i am trying to submit:
RULE aaa
CLASS com.abc.ddm.hwa.monitoring.handler.ApplicationMonitorHandler
METHOD getTime
IF true
DO System.out.println("AAAA")
ENDRULE
Below is the command i used to install the agent into JBOSS JVM:
bminstall.sh -b -Dorg.jboss.byteman.transform.all /opt/abc/local/jboss/jboss-modules.jar
I also tried to use the PID instead of jar file , but also failed.
Below is the command i used to check the script:
bmcheck.sh -cp /opt/abc/xxx/manager/webapps/monitor.war/WEB-INF/lib/ddm.jar aaa.btm
the check result indicates the script is OK:
Checking rule aaa against class com.abc.ddm.hwa.monitoring.handler.ApplicationMonitorHandler
Parsed rule "aaa" for class com.abc.ddm.hwa.monitoring.handler.ApplicationMonitorHandler
Type checked rule "aaa"
TestScript: no errors
But when i use bmsubmit to submit the script, the exception in the head of this post occurs.
And when i tried to submit below script, it successed and the trace message can printed successfully:
RULE trace thread start
CLASS java.lang.Thread
METHOD start()
IF true
DO traceln("*** start for thread: "+ $0.getName())
ENDRULE
does someone has idea about this issue?
Below is the environments used in my test:
JBOSS :
jboss-as-7.1.3.Final
JAVA :
java version "1.7.0_04"
Java(TM) SE Runtime Environment (build 1.7.0_04-b20)
Java HotSpot(TM) 64-Bit Server VM (build 23.0-b21, mixed mode)
OS version:
Linux 2.6.32-71.el6.x86_64
Byteman Version:
byteman-2.1.3
The source code fragment of com.abc.ddm.hwa.monitoring.handler.ApplicationMonitorHandler :
package com.abc.ddm.hwa.monitoring.handler;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.springframework.web.client.RestClientException;
import org.springframework.web.client.RestTemplate;
import com.abc.ddm.hwa.monitoring.hwa.HwaClusterInfo;
import com.abc.ddm.hwa.monitoring.hwa.HwaMonitorConfig;
import com.abc.ddm.hwa.monitoring.hwa.MonitorApis;
import com.abc.ddm.hwa.monitoring.servlet.FilterData;
import com.abc.ddm.hwa.monitoring.servlet.HostedWebAppInfo;
import com.abc.ddm.hwa.monitoring.servlet.HostedWebAppInfoXmlHelper;
import com.abc.ddm.hwa.monitoring.servlet.HttpClient;
import com.abc.ddm.hwa.monitoring.servlet.MonitorDataSummaryHelper;
public class ApplicationMonitorHandler extends AbstractHandler {
......
public String getTime() {
SimpleDateFormat sdf = new SimpleDateFormat(TIME_FORMAT);
return sdf.format(Calendar.getInstance().getTime());
}
......
}