AOP@Work: 用AspectJ进行性能监视,第2部分 - 编程入门网
* @param key An object to uniquely identify the
* operation being performed.
*/
protected OperationStats getTopLevelStats(Object key) {
OperationStats stats;
synchronized(topLevelOperations) {
stats = (OperationStats)topLevelOperations.get(key);
if (stats == null) {
stats =
perfStatsFactory.createTopLevelOperationStats(key,
getContextName(controller));
topLevelOperations.put(key, stats);
}
}
return stats;
}
/**
* @return An object that uniquely identifies the operation
* being performed.
*/
protected abstract Object getKey();
/** The current controller object executing, if any. */
protected Object controller;
};
/**
* This advice stores the controller object whenever we construct a
* request context.
*/
after(Object controller) returning (OperationRequestContext ctxt) :
cflow (adviceexecution() && args(controller, ..) &&
this(AbstractOperationMonitor)) &&
call (OperationRequestContext+.new(..)) {
ctxt.controller = controller;
}
...
AOP@Work: 用AspectJ进行性能监视,第2部分(2)时间:2011-09-07 IBM Ron BodkinAbstractOperationMonitor 的第一部分扩展了本文第 1 部分中原来的 Servlet 监视器以查看嵌套操作的统计。使用嵌套操作使我们可以在分派 JSP 或 者分解 Web 服务或者多方法应用程序控制器的不同方法这样的情况下跟踪资源 占 用。原来的 lookupStats() 方法现在检查父请求上下文。如果有父请求,那么 它 调用新方法 getOperationStats() 以获取它。否则,它调用新方法 getTopLevelStats(),这个方法调用一个工厂以创建一个新的 OperationStats 。 使用工厂可以保证我的监视基础架构不依赖于统计类的实现。 监视多个应用程序 在清单 1 中,我还加入了对运行在单个应用服务器中的多个应用程序的监视 支持。主要是通过增加一个检查应用程序上下文的预查来做到这一点的。在检查 顶级统计时,我调用一个监视器模板方法 getContextName(),以确定操作关联 的 是哪一个应用程序。下面将会看到对于 Servlet 它是如何处理的。注意,向 getContextName() 方法传递了控制器的一个实例,这样就可以检查关联的应用 程 序上下文。 在抽象操作监视器中,还提供了具有具体建议的切点,它定义了监视请求的 常 用方法。对它做了扩展以便监视收到的请求,如 Struts 操作和收到的 Web 服 务 请求。清单 2 展示了一个代表性的例子: 清单 2. AbstractOperationMonitor 中的监视模板
|
凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |