AOP@Work: 用AspectJ进行性能监视,第2部分 - 编程入门网
etAssembler() {
if (assembler == null) {
initAssembler();
}
return assembler;
}
...
}
MonitorJmxManagement 方面定义了监视器的管理接口,它只包括一个属性 enabled。 通过 JMX 管理监视器所需要的其他支持来自在 第一部分 中讨论的 JmxManagement 方面。我还将一些常用代码从 StatsJmxManagement 中转移到这个共享类中。图 2 显示了用 JMX 在运行时控制监视的例子: 图 2. 在运行时控制监视 AOP@Work: 用AspectJ进行性能监视,第2部分(14)时间:2011-09-07 IBM Ron Bodkin部署 Glassbox Inspector 到此为止,我已经可以为应用程序监视部署这个 Glassbox Inspector 了。 我让它尽可能只应用到应用程序代码上。不过,在许多情况下,将方面应用到库 代码是有利的。对于我工作的 Petclinic 和 JPetstore 示例应用程序来说, JDBC 访问是由 Spring 和 iBatis 库代码分别处理的,在 Petclinic 中,代码 控制器逻辑是由 Spring 库处理的。因此让监视方面影响应用程序所使用的一些 库代码是有好处的。有时,可以通过对来自应用程序代码的调用进行建议,或者 在可以被建议的应用程序代码中增加显式钩子(如继承在库类中定义的方法), 从而避免对库代码的执行进行建议。 我可以选择两种基本方法将监视织入到应用程序中:在编译时或者在装载时 。如果使用编译时织入,那么处理二进制 jar(例如,使用 ajc -inpath 命令 行工具进行织入)容易得多,不用从源代码重新编译库。我在过去使用这种方法 ,它对应用程序启动提供了最好的性能,并且只有很少的内存开销。不过,它会 显著增加编译环境的复杂性。一个问题是要求 AspectJ 织入器能够解析对包含 在被织入的 jar 中的第三方类的引用。对于 Spring,这意味着包括 Hibernate 、多种开放源码缓冲管理器和 Servlet API 这些 JAR。 VM 中的 AOP 支持BEA JRockIt 最近提供了一种原型 Java VM,它支持方面 。这种集成带来了 AOP 的高性能和后绑定(late-binding)支持,这是这两个 方面最好的事情。我期待着这种技术的成熟和其他 Java VM 创造者的贡献。 对于 AspectJ 5 的另一种可行的方法是装载时织入。使用这种方法可以分别 编译监视方面,并加入一个小的部署描述符以定义这个方面用在什么地方。 装载时织入 清单 13 展示了部署描述符 aop.xml 的一个例子,它描述了装载时织入应用 在什么地方。AspectJ 5 装载时织入代理在系统内所有类 ClassLoader 都可访 问的一个目录或者 jar 中寻找所有 META-INF/aop.xml 资源。这些方面可以被 任何 Java ClassLoader 代理(如 Java 5 JVMTI -javaagent、JRockIt JVM 代 理或者甚至 WebSphere 或者 WebLogic ClassLoader 插件程序)自动装载,以 将方面应用到系统中所有代码或者部分代码上。这使我可以对一个应用程序或者 一个服务器进行监视,而不用事先建立它,也不用改变编译过程。 注意(例如)Spring 框架中引用不在类路径中的类的代码永远也不装载,因 此这种方法不需要增加额外的 jar。在 2005 年 11 月撰写本文的时候, AspectJ 5 Milestone 4 已经发布,AspectJ 5 的最终版本预计在年底发布。装 载时织入在保持大型系统中的模块独立性方面非常有用,它为方面提供了 Java 类装载为对象提供的同样的运行时解决方案。 清单 13. 装载时织入配置
|
凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |