快速业务通道

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

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-15
chronized void    setUpStatement(Statement statement, String sql) {       statementSql.put(statement, sql);   }   /** associate statements with the connections    * called to create them     */   private Map/*<Statement,Connection>*/ statementCreators =    new WeakIdentityHashMap();   /** associate statements with the    * underlying string they execute    */   private Map/*<Statement,String>*/ statementSql =    new WeakIdentityHashMap(); }

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

时间:2011-09-07 IBM Ron Bodkin

JdbcStatementMonitor 维护两个弱标识图:statementCreators 和 statementSql。第一个图跟踪用来创建语句的连接。正如前面提示过的,我不想 依赖这条语句的 getConnection 方法,因为它会引用一个包装过的连接,而我 没 有这个连接的元数据。请注意 callCreateStatement 切入点,我建议它去监视 JDBC 语句的执行。这个建议匹配的方法调用是在 JDBC 连接上定义的,而且会 返 回 Statement 或任何子类。这个建议可以匹配 JDBC 中 12 种不同的可以创建 或 准备语句的方式,而且是为了适应 JDBC API 未来的扩展而设计的。

statementSql 图跟踪指定语句执行的 SQL 字符串。这个图用两种不同的方 式 更新。在创建预备语句(包括可调用语句)时,在创建时捕捉到 SQL 字符串参 数 。对于动态 SQL 语句,SQL 字符串参数在监视建议使用它之前,从语句执行调 用 中被捕捉。(建议的先后次序在这里没影响;虽然是在执行完成之后才用建议查 询统计值,但字符串是在执行发生之前捕捉的。)

语句的性能监视由一个 around 建议处理,它在执行 JDBC 语句的时候设置 工 人对象。执行 JDBC 语句的 statementExec 切入点会捕捉 JDBC Statement(包 括子类)实例上名称以 execute 开始的任何方法的调用,方法是在 JDBC API 中 定义的(也就是说,在任何名称以 java.sql 开始的包中)。

工人对象上的 lookupStats() 方法使用双亲(servlet)的统计上下文来查 询 指定连接的数据库统计值,然后查询指定 SQL 字符串的 JDBC 语句统计值。直 接 的语句执行方法包括:SQL 语句中在 where 子句之后剥离数据的附加逻辑。这 就 避免了暴露敏感数据的风险,而且也允许把常见语句分组。更复杂的方式就是剥 离查询参数而已。但是,多数应用程序使用预备语句而不是动态 SQL 语句,所 以 我不想深入这一部分。

跟踪 JDBC 信息

在结束之前,关于监视方面如何解决跟踪 JDBC 信息的挑战,请静想一分钟 。 JdbcConnectionMonitor 让我把数据库的文本描述(例如 JDBC URL)与用来访 问 数据库的连接关联起来。同样,JdbcStatementMonitor 中的 statementSql 映 射 跟踪 SQL 字符串(甚至是用于预备语句的字符串),从而确保可以用有意义的 名 称,把执行的查询分成有意义的组。最后,JdbcStatementMonitor 中的 statementCreators 映射让我把语句与我拥有句柄(而不是包装过)的连接关联 。这种方式整合了多个建议,在把方面应用到现实问题时,更新内部状态非常有 用。在许多情况下,需要跟踪来自 一系列 切入点的上下文信息,在单一公开上 下文的 AspectJ 切入点中无法捕捉到这个信息。在出现这种情况时,一个切入 点 的跟踪状态可以在后一个切入点中使用这项技术就会非常有帮助。

这个信息可用之后,JdbcStatementMonitor 就能够很自然地监视性能了。在 语句执行切入点上的实际建议只是遵循标准方法 ,创建工人对象继续处理原始 的 计算。lookupStats() 方法使用这三个不同的映射来查询与这条语句关联的连接 和 SQL。然后它用它的双亲请求,根据

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