package com.vladmihalcea.flexypool.connection; /** * <code>ConnectionCallback</code> defines {@link java.sql.Connection} lifecycle callbacks. * It's used by the Connection decorator/proxy to execute a custom logic upon closing the connection. * * @author Vlad Mihalcea * @since 1.0 */ public class ConnectionCallback { private final ConnectionPoolCallback connectionPoolCallback; private final long startNanos = System.nanoTime(); /** * Create Connection Callback with {@link ConnectionPoolCallback} hook * * @param connectionPoolCallback {@link ConnectionPoolCallback} hook */ public ConnectionCallback(ConnectionPoolCallback connectionPoolCallback) { this.connectionPoolCallback = connectionPoolCallback; this.connectionPoolCallback.acquireConnection(); } /** * Calculates the connection lease nanos and propagates it to the connection pool callback. */ public void close() { long endNanos = System.nanoTime(); long durationNanos = endNanos - startNanos; connectionPoolCallback.releaseConnection(durationNanos); } }