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("javax.jdo.PersistenceManagerFactoryClass",
"org.datanucleus.jdo.JDOPersistenceManagerFactory");
properties.setProperty("datanucleus.ConnectionDriverName","com.mysql.jdbc.Driver");
properties.setProperty("datanucleus.ConnectionURL","jdbc:mysql://localhost/myDB");
properties.setProperty("datanucleus.ConnectionUserName","login");
properties.setProperty("datanucleus.ConnectionPassword","password");
properties.setProperty("datanucleus.connectionPoolingType", "C3P0");
So the
PMF
/
EMF
will use connection pooling using C3P0. To do this you will
need the
C3P0
JAR to be in the CLASSPATH.
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
datanucleus.connectionPool.maxPoolSize=5
datanucleus.connectionPool.minPoolSize=3
datanucleus.connectionPool.initialPoolSize=3
# Pooling of PreparedStatements
datanucleus.connectionPool.maxStatements=20