APM Java エージェントは、メトリック情報を取得するためにJDBCドライバクラス(OracleConnection、OracleStatement、OracleResultSetなど)をインスツルメントします。
DBCPは、DelegatingStatement、DelegatingConnection、DelegatingResultSetなどのコアJDBCクラスの上にラッパークラスを使⽤します。
そのため、DBCPでインスツルメントすると、メトリックのカウント数が重複する可能性があります。
DBCPをインスツルメントするときは、sqlagent.pbdに次のSkipClassを追加してください。
-------------------------------------------------------------------
SkipClass: org.apache.commons.dbcp.DelegatingConnection
SkipClass: org.apache.commons.dbcp.DelegatingResultSet
SkipClass: org.apache.commons.dbcp.DelegatingStatement
SkipClass: org.apache.commons.dbcp.DelegatingCallableStatement
SkipClass: org.apache.commons.dbcp.DelegatingPreparedStatement
SkipClass: org.apache.commons.dbcp2.DelegatingConnection
SkipClass: org.apache.commons.dbcp2.DelegatingResultSet
SkipClass: org.apache.commons.dbcp2.DelegatingStatement
SkipClass: org.apache.commons.dbcp2.DelegatingCallableStatement
SkipClass: org.apache.commons.dbcp2.DelegatingPreparedStatement
-------------------------------------------------------------------
#上記のクラスは"Apache Commons DBCP"のサードパーティ製クラスです。
これらのクラスは、実際のSQL Connection、Statement、およびResultsetクラス(JDBCドライバ固有)のラッパークラスです。
Agentはメトリックを取得するために実際のJDBCクラスをインスツルメントするので、Agentはメトリックを取りこぼすことはありません。
JDBCとDBCPの⽐較例
JDBC:
oracle.jdbc.OracleConnection (implements java.sql.Connection)
oracle.jdbc.OracleResultSet (implements java.sql.ResultSet)
oracle.jdbc.OracleStatement (implements java.sql.Statement)
oracle.jdbc.OracleCallableStatement (also extends java.sql.CallableStatement)
#OracleCallableStatement is the Subinterfaces of OracleStatement.
oracle.jdbc.OraclePreparedStatement (also extends java.sql.PreparedStatement)
#OraclePreparedStatement is the Subinterfaces of OracleStatement.
DBCP:
org.apache.commons.dbcp.DelegatingConnection (implements java.sql.Connection)
org.apache.commons.dbcp.DelegatingResultSet (implements java.sql.ResultSet)
org.apache.commons.dbcp.DelegatingStatement (implements java.sql.Statement)
org.apache.commons.dbcp.DelegatingCallableStatement(implements java.sql.CallableStatement)
#DelegatingCallableStatement is the Subinterfaces of DelegatingStatement.
org.apache.commons.dbcp.DelegatingPreparedStatement(implements java.sql.PreparedStatement)
#DelegatingPreparedStatement is the Subinterfaces of DelegatingStatement.