Java源码示例:com.alibaba.jvm.sandbox.api.event.Event.Type

示例1
public synchronized void watch() {
    new EventWatchBuilder(watcher)
        .onClass("org.springframework.beans.factory.support.SimpleInstantiationStrategy")
        .onBehavior("instantiate")
        .onWatch(new AdviceAdapterListener(new AdviceListener() {
            @Override
            protected void afterReturning(Advice advice) throws Throwable {
                try {
                    /* (RootBeanDefinition beanDefinition, String beanName...) */
                    String beanName = advice.getParameterArray()[1].toString();
                    Object target = advice.getReturnObj();
                    SpringContextInnerContainer.addBean(beanName, advice.getReturnObj());
                    log.info("Register bean:name={},instance={}", beanName, target);
                } catch (Exception e) {
                    log.error("[Error-2000]-register spring bean occurred error.", e);
                }
            }
        }), Type.BEFORE, Type.RETURN);
}
 
示例2
@Override
protected List<EnhanceModel> getEnhanceModels() {
    EnhanceModel em = EnhanceModel.builder()
            .classPattern("com.ibatis.sqlmap.engine.impl.SqlMapSessionImpl")
            .methodPatterns(EnhanceModel.MethodPattern.transform(
                    "queryForObject",
                    "queryForList",
                    "queryWithRowHandler",
                    "queryForPaginatedList",
                    "queryForMap",
                    "insert",
                    "update",
                    "delete")
            )
            .watchTypes(Type.BEFORE, Type.RETURN, Type.THROWS)
            .build();
    return Lists.newArrayList(em);
}
 
示例3
@ConstructorProperties({"classPattern", "methodPatterns", "watchTypes", "includeSubClasses"})
EnhanceModel(String classPattern, EnhanceModel.MethodPattern[] methodPatterns, Type[] watchTypes, boolean includeSubClasses) {
    this.classPattern = classPattern;
    this.methodPatterns = methodPatterns;
    this.watchTypes = watchTypes;
    this.includeSubClasses = includeSubClasses;
}
 
示例4
/**
 * 行为转换
 *
 * @param behavior 行为模型
 * @return 增强类模型
 */
public static EnhanceModel convert(Behavior behavior) {
    return EnhanceModel.builder()
            .classPattern(behavior.getClassPattern())
            .methodPatterns(MethodPattern.transform(behavior.getMethodPatterns()))
            .includeSubClasses(behavior.isIncludeSubClasses())
            .watchTypes(Type.BEFORE, Type.RETURN, Type.THROWS)
            .build();
}
 
示例5
public synchronized void watch(RepeaterConfig config) {
    if (config != null && config.isUseTtl()) {
        new EventWatchBuilder(watcher)
            .onClass("java.util.concurrent.ThreadPoolExecutor").includeBootstrap()
            .onBehavior("execute")
            .onBehavior("submit")
            .onClass("java.util.concurrent.ScheduledThreadPoolExecutor").includeBootstrap()
            .onBehavior("execute")
            .onBehavior("submit")
            .onBehavior("schedule")
            .onBehavior("scheduleAtFixedRate")
            .onBehavior("scheduleWithFixedDelay")
            .onWatch(new AdviceAdapterListener(new AdviceListener() {
                @Override
                protected void before(Advice advice) throws Throwable {
                    // 包装成ttl
                    final Object[] parameterArray = advice.getParameterArray();
                    final Class<?>[] parameterTypeArray = advice.getBehavior().getParameterTypes();
                    if (parameterArray == null || parameterArray.length < 1) {return;}
                    if (parameterArray[0] instanceof com.alibaba.ttl.TtlEnhanced) {return;}
                    Class<?> parameter0Type = parameterTypeArray[0];
                    if (parameter0Type.isAssignableFrom(Runnable.class)) {
                        parameterArray[0] = TtlRunnable.get((Runnable) parameterArray[0]);
                    }
                    if (parameter0Type.isAssignableFrom(Callable.class)) {
                        parameterArray[0] = TtlCallable.get((Callable) parameterArray[0]);
                    }
                }
                // fix issue #41
            }), Type.BEFORE, Type.RETURN, Type.THROWS);
    }
}
 
示例6
/**
 * 计算采样率
 *
 * @param event 事件
 * @return 是否采样
 */
protected boolean sample(Event event) {
    if (entrance && event.type == Type.BEFORE) {
        return Tracer.getContext().inTimeSample(invokeType);
    } else {
        final TraceContext context = Tracer.getContext();
        return context != null && context.isSampled();
    }
}
 
示例7
@Override
public Object assembleResponse(Event event) {
    if (event.type == Type.RETURN) {
        return ((ReturnEvent) event).object;
    }
    return null;
}
 
示例8
@Override
protected List<EnhanceModel> getEnhanceModels() {
    EnhanceModel em = EnhanceModel.builder()
            .classPattern("org.apache.ibatis.binding.MapperMethod")
            .methodPatterns(EnhanceModel.MethodPattern.transform("execute"))
            .watchTypes(Type.BEFORE, Type.RETURN, Type.THROWS)
            .build();
    return Lists.newArrayList(em);
}
 
示例9
public Transformer(final Filter filter,
                   final EventListener listener,
                   final Event.Type... eventTypes) {
    this.filter = filter;
    this.listener = listener;
    this.eventTypes = eventTypes;
}
 
示例10
public Transformer(final Filter filter,
                   final AdviceListener listener,
                   final Event.Type... eventTypes) {
    this.filter = filter;
    this.listener = new InterruptedAdviceAdapterListener(listener);
    final List<Event.Type> eventTypeList = new ArrayList<Event.Type>();
    CollectionUtils.addAll(eventTypeList, toArray(BEFORE, RETURN, THROWS, IMMEDIATELY_THROWS, IMMEDIATELY_RETURN));
    CollectionUtils.addAll(eventTypeList, eventTypes);
    this.eventTypes = eventTypeList.toArray(new Event.Type[]{});
}
 
示例11
public JvmHelper defineClass(final Class<?>[] classes,
                             final Filter filter,
                             final EventListener listener,
                             final Event.Type... eventTypes) throws IllegalAccessException, IOException, InvocationTargetException {
    return defineClass(
            classes,
            new Transformer(filter, listener, eventTypes)
    );
}
 
示例12
public Type[] getWatchTypes() {
    return this.watchTypes;
}
 
示例13
public JvmHelper defineClass(final Class<?> clazz,
                             final Filter filter,
                             final EventListener listener,
                             final Event.Type... eventType) throws IllegalAccessException, IOException, InvocationTargetException {
    return defineClass(new Class<?>[]{clazz}, filter, listener, eventType);
}
 
示例14
/**
 * 是否入口处理开始
 *
 * @param event 事件
 * @return true/false
 */
protected boolean isEntranceBegin(Event event) {
    return event.type == Type.BEFORE;
}
 
示例15
/**
 * 是否入口处理完成;非around事件需要重写
 *
 * @param event 事件
 * @return true/false
 */
protected boolean isEntranceFinish(Event event) {
    return event.type != Type.BEFORE
            // 开启trace的类型负责清理
            && Tracer.getContext().getInvokeType() == invokeType;
}