快速业务通道

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

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-19
">    <interceptor-ref name="org.runtimemonitoring.aop.ITracerInterceptor"/>   </bind> </aop>

第三步:使用 JBoss 提供的名为 Aop Compiler(aopc)的工具来执行静态插装过程。用 Ant 脚本来完成这个过程是最简单的。清单 17 展示了 Ant 任务和编译器输出的代码片断,该片断表明我定义的切入点与目标类相匹配:

清单 17. aopc Ant 任务和输出

<target name="staticBCI" depends="compileSource">   <taskdef name="aopc" classname="org.jboss.aop.ant.AopC"    classpathref="aop.lib.classpath"/>   <path id="instrument.target.path">    <path location="${classes.dir}"/>    </path>   <aopc compilerclasspathref="aop.class.path" verbose="true">    <classpath path="instrument.target.path"/>    <src path="${classes.dir}"/>    <aoppath path="${conf.dir}/jboss-aop/jboss-aop.xml"/>   </aopc> </target> Output: [aopc] [trying to transform] org.runtimemonitoring.spring.EmpDAOImpl [aopc] [debug] javassist.CtMethod@955a8255[public transient get   ([Ljava/lang/Integer;)Ljava/util/Map;] matches pointcut:   execution(public * $instanceof{org.runtimemonitoring.spring.DAO}->get(..))

定义于 jboss-aop.xml 文件的切入点和 清单 16 中定义的切入点一样实现了一个专用于 AOP 的语法,实现该语法的目的是为了提供一个表达力强的通配符语言来笼统地或是明确地定义切入点目标。实质上一个方法的任一标识属性都可以从类和包名映射到注释并返回类型。在 清单 17 中,我指定 org.runtimemonitoring.spring.DAO 的任何实例中的任何名为 get 的公共方法都应被作为目标。因此,由于 org.runtimemonitoring.spring.EmpDAOImpl 是惟一符合这个标准的具体类,所以只有这个类被插装了。

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

时间:2011-02-13 IBM Nicholas Whitehead

到此为止,插装就结束了。要运行启用了这个插装的 SpringRunner 测试用例,就必须在启动 JVM 时用诸如 -Djboss.aop.path=[directory]/jboss-aop.xml 这样的 JVM 参数把 jboss-aop.xml 文件的位置定义在系统属性中。这样做的前提是您可以获得一些灵活性,因为 jboss-aop.xml 首先在构建时的静态插装中使用,然后再在运行时使用,这是由于您一开始可以插装任意一个类,但在运行时却仅能激活特定类。为 SpringRunner 测试用例生成的 APM 系统指标树现在包含了 EmpDAOImpl 的指标。图 13 展示了这个树:

图 13. 静态 BCI 指标树

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

虽然静态插装的确可以提供某种灵活性,但是若非静态处理这些类(这很费力),就无法为插装激活它们,这一点终究是有限制性的。而且,一旦类被静态插装,它们就只能为插装时定义的截取程序激活。在下面的例子中,我将用动态 BCI 重复这个测试用例。

动态 BCI

完成动态 BCI 的方法很多,但是使用 Java 1.5 javaagent 接口有着一个很明显的优势。在此我将在更高的层面简要描述这个接口;想要深入了解关于这个主题的知识,请参见 Andrew Wilcox 所著的文章 “构建自己的分析工具”(参见 参考资料)。

javaagent 通过两个结构启用运行时动态 BCI。首先,当用 -javaagent:a JAR file (这里的命名的 JAR 文件包含一个 javaagent 实现)启动 JVM 时,JVM 调用了在一个特殊清单条目中定义的类的一个 p

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