快速业务通道

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

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-15
n (name != null) ? name : "unknown";    }      /** Holds JDBC connection-specific context information:    * a database name and statistics    */   protected abstract class ConnectionRequestContext    extends RequestContext {     private ResourceStats dbStats;     /** set up context statistics for accessing      * this data source       */     protected void      accessingConnection (final DataSource dataSource) {       addConnection (getNameForDataSource(dataSource),        connection);      }     /** set up context statistics for accessing this database */     protected void accessingConnection(String databaseName) {       this.databaseName = databaseName;        // might be null if there is database access        // caused from a request I''m not tracking...       if (getParent() != null) {         OperationStats opStats =          (OperationStats)getParent().getStats();           dbStats = opStats.getDatabaseStats(databaseName);         }     }     /** record the database name for this database connection */     protected Connection       addConnection(final Connection connection) {        synchronized(connections) {         connections.put (connection, databaseName);       }       return connection;     }     protected PerfStats lookupStats() {       return dbStats;     }   };   /** Associates connections with their database names */     private Map/*<Connection,String>*/ connections =    new WeakIdentityHashMap(); }

清单 6 显示了利用 AspectJ 和 JDBC API 跟踪数据库连接的方面。它用一 个 图来关联数据库名称和每个 JDBC 连接。

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

时间:2011-09-07 IBM Ron Bodkin

在 jdbcConnectionMonitor 内部

在清单 6 显示的 JdbcConnectionMonitor 内部,我定义了切入点,捕捉连 接 数据库的两种不同方式:通过数据源或直接通过 JDBC URL。连接监视器包含针 对 每种情况的监视建议,两种情况都设置一个工人对象。doExecute() 方法启动时 处理原始连接,然后把返回的连接传递给两个辅助方法中名为 addConnection 的 一个。在两种情况下,被建议的切入点会排除来自另一个连接的连接调用(例如 ,如果要连接到数据源,会造成建立 JDBC 连接)。

数据源的 addConnection() 委托辅助方法 getNameForDataSource() 从数据 源确定数据库的名称。DataSource 接口不提供任何这类机制,但是几乎每个实 现 都提供了 getDatabaseName() 方法。getNameForDataSource() 用反射来尝试完 成这项工作和其他少数常见(和不太常见)的方法,为数据库源提供一个有用的 标识。addConnection() 方法然后委托给 addConnection() 方法,这个方法用 字 符串参数作为名称。

被委托的 addConnection() 方法从父请求的上下文中检索可以操作的统计值 ,并根据与指定连接关联的数据库名称(或其他描述字符串)查询数据库的统计 值。然后它把这条信息保存在请求上下文对象的 dbStats 字段中,更新关于获 得 连接的性能信息。这样就可以跟踪连接数据库需要的时间(通常这实际是从池中 得到连接所需要的时间)。addConnection() 方法也更新到数

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