Skip to content

EVENT INTRODUCE

luanjia edited this page Mar 5, 2019 · 3 revisions

BANNER

沙箱事件介绍

在JVM-Sandbox的世界观中,任何一个Java方法的调用都可以分解为BEFORERETURNTHROWS三个环节,由此在三个环节上引申出对应环节的事件探测流程控制机制

  • BEFORE事件:执行方法体之前被调用
  • RETURN事件:执行方法体返回之前被调用
  • THROWS事件:执行方法体抛出异常之前被调用

为了记录代码调用行记录,增加了一个LineEvent

  • LINE事件:方法行被执行后调用,目前仅记录行号

CALL事件系列是从GREYS中衍生过来的事件,它描述了一个方法内部,调用其他方法的过程。整个过程可以被描述成为三个阶段

  • CALL_BEFORE事件:一个方法被调用之前
  • CALL_RETURN事件:一个方法被调用正常返回之后
  • CALL_THROWS事件:一个方法被调用抛出异常之后

监听foo方法的BEFORE、RETURN、THROWS、LINE、CALL_BEFORE、CALL_RETURN、CALL_THROWS事件

void foo(){
	// BEFORE-EVENT
	try {

   		/*
   	 	* do something...
   	 	*/
    	try{
    	    //LINE-EVENT
    	    //CALL_BEFORE-EVENT
    		a();
    		//CALL_RETURN-EVENT
    	} catch (Throwable cause) {
    		// CALL_THROWS-EVENT
		}
		//LiNE-EVENT
    	// RETURN-EVENT
    	return;

	} catch (Throwable cause) {
    	// THROWS-EVENT
	}
}

严格意义上,IMMEDIATELY_RETURNIMMEDIATELY_THROWS不是事件,他们是流程控制机制,由com.alibaba.jvm.sandbox.api.ProcessControlException的throwReturnImmediately(Object)和throwThrowsImmediately(Throwable)触发,完成对方法的流程控制

  • IMMEDIATELY_RETURN:立即调用:RETURN事件
  • IMMEDIATELY_THROWS:立即调用:THROWS事件
                                        +-------+
                                        |       |
 +========+  <return>             +========+    | <return immediately>
 |        |  <return immediately> |        |    |
 | BEFORE |---------------------->| RETURN |<---+
 |        |                       |        |
 +========+                       +========+
     |                              |    ^
     |         <throws immediately> |    |
     |                              |    | <return immediately>
     |                              v    |
     |                            +========+
     |                            |        |
     +--------------------------->| THROWS |<---+
                    <throws>      |        |    |
        <throws immediately>      +========+    | <throws immediately>
                                        |       |
                                        +-------+

LOGO

JVM沙箱偏向于底层产品,受众面比较窄,问题反馈沟通很可能会因为各种原因造成不及时。所以我们建立了一个钉钉小群,方便大家在这里进行沟通。

Clone this wiki locally