快速业务通道

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

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-19
们应用于 EJB。清单 3 展示了样例 EJB 的 ejb-jar.xml 部署描述符:

清单 3. EJB 3 截取程序部署描述符

<ejb-jar xmlns="http://java.sun.com/xml/ns/javaee"   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"   xsi:schemaLocation="http://java.sun.com/xml/ns/javaee   http://java.sun.com/xml/ns/javaee/ejb-jar_3_0.xsd" version="3.0">   <interceptors>    <interceptor>      <interceptor-class>   org.runtimemonitoring.interceptors.ejb.EJBTracingInterceptor   </interceptor-class>       <around-invoke>         <method-name>trace</method-name>       </around-invoke>    </interceptor>   </interceptors>   <assembly-descriptor>    <interceptor-binding>      <ejb-name>AA4H-HibernateService</ejb-name>      <interceptor-class>   org.runtimemonitoring.interceptors.ejb.EJBTracingInterceptor   </interceptor-class>    </interceptor-binding>   </assembly-descriptor> </ejb-jar>

正如我在前面所提到过的,插装截取程序对于基于上下文或者基于范围/阈值的跟踪是有用的。而 InvocationContext 中的 EJB 调用参数值是可用的,这加强了插装截取程序的作用。这些值可以用于跟踪范围或其他上下文的复合名称。考虑一下包含有 issueRemoteOperation(String region、Command command) 方法的 org.myco.regional.RemoteManagement 类中的 EJB 调用。EJB 接受一个命令,然后远程调用根据域识别的服务器。在这个场景中,区域服务器遍布于一个广泛的地理区域,每一个区域服务都有自己的 WAN 特性。这里呈现的模式与 第 1 部分 中的 payroll-processing 例子类似,这是因为如果没有明确命令到底被分配到哪一个区域的话,确定一个 EJB 调用的运行时间是很困难的。您可能已经预料到,从距离一个洲远的区域调用的运行时间要比从隔壁调用的运行时间要长的多。但是您是可以从 InvocationContext 参数确定区域的,因此您只需将区域代码添加到跟踪复合名称并按区域划分性能数据,如清单 4 所示:

清单 4. EJB 3 截取程序实现上下文跟踪

String[] prefix = null; if(ctx.getTarget().getClass().getName()   .equals("org.myco.regional.RemoteManagement") &&   ctx.getMethod().getName().equals("issueRemoteOperation")) {   prefix = new String[]{"RemoteManagement",    ctx.getParameters()[0].toString(),    "issueRemoteOperation"}; } // Now add prefix to the tracing compound name

Servlet 过滤器截取程序

Java Servlet API 提供了一个叫做过滤器(filter)的构造,它与 EJB 3 截取程序非常类似,含有无需源代码的注入和元数据可用性。清单 5 展示了一个过滤器的 doFilter 方法,带有缩略了的插装。指标的复合名由过滤器类名和请求的统一资源标识符(Uniform Resource Identifier,URI)构建:

清单 5. servlet 过滤器截取程序方法

public void doFilter(ServletRequest req, ServletResponse resp,    FilterChain filterChain) throws IOException, ServletException {   String uri = null;   try {    uri = ((HttpServletRequest)req).getRequestURI();    tracer.startThreadInfoCapture(CPU + BLOCK + WAIT);    // ===================================    

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站: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号