快速业务通道

Java运行时监控,第2部分: 编译后插装和性能监控 - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-19
服务器指标(参见 参考资料)。即使您的 APM 供应商没有提供自动读取这个数据的功能,读完本篇文章之后您也会知道如何自行读取。

在下一个例子中,我将向一个称为 org.aa4h.ejb.HibernateService 的无状态会话的上下文 bean 中注入一个截取程序。EJB 3 截取程序的要求和依赖性都是相当小的:

接口:javax.interceptor.InvocationContext

注释:javax.interceptor.AroundInvoke

目标方法:任何一个名称里面有 public Object anyName(InvocationContext ic) 的方法

Java运行时监控,第2部分: 编译后插装和性能监控(4)

时间:2011-02-13 IBM Nicholas Whitehead

清单 2 展示了样例 EJB 的截取方法:

清单 2. EJB 3 截取程序方法

@AroundInvoke public Object trace(InvocationContext ctx) throws Exception {   Object returnValue = null;   int concur = concurrency.incrementAndGet();   tracer.trace(concur, "EJB Interceptors", ctx.getTarget().getClass()         .getName(), ctx.getMethod().getName(),         "Concurrent Invocations");   try {    tracer.startThreadInfoCapture(CPU + BLOCK + WAIT);    // ===================================    //  This is the target.    // ===================================    returnValue = ctx.proceed();    // ===================================    tracer.traceIncident("EJB Interceptors", ctx.getTarget().getClass()       .getName(), ctx.getMethod().getName(), "Responses");    concur = concurrency.decrementAndGet();    tracer.trace(concur, "EJB Interceptors", ctx.getTarget().getClass()       .getName(), ctx.getMethod().getName(),       "Concurrent Invocations");    return returnValue;   } catch (Exception e) {    tracer.traceIncident("EJB Interceptors", ctx.getTarget().getClass()       .getName(), ctx.getMethod().getName(), "Exceptions");    throw e;   } finally {    tracer.endThreadInfoCapture("EJB Interceptors", ctx.getTarget()       .getClass().getName(), ctx.getMethod().getName());    tracer.traceIncident("EJB Interceptors", ctx.getTarget().getClass()       .getName(), ctx.getMethod().getName(), "Invocations");   } }

如 清单 1 一样,清单 2 包含一个大的插装集,一般不推荐使用,此处仅作为一个例子使用。清单 2 中有以下几点需要注意:

@AroundInvoke 注释通过封装 EJB 调用而将方法标记为一个截取程序。

方法调用一直沿着栈传递调用,可能传递到最终目标,或到下一个截取程序。因此,要在调用该方法前确定度量基准,在调用后跟踪它。

传入跟踪方法的 InvocationContext 为截取程序提供全部有关调用的元数据,包括:

目标对象

目标方法名

所传递的参数

Java运行时监控,第2部分: 编译后插装和性能监控(5)

时间:2011-02-13 IBM Nicholas Whitehead

注意到这点是很重要的,因为该截取程序可以应用于很多不同的 EJB,因此要截取什么类型的调用是无法预知的。拥有一个可以从截取程序内部访问的元数据源是至关重要的:没有这个源的话,只能得到很少的关于被截取调用的信息;您的指标可以展示出很多有趣的趋势,但却无法明确它们所指的是哪个操作。

从插装的角度看,这些截取程序最有用之处在于您可以通过修改部署描述符而将它

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号