Skip to content
Snippets Groups Projects
Commit d18629bc authored by Nikolaus Krismer's avatar Nikolaus Krismer
Browse files

reworked connection pooling (this should fix the failed tests)

adding boneCP dependency
parent c15b6d98
No related branches found
No related tags found
No related merge requests found
...@@ -80,6 +80,7 @@ dependencies { ...@@ -80,6 +80,7 @@ dependencies {
compile group: 'com.fasterxml.jackson.core', name: 'jackson-core', version: '2.3.0' compile group: 'com.fasterxml.jackson.core', name: 'jackson-core', version: '2.3.0'
compile group: 'com.fasterxml.jackson.core', name: 'jackson-databind', version: '2.3.0' compile group: 'com.fasterxml.jackson.core', name: 'jackson-databind', version: '2.3.0'
compile group: 'com.google.code.findbugs', name: 'annotations', version: '2.0.3' compile group: 'com.google.code.findbugs', name: 'annotations', version: '2.0.3'
compile group: 'com.jolbox', name: 'bonecp', version: '0.8.0.RELEASE'
compile group: 'com.tngtech.java', name: 'config-builder', version: '1.1' compile group: 'com.tngtech.java', name: 'config-builder', version: '1.1'
compile(group: 'org.postgis', name: 'postgis-jdbc', version:'1.3+') { compile(group: 'org.postgis', name: 'postgis-jdbc', version:'1.3+') {
exclude(module: 'postgis-stubs') exclude(module: 'postgis-stubs')
......
...@@ -45,7 +45,7 @@ public final class ConfigIsochrone { ...@@ -45,7 +45,7 @@ public final class ConfigIsochrone {
@PropertyValue("db.batchSize") @PropertyValue("db.batchSize")
private Integer batchSize; private Integer batchSize;
@DefaultValue(value = "true") @DefaultValue(value = "false")
@PropertyValue("db.pooling") @PropertyValue("db.pooling")
private Boolean pooling; private Boolean pooling;
...@@ -137,7 +137,8 @@ public final class ConfigIsochrone { ...@@ -137,7 +137,8 @@ public final class ConfigIsochrone {
} }
public int getMaxConnections() { public int getMaxConnections() {
// TODO: This is not used (mail to t.gummerer and j.gamper) // TODO: This was not used (mail to t.gummerer and j.gamper)
// Usage was implemented by n.krismer using bonecp
return maxConnections; return maxConnections;
} }
...@@ -153,7 +154,7 @@ public final class ConfigIsochrone { ...@@ -153,7 +154,7 @@ public final class ConfigIsochrone {
LOGGER.debug(" - isPooling: " + pooling); LOGGER.debug(" - isPooling: " + pooling);
try { try {
factory = new ConnectionFactory(pooling); factory = new ConnectionFactory(pooling, maxConnections);
factory.register(host, database, port, user, password); factory.register(host, database, port, user, password);
} catch (final SQLException e) { } catch (final SQLException e) {
throw new RuntimeException("Unable to connect to the database: " + e); throw new RuntimeException("Unable to connect to the database: " + e);
......
...@@ -4,27 +4,30 @@ import java.sql.Connection; ...@@ -4,27 +4,30 @@ import java.sql.Connection;
import java.sql.DriverManager; import java.sql.DriverManager;
import java.sql.SQLException; import java.sql.SQLException;
import javax.sql.PooledConnection; import com.jolbox.bonecp.BoneCP;
import com.jolbox.bonecp.BoneCPConfig;
import org.postgresql.ds.PGConnectionPoolDataSource;
/** /**
* Used for connecting to the PostgreSQL server and get connections * Used for connecting to the database server and for getting connections
* from a connection pool if pooling is enabled. * from a connection pool (if pooling is enabled in the config file).
*
* <p>The <code>ConnectionFactory</code> class</p>
* <p>Copyright: 2006 - 2009 <a href="http://www.inf.unibz.it/dis">Dis Research Group</a></p>
* <p> Domenikanerplatz - Bozen, Italy.</p>
* *
* @author Markus Innerebner * @author Nikolaus Krismer
* @version 2.2 * @version 3
*/ */
public class ConnectionFactory { public class ConnectionFactory {
private boolean pooling = false; private static final int MIN_CONNECTIONS = 5;
private PooledConnection connectionPool;
private Connection connection; private Connection connection;
private BoneCP connectionPool;
private final int maxConnections;
private final boolean pooling;
public ConnectionFactory() {
this.maxConnections = 1;
this.pooling = false;
}
public ConnectionFactory(final boolean pooling) { public ConnectionFactory(final boolean pooling, final int maxConnections) {
this.maxConnections = maxConnections;
this.pooling = pooling; this.pooling = pooling;
} }
...@@ -38,18 +41,20 @@ public class ConnectionFactory { ...@@ -38,18 +41,20 @@ public class ConnectionFactory {
* @param passwd The password for the database * @param passwd The password for the database
*/ */
public void register(final String serverName, final String database, final int port, final String user, final String passwd) throws SQLException, ClassNotFoundException { public void register(final String serverName, final String database, final int port, final String user, final String passwd) throws SQLException, ClassNotFoundException {
final String url = "jdbc:postgresql://" + serverName + ":" + port + "/" + database + "?binaryTransfer=true";
Class.forName("org.postgresql.Driver"); // load the driver
if (pooling) { if (pooling) {
final PGConnectionPoolDataSource pds = new PGConnectionPoolDataSource(); final BoneCPConfig config = new BoneCPConfig();
pds.setServerName(serverName); config.setDefaultAutoCommit(false);
pds.setDatabaseName(database); config.setUser(user);
pds.setPortNumber(port); config.setPassword(passwd);
pds.setUser(user); config.setJdbcUrl(url);
pds.setPassword(passwd); config.setMinConnectionsPerPartition(Math.min(MIN_CONNECTIONS, maxConnections));
connectionPool = pds.getPooledConnection(); config.setMaxConnectionsPerPartition(maxConnections);
config.setPartitionCount(1);
connectionPool = new BoneCP(config);
} else { } else {
Class.forName("org.postgresql.Driver"); // load the driver
final String url = "jdbc:postgresql://" + serverName + ":" + port + "/" + database + "?binaryTransfer=true";
connection = DriverManager.getConnection(url, user, passwd); connection = DriverManager.getConnection(url, user, passwd);
connection.setAutoCommit(false); connection.setAutoCommit(false);
} }
...@@ -62,9 +67,7 @@ public class ConnectionFactory { ...@@ -62,9 +67,7 @@ public class ConnectionFactory {
*/ */
public Connection getConnection() throws SQLException { public Connection getConnection() throws SQLException {
if (pooling) { if (pooling) {
final Connection conn = connectionPool.getConnection(); return connectionPool.getConnection();
conn.setAutoCommit(false);
return conn;
} }
return connection; return connection;
......
...@@ -36,8 +36,6 @@ import org.apache.commons.dbutils.DbUtils; ...@@ -36,8 +36,6 @@ import org.apache.commons.dbutils.DbUtils;
* <br /> * <br />
* Domenikanerplatz - Bozen, Italy. * Domenikanerplatz - Bozen, Italy.
* </p> * </p>
* <p>
* </p>
* *
* @author Markus Innerebner * @author Markus Innerebner
* @version 2.2 * @version 2.2
......
...@@ -3,6 +3,8 @@ ...@@ -3,6 +3,8 @@
<properties> <properties>
<!-- Global database settings --> <!-- Global database settings -->
<entry key="db.maxConnections">50</entry> <entry key="db.maxConnections">50</entry>
<entry key="db.pooling">false</entry>
<!-- Postgres database --> <!-- Postgres database -->
<entry key="org.postgresql.servername">localhost</entry> <entry key="org.postgresql.servername">localhost</entry>
<entry key="org.postgresql.database">isochrone</entry> <entry key="org.postgresql.database">isochrone</entry>
......
...@@ -30,16 +30,12 @@ public class ComparisonTest { ...@@ -30,16 +30,12 @@ public class ComparisonTest {
final Query queryDijkstra = new Query(Direction.INCOMING, WALKING_SPEED, DURATION, TIME, false, Mode.MULTIMODAL); final Query queryDijkstra = new Query(Direction.INCOMING, WALKING_SPEED, DURATION, TIME, false, Mode.MULTIMODAL);
queryDijkstra.setNodes(NODE_ID); queryDijkstra.setNodes(NODE_ID);
final Isochrone mDijkstra = new MDijkstra(config, queryDijkstra); final Isochrone mDijkstra = new MDijkstra(config, queryDijkstra);
MemoryOutput outDijkstra = new MemoryOutput();
outDijkstra = mDijkstra.compute(outDijkstra);
final Query queryMinex = new Query(Direction.INCOMING, WALKING_SPEED, DURATION, TIME, true, Mode.MULTIMODAL); final Query queryMinex = new Query(Direction.INCOMING, WALKING_SPEED, DURATION, TIME, true, Mode.MULTIMODAL);
queryMinex.setNodes(NODE_ID); queryMinex.setNodes(NODE_ID);
final Isochrone mineX = new MineX(config, queryMinex); final Isochrone mineX = new MineX(config, queryMinex);
MemoryOutput outMineX = new MemoryOutput();
outMineX = mineX.compute(outMineX);
Assert.assertEquals(outDijkstra.getLinks(), outMineX.getLinks(), "Dijkstra != MineX"); Assert.assertEquals(mDijkstra.compute().getLinks(), mineX.compute().getLinks(), "Dijkstra != MineX");
} }
@Test @Test
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment