/* * #%L * P6Spy * %% * Copyright (C) 2002 - 2016 P6Spy * %% * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. * #L% */ package com.p6spy.engine.event; import com.p6spy.engine.common.CallableStatementInformation; import com.p6spy.engine.common.ConnectionInformation; import com.p6spy.engine.common.PreparedStatementInformation; import com.p6spy.engine.common.ResultSetInformation; import com.p6spy.engine.common.StatementInformation; import java.sql.CallableStatement; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Savepoint; import java.sql.Statement; /** * Implementations of this class receive notifications for interesting JDBC events. * <p/> * This class intentionally is not an interface so that methods can be added without breaking existing implementations. * <p/> * There are two ways to register your custom implementation of this class. * The fist way is to add the fully qualified class name of your implementation to * <code>src/main/resources/META-INF/services/com.p6spy.engine.event.JdbcEventListener</code>. * <p/> * The second way is to implement a {@link com.p6spy.engine.spy.P6Factory} * <p/> * <b>NOTE:</b> Exceptions thrown in this event listener won't be caught. So you have to make sure that your event * listener does not throw exceptions. For example, if your {@link #onConnectionWrapped} method throws an exception * your application won't be able to create any {@link Connection}. */ public abstract class JdbcEventListener { /** * This callback method is executed after a wrapped {@link Connection} has been created. * <p/> * The {@link ConnectionInformation} holds information about the creator of the connection which is either * {@link ConnectionInformation#dataSource}, {@link ConnectionInformation#driver} or * {@link ConnectionInformation#pooledConnection}. * * @param connectionInformation The meta information about the wrapped {@link Connection} */ public void onConnectionWrapped(ConnectionInformation connectionInformation) { } /** * This callback method is executed before the {@link PreparedStatement#addBatch()} method is invoked. * * @param statementInformation The meta information about the {@link Statement} being invoked */ public void onBeforeAddBatch(PreparedStatementInformation statementInformation) { } /** * This callback method is executed after the {@link Statement#addBatch(String)} or * {@link PreparedStatement#addBatch(String)} method is invoked. * * @param statementInformation The meta information about the {@link Statement} being invoked * @param timeElapsedNanos The execution time of the execute call * @param e The {@link SQLException} which may be triggered by the call (<code>null</code> if * there was no exception). */ public void onAfterAddBatch(PreparedStatementInformation statementInformation, long timeElapsedNanos, SQLException e) { } /** * This callback method is executed before the {@link Statement#addBatch(String)} or * {@link PreparedStatement#addBatch(String)} method is invoked. * * @param statementInformation The meta information about the {@link Statement} being invoked * @param sql The SQL string provided to the execute method */ public void onBeforeAddBatch(StatementInformation statementInformation, String sql) { } /** * This callback method is executed after the {@link Statement#addBatch(String)} or * {@link PreparedStatement#addBatch(String)} method is invoked. * * @param statementInformation The meta information about the {@link Statement} being invoked * @param timeElapsedNanos The execution time of the execute call * @param sql The SQL string provided to the execute method * @param e The {@link SQLException} which may be triggered by the call (<code>null</code> if * there was no exception). */ public void onAfterAddBatch(StatementInformation statementInformation, long timeElapsedNanos, String sql, SQLException e) { } /** * This callback method is executed before any of the {@link PreparedStatement#execute()} methods are invoked. * * @param statementInformation The meta information about the {@link Statement} being invoked */ public void onBeforeExecute(PreparedStatementInformation statementInformation) { } /** * This callback method is executed after any the {@link PreparedStatement#execute()} methods are invoked. * * @param statementInformation The meta information about the {@link Statement} being invoked * @param timeElapsedNanos The execution time of the execute call * @param e The {@link SQLException} which may be triggered by the call (<code>null</code> if * there was no exception). */ public void onAfterExecute(PreparedStatementInformation statementInformation, long timeElapsedNanos, SQLException e) { } /** * This callback method is executed before any of the {@link Statement#execute(String)} methods are invoked. * * @param statementInformation The meta information about the {@link Statement} being invoked * @param sql The SQL string provided to the execute method */ public void onBeforeExecute(StatementInformation statementInformation, String sql) { } /** * This callback method is executed after any the {@link Statement#execute(String)} methods are invoked. * * @param statementInformation The meta information about the {@link Statement} being invoked * @param timeElapsedNanos The execution time of the execute call * @param sql The SQL string provided to the execute method * @param e The {@link SQLException} which may be triggered by the call (<code>null</code> if * there was no exception). */ public void onAfterExecute(StatementInformation statementInformation, long timeElapsedNanos, String sql, SQLException e) { } /** * This callback method is executed before the {@link Statement#executeBatch()} method is invoked. * * @param statementInformation The meta information about the {@link Statement} being invoked */ public void onBeforeExecuteBatch(StatementInformation statementInformation) { } /** * This callback method is executed after the {@link Statement#executeBatch()} method is invoked. * * @param statementInformation The meta information about the {@link Statement} being invoked * @param timeElapsedNanos The execution time of the execute call * @param updateCounts An array of update counts or null if an exception was thrown * @param e The {@link SQLException} which may be triggered by the call (<code>null</code> if * there was no exception). */ public void onAfterExecuteBatch(StatementInformation statementInformation, long timeElapsedNanos, int[] updateCounts, SQLException e) { } /** * This callback method is executed before the {@link PreparedStatement#executeUpdate()} method is invoked. * * @param statementInformation The meta information about the {@link Statement} being invoked */ public void onBeforeExecuteUpdate(PreparedStatementInformation statementInformation) { } /** * This callback method is executed after the {@link PreparedStatement#executeUpdate()} method is invoked. * * @param statementInformation The meta information about the {@link Statement} being invoked * @param timeElapsedNanos The execution time of the execute call * @param rowCount Either the row count for SQL Data Manipulation Language (DML) statements or 0 for SQL * statements that return nothing or if an exception was thrown * @param e The {@link SQLException} which may be triggered by the call (<code>null</code> if * there was no exception). */ public void onAfterExecuteUpdate(PreparedStatementInformation statementInformation, long timeElapsedNanos, int rowCount, SQLException e) { } /** * This callback method is executed before any of the {@link Statement#executeUpdate(String)} methods are invoked. * * @param statementInformation The meta information about the {@link Statement} being invoked * @param sql The SQL string provided to the execute method */ public void onBeforeExecuteUpdate(StatementInformation statementInformation, String sql) { } /** * This callback method is executed after any of the {@link Statement#executeUpdate(String)} methods are invoked. * * @param statementInformation The meta information about the {@link Statement} being invoked * @param timeElapsedNanos The execution time of the execute call * @param sql The SQL string provided to the execute method * @param rowCount Either the row count for SQL Data Manipulation Language (DML) statements or 0 for SQL * statements that return nothing or if an exception was thrown * @param e The {@link SQLException} which may be triggered by the call (<code>null</code> if * there was no exception). */ public void onAfterExecuteUpdate(StatementInformation statementInformation, long timeElapsedNanos, String sql, int rowCount, SQLException e) { } /** * This callback method is executed before the {@link PreparedStatement#executeQuery()} method is invoked. * * @param statementInformation The meta information about the {@link Statement} being invoked */ public void onBeforeExecuteQuery(PreparedStatementInformation statementInformation) { } /** * This callback method is executed after the {@link PreparedStatement#executeQuery()} method is invoked. * * @param statementInformation The meta information about the {@link Statement} being invoked * @param timeElapsedNanos The execution time of the execute call * @param e The {@link SQLException} which may be triggered by the call (<code>null</code> if * there was no exception). */ public void onAfterExecuteQuery(PreparedStatementInformation statementInformation, long timeElapsedNanos, SQLException e) { } /** * This callback method is executed before the {@link Statement#executeQuery(String)} method is invoked. * * @param statementInformation The meta information about the {@link Statement} being invoked * @param sql The SQL string provided to the execute method */ public void onBeforeExecuteQuery(StatementInformation statementInformation, String sql) { } /** * This callback method is executed after the {@link Statement#executeQuery(String)} method is invoked. * * @param statementInformation The meta information about the {@link Statement} being invoked * @param timeElapsedNanos The execution time of the execute call * @param sql The SQL string provided to the execute method * @param e The {@link SQLException} which may be triggered by the call (<code>null</code> if * there was no exception). */ public void onAfterExecuteQuery(StatementInformation statementInformation, long timeElapsedNanos, String sql, SQLException e) { } /** * This callback method is executed after any of the {@link PreparedStatement}.set* methods are invoked. * * @param statementInformation The meta information about the {@link Statement} being invoked * @param parameterIndex The first parameter is 1, the second is 2, ... * @param value the column value; if the value is SQL NULL, the value returned is null * @param e The {@link SQLException} which may be triggered by the call (<code>null</code> if * there was no exception). */ public void onAfterPreparedStatementSet(PreparedStatementInformation statementInformation, int parameterIndex, Object value, SQLException e) { } /** * This callback method is executed after any of the {@link CallableStatement}.set* methods are invoked. * * @param statementInformation The meta information about the {@link Statement} being invoked * @param parameterName The name of the parameter * @param value the column value; if the value is SQL NULL, the value returned is null * @param e The {@link SQLException} which may be triggered by the call (<code>null</code> if * there was no exception). */ public void onAfterCallableStatementSet(CallableStatementInformation statementInformation, String parameterName, Object value, SQLException e) { } /** * This callback method is executed after the {@link Statement#getResultSet()} method is invoked. * * @param statementInformation The meta information about the {@link Statement} being invoked * @param timeElapsedNanos The execution time of the execute call * @param e The {@link SQLException} which may be triggered by the call (<code>null</code> if * there was no exception). */ public void onAfterGetResultSet(StatementInformation statementInformation, long timeElapsedNanos, SQLException e) { } /** * This callback method is executed before the {@link ResultSet#next()} method is invoked. * * @param resultSetInformation The meta information about the {@link ResultSet} being invoked */ public void onBeforeResultSetNext(ResultSetInformation resultSetInformation) { } /** * This callback method is executed after the {@link ResultSet#next()} method is invoked. * * @param resultSetInformation The meta information about the {@link ResultSet} being invoked * @param timeElapsedNanos The execution time of the execute call * @param hasNext The return value of {@link ResultSet#next()} * @param e The {@link SQLException} which may be triggered by the call (<code>null</code> if * there was no exception). */ public void onAfterResultSetNext(ResultSetInformation resultSetInformation, long timeElapsedNanos, boolean hasNext, SQLException e) { } /** * This callback method is executed after the {@link ResultSet#close()} method is invoked. * * @param resultSetInformation The meta information about the {@link ResultSet} being invoked * @param e The {@link SQLException} which may be triggered by the call (<code>null</code> if * there was no exception). */ public void onAfterResultSetClose(ResultSetInformation resultSetInformation, SQLException e) { } /** * This callback method is executed after any of the {@link ResultSet}#get*(String) methods are invoked. * * @param resultSetInformation The meta information about the {@link ResultSet} being invoked * @param columnLabel The label for the column specified with the SQL AS clause. If the SQL AS clause was * not specified, then the label is the name of the column * @param value The column value; if the value is SQL NULL, the value returned is null * @param e The {@link SQLException} which may be triggered by the call (<code>null</code> if * there was no exception). */ public void onAfterResultSetGet(ResultSetInformation resultSetInformation, String columnLabel, Object value, SQLException e) { } /** * This callback method is executed after any of the {@link ResultSet}#get*(int) methods are invoked. * * @param resultSetInformation The meta information about the {@link ResultSet} being invoked * @param columnIndex the first column is 1, the second is 2, ... * @param value the column value; if the value is SQL NULL, the value returned is null * @param e The {@link SQLException} which may be triggered by the call (<code>null</code> if * there was no exception). */ public void onAfterResultSetGet(ResultSetInformation resultSetInformation, int columnIndex, Object value, SQLException e) { } /** * This callback method is executed before the {@link Connection#commit()} method is invoked. * * @param connectionInformation The meta information about the {@link Connection} being invoked */ public void onBeforeCommit(ConnectionInformation connectionInformation) { } /** * This callback method is executed after the {@link Connection#commit()} method is invoked. * * @param connectionInformation The meta information about the {@link Connection} being invoked * @param timeElapsedNanos The execution time of the execute call * @param e The {@link SQLException} which may be triggered by the call (<code>null</code> if * there was no exception). */ public void onAfterCommit(ConnectionInformation connectionInformation, long timeElapsedNanos, SQLException e) { } /** * This callback method is executed after the {@link Connection#close()} method is invoked. * * @param connectionInformation The meta information about the {@link Connection} being invoked * @param e The {@link SQLException} which may be triggered by the call (<code>null</code> if * there was no exception). */ public void onAfterConnectionClose(ConnectionInformation connectionInformation, SQLException e) { } /** * This callback method is executed before the {@link Connection#rollback()} or the {@link * Connection#rollback(Savepoint)} method is invoked. * * @param connectionInformation The meta information about the {@link Connection} being invoked */ public void onBeforeRollback(ConnectionInformation connectionInformation) { } /** * This callback method is executed after the {@link Connection#rollback()} or the {@link * Connection#rollback(Savepoint)} method is invoked. * * @param connectionInformation The meta information about the {@link Connection} being invoked * @param timeElapsedNanos The execution time of the execute call * @param e The {@link SQLException} which may be triggered by the call (<code>null</code> if * there was no exception). */ public void onAfterRollback(ConnectionInformation connectionInformation, long timeElapsedNanos, SQLException e) { } /** * This callback method is executed after the {@link Statement#close()} method is invoked. * * @param statementInformation The meta information about the {@link Statement} being invoked * @param e The {@link SQLException} which may be triggered by the call (<code>null</code> if * there was no exception). */ public void onAfterStatementClose(StatementInformation statementInformation, SQLException e) { } }