快速业务通道

AOP@Work: 用AspectJ进行性能监视,第2部分 - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-15
eStrategy { public void appendOperationName(PerfStats stats, StringBuffer buffer) { PerfStats parent = stats.getParent(); if (parent != null) { appendOperationName(parent, buffer); buffer.append('',''); else { if (stats instanceof OperationStats) { OperationStats opStats = (OperationStats)stats; String contextName = opStats.getContextName(); if (contextName != null) { buffer.append("application=\""); int pos = buffer.length(); buffer.append(contextName); JmxManagement.jmxEncode(buffer, pos); buffer.append("\","); } } } buffer.append(stats.getDescription()); buffer.append(''=''); stats.appendName(buffer); } }

AOP@Work: 用AspectJ进行性能监视,第2部分(7)

时间:2011-09-07 IBM Ron Bodkin

清单 5 展示了我如何设置 StatsJmxManagement 以允许不同的命名策略。为 了使用像 JConsole 这样的 GUI 工具,我列出了一个 GuiFriendlyStatsJmxNameStrategy,它返回如清单 5 和图 1 所示的名字。除 此 之外,完整的代码包括另一个可选的 CanonicalStatsJmxNameStrategy,它遵守 JMX 建议的 MBean 命名方式,但是在我所试过的所有 JMX 工具中不能显示。

用于构建这些名字的基本方法是,创建一个字符串缓冲区并递归地得到父统 计 的操作名,然后在后面加上这个名字。对于顶级操作统计,首先加入上下文(应 用程序)名。为了支持这种方法,我在 PerfStats 中增加了 getDescription() 方法。还更新了操作和资源统计实现以设置合适的值(如 operation, operation1, .., resource, and request)。下载 Glassbox Inspector 源代 码 以查看所有细节和另一个可选的 CanonicalStatsJmxNameStrategy。

监视 Web 服务调用

Glassbox Inspector 框架现在很容易扩展以支持新类型的请求(操作)以及 新资源。监视提供的(收到的)远程服务操作与监视 Web 应用程序框架很相似 : 本文的源代码给出了监视用 Apache Axis 实现的服务的一个例子。

只需要很少的调整就可以将这个 Glassbox Inspector 扩展为监视应用程序 之 外的远程服务的使用。随着具有面向服务体系结构的应用程序越来越常见,跟踪 外部控制的服务的可靠性及确定应用程序问题的相互关系越来越重要了。将这些 数据与应用程序上下文(如执行的 Web 操作和在其他资源上花费的时间)相关 联 是迅速找出应用程序故障根源的重要方法。这种分析与使用 SOAP 处理程序孤立 地监视 Web 服务调用有很大不同,因为它将实现信息与外部请求的性能连接到 一 起了。

清单 6 展示了一个远程调用监视器,它监视通过 JAX-RPC API 对 Web 服务 的调用以及 RMI 调用(它本身通常是远程的):

清单 6. 监视远程调用

public aspect RemoteCallMonitor extends AbstractResourceMonitor {  /** Call to remote proxy: RMI or JAX-RPC */  public pointcut remoteProxyCall(Object recipient) :    call(public * Remote+.* (..) throws RemoteException) &&    target(recipient) && !within(glassbox.inspector..*);  /** Monitor remote proxy calls based on called class and method */  Object around (final Object recipient) :   remoteProxyCall(recipient) {     RequestContext requestContext = new ResourceRequestContext() {      public Object doExecute() {        return proceed(recipient);      }      public PerfStats lookupStats() {        String key = "jaxrpc:"+recipient.getClass().getName()+   

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