Search code examples
javaoptimizationjakarta-eeconnection-poolingbonecp

Using BoneCP: Handling connections from the pool


I have just started using BoneCP and this is my first time using a connection pool. I'm somewhat confused as to how I am supposed to use it. Currently I am saving the BoneCP-object as a static variable, and thus I can use it between different connections.

When I'm done with the connection, I close it with connection.close().
Should I do this, or should I not close it to enable it to be reused by the pool?

This is my current implementation to get a connection:

private static BoneCP connectionPool;

public Connection getConnection() throws SQLException {
    if (connectionPool == null) {
        initPool();
    }
    return connectionPool.getConnection();
}

private void initPool() throws SQLException {
    BoneCPConfig config = new BoneCPConfig();
    config.setJdbcUrl(DB_URL);
    config.setUsername(DB_USERNAME);
    config.setPassword(DB_PASSWORD);
    config.setMinConnectionsPerPartition(5);
    config.setMaxConnectionsPerPartition(10);
    config.setPartitionCount(1);
    connectionPool = new BoneCP(config);
}

Does this seem correct or have I misunderstood how I am supposed to use BoneCP?


Solution

  • Other than making your private static final and changing the init to a static block (or alternaitvely making your getConnection synchronized), you are ok.

    You are correct you MUST do connection.close() to return to the pool. When your app shuts down, shut down the connection pool