C3P0 Connection Pools

When you create a PersistenceManagerFactory / EntityManagerFactory you define the connection URL, driver name, and the username/password to use. This works perfectly well but does not "pool" the connections so that they are efficiently opened/closed when needed to utilise datastore resources in an optimum way. DataNucleus allows you to utilise a connection pool using C3P0 to efficiently manage the connections to the datastore.

C3P0 is a third-party library providing connection pooling. This is accessed by specifying the persistence property datanucleus.connectionPoolingType . To utilise C3P0-based connection pooling we do this

// Specify our persistence properties used for creating our PMF/EMF
Properties props = new Properties();
properties.setProperty("datanucleus.connectionPoolingType", "C3P0");

So the PMF / EMF will use connection pooling using C3P0. To do this you will need the datanucleus-connectionpool plugin to be in the CLASSPATH, along with the C3P0 JAR. If you want to configure C3P0 further you can include a "c3p0.properties" in your CLASSPATH - see the C3P0 documentation for details.

You can also specify persistence properties to control the actual pooling. The currently supported properties for C3P0 are shown below

# Pooling of Connections

# Pooling of PreparedStatements