Intercepting a method
Using the injector your created in the previous step, you can now create intercepted proxies to your objects. Below is the code to provide logging around a JDBC statement.
public Statement getStatement(Connection connection) throws SQLException
{
InterceptionInjector injector = createInjector();
Statement statement = connection.createStatement();
return injector.wrapObject(Statement.class, statement);
}
That's all these it to it. Now, if we use get getStatement method to create our statements, then each method call will be logged.
public int getNumberOfOrders() throws SQLException
{
Connection connection = ConnectionManager.getConnection();
Statement statement = getStatement(connection);
try
{
ResultSet results = statement.executeQuery("SELECT COUNT(*) FROM orders");
return DatabaseManager.getIntegerResult(results);
}
finally
{
statement.close();
}
}
Now, you could acheive the same result by creating your own class that implements Statement, and adding logging in each method. However, that would
- be more work
- need to be repeated for PreparedStatement and CallableStatement.
PreparedStatement and CallableStatement. The jdbc_wrapper example in the sample code shows
a more complete (yet still very simple) implementation of this scenario.
The instructions listed above do not require the "ext" jar to be on the classpath.