Java运行时监控,第2部分: 编译后插装和性能监控 - 编程入门网
13 IBM Nicholas Whitehead
被部署的还有其他几个对象。这些组件通过引用它们的 Spring bean id 来描述,这些 bean id 在清单 10 中的每一个 bean 元素中都可以看得见: tracingInterceptor 和 tracingOptimizedInterceptor:两个 SpringTracingInterceptor 类型的截取程序。这个类包含了将收集到的数据跟踪到 APM 系统的 ITracer 调用。 DataSource:一个将 JDBC 连接汇合到名为 runtime 的样例数据库的 JDBC DataSource,该样例数据库将会被注入到 EmpDAOImpl。 EmployeeDAO:我将调用的 EmpDAOImpl 将作为例子的一部分调用。 empDao 和 empDaoOptimized:spring.xml 文件中定义的最后两个 bean 为 Spring ProxyFactoryBean。它们本质上是 EmpDAOImpl 的代理,且每一个都各自引用一个截取程序。虽然 EmpDAOImpl 可以直接访问,但是使用代理会调用截取程序并生成性能指标。清单 10 中的两个代理和截取程序说明了一些差别和配置考虑。参见 优化的截取程序 侧边栏。 Spring 容器是从 SpringRunner 类中引导出来的。它还会启动一个测试循环,针对四个目标调用 DAO.get: EmployeeDAO Spring bean,它代表一个未用 Spring 插装的托管 DAO。 empDao Spring bean,它代表一个用 Spring 插装的托管的带有标准截取程序的 DAO。 empDaoOptimized Spring bean,它代表一个用 Spring 插装的托管的带有优化截取程序的 DAO。 一个非 Spring 管理的 EmpDAOImpl,与 Spring 管理的 bean 相对。 Spring 通过一个名为 org.aopalliance.intercept.MethodInterceptor 的接口实现这些类型的截取程序。要实现的方法只有一个:public Object invoke(MethodInvocation invocation)throws Throwable。MethodInvocation 对象提供了两个关键项:带有某种上下文(即正在被截取的方法名)的跟踪程序和 proceed 方法,该方法将调用向前引领到指定目标。 清单 11 展示了 SpringTracingInterceptor 类的 invoke 方法。在这种情况下是不需要 interceptorName 属性的,但是我还是添加了这个属性,目的是为这个例子提供辅助的上下文。对于一个多用途的截取程序实现,跟踪程序通常都会将类名添加到跟踪上下文,这样所有被截取的类中的所有方法都会被跟踪到单独的 APM 名称空间中。 清单 11. SpringTracingInterceptor 类的 invoke 方法
SpringRunner 类是这个例子的主入口点。它初始化 Spring bean 工厂,然后开始一个长的循环,从而将负载置于每一个 bean 中。清单 12 展示了该循环的代码。注意由于 daoNoInterceptor 和 daoDirect 不是通过 Spring 的截取程序插装的,所以我在 SpringRunner 循环中手动添加了插装。 清单 12. 缩略的 SpringRunner 循环
|
凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |