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

reworked connection management (minimized open connections)

parent 80620851
No related branches found
No related tags found
No related merge requests found
Showing
with 72 additions and 45 deletions
...@@ -43,8 +43,6 @@ import org.apache.commons.dbutils.DbUtils; ...@@ -43,8 +43,6 @@ import org.apache.commons.dbutils.DbUtils;
public class Database { public class Database {
protected static final byte NW_MODE_CONTINUOUS = 0; protected static final byte NW_MODE_CONTINUOUS = 0;
protected static final byte NW_MODE_DISCRETE = 1; protected static final byte NW_MODE_DISCRETE = 1;
private final Map<String, PreparedStatement> pstmtsCacheMap;
private final String queryEarliestArrivalTimeHomo; private final String queryEarliestArrivalTimeHomo;
private final String queryLatestDepartureTimeHomo; private final String queryLatestDepartureTimeHomo;
private final String queryGetAllEdges; private final String queryGetAllEdges;
...@@ -63,8 +61,8 @@ public class Database { ...@@ -63,8 +61,8 @@ public class Database {
protected final ConfigDataset config; protected final ConfigDataset config;
protected Mode mode; protected Mode mode;
protected boolean isIncoming; protected boolean isIncoming;
protected Connection connection; protected Connection connection; /** The connection the the database. It is lazy-loaded by {@link #getPstmt(String)} method. */
private Map<String, PreparedStatement> pstmtsCacheMap;
// Constructor // Constructor
public Database(final ConfigDataset config, final Mode mode, final Direction direction) { public Database(final ConfigDataset config, final Mode mode, final Direction direction) {
...@@ -72,9 +70,6 @@ public class Database { ...@@ -72,9 +70,6 @@ public class Database {
this.isIncoming = (direction == Direction.INCOMING); this.isIncoming = (direction == Direction.INCOMING);
this.mode = mode; this.mode = mode;
connection = ConfigIsochrone.getInstance().getConnection();
pstmtsCacheMap = new HashMap<String, PreparedStatement>();
final String configDatecodes = config.getTableDatecodes(); final String configDatecodes = config.getTableDatecodes();
final String configEdges = config.getTableEdges(); final String configEdges = config.getTableEdges();
final String configSchedule = config.getTableSchedule(); final String configSchedule = config.getTableSchedule();
...@@ -185,8 +180,10 @@ public class Database { ...@@ -185,8 +180,10 @@ public class Database {
* This should be called once you're done with the database. * This should be called once you're done with the database.
*/ */
public void close() { public void close() {
for (final PreparedStatement pstmt : pstmtsCacheMap.values()) { if (pstmtsCacheMap != null) {
DbUtils.closeQuietly(pstmt); for (final PreparedStatement pstmt : pstmtsCacheMap.values()) {
DbUtils.closeQuietly(pstmt);
}
} }
DbUtils.closeQuietly(connection); DbUtils.closeQuietly(connection);
...@@ -636,6 +633,14 @@ public class Database { ...@@ -636,6 +633,14 @@ public class Database {
// FIXME: Find a fix for prepared statements with parameters // FIXME: Find a fix for prepared statements with parameters
// (we should NOT set strings in preparedStatemens just because we want to cache something) // (we should NOT set strings in preparedStatemens just because we want to cache something)
protected PreparedStatement getPstmt(final String query) { protected PreparedStatement getPstmt(final String query) {
if (connection == null) {
// lazy-loading of the database connection (so it is not created on object construction)
connection = ConfigIsochrone.getInstance().getConnection();
}
if (pstmtsCacheMap == null) {
pstmtsCacheMap = new HashMap<String, PreparedStatement>();
}
try { try {
if (pstmtsCacheMap.containsKey(query) && !pstmtsCacheMap.get(query).isClosed()) { if (pstmtsCacheMap.containsKey(query) && !pstmtsCacheMap.get(query).isClosed()) {
return pstmtsCacheMap.get(query); return pstmtsCacheMap.get(query);
......
...@@ -428,7 +428,7 @@ public class DatabaseWeb extends Database { ...@@ -428,7 +428,7 @@ public class DatabaseWeb extends Database {
public Point transform(final Point p) { public Point transform(final Point p) {
final String query = "SELECT ST_X(P.GEO) X, ST_Y(P.GEO) Y FROM (SELECT ST_Transform(ST_PointFromText(?,?),?) GEO ) P"; final String query = "SELECT ST_X(P.GEO) X, ST_Y(P.GEO) Y FROM (SELECT ST_Transform(ST_PointFromText(?,?),?) GEO ) P";
return DatabaseWeb.transform(config, p, getPstmt(query)); return DatabaseWeb.transform(connection, config, p, getPstmt(query));
} }
public void updateVertexTable() { public void updateVertexTable() {
...@@ -447,15 +447,18 @@ public class DatabaseWeb extends Database { ...@@ -447,15 +447,18 @@ public class DatabaseWeb extends Database {
// Public static methods // Public static methods
public static Point transform(final ConfigDataset config, final Point p) { public static Point transform(final ConfigDataset config, final Point p) {
return transform(config, p, null); final Connection connection = ConfigIsochrone.getInstance().getConnection();
final Point result = transform(connection, config, p, null);
DbUtils.closeQuietly(connection);
return result;
} }
// Private static methods // Private static methods
private static Point transform(final ConfigDataset config, final Point p, final PreparedStatement preparedStatement) { private static Point transform(final Connection connection, final ConfigDataset config, final Point p, final PreparedStatement preparedStatement) {
final ConfigIsochrone configIso = ConfigIsochrone.getInstance();
final boolean openNewStatement = (preparedStatement == null); final boolean openNewStatement = (preparedStatement == null);
final int clientSRID = configIso.getClientSRID(); final int clientSRID = ConfigIsochrone.getInstance().getClientSRID();
if (clientSRID == config.getServerSRID()) { if (clientSRID == config.getServerSRID()) {
return p; return p;
} }
...@@ -468,7 +471,7 @@ public class DatabaseWeb extends Database { ...@@ -468,7 +471,7 @@ public class DatabaseWeb extends Database {
try { try {
if (openNewStatement) { if (openNewStatement) {
final String query = "SELECT ST_X(P.GEO) X, ST_Y(P.GEO) Y FROM (SELECT ST_Transform(ST_PointFromText(?,?),?) GEO ) P"; final String query = "SELECT ST_X(P.GEO) X, ST_Y(P.GEO) Y FROM (SELECT ST_Transform(ST_PointFromText(?,?),?) GEO ) P";
createdStatement = configIso.getConnection().prepareStatement(query); createdStatement = connection.prepareStatement(query);
stmt = createdStatement; stmt = createdStatement;
} else { } else {
stmt = preparedStatement; stmt = preparedStatement;
......
package it.unibz.inf.isoga.db; package it.unibz.inf.isoga.db;
import it.unibz.inf.isochrone.config.ConfigDataset; import it.unibz.inf.isochrone.config.ConfigDataset;
import it.unibz.inf.isochrone.config.ConfigIsochrone;
import it.unibz.inf.isochrone.util.EnumContainer.Direction; import it.unibz.inf.isochrone.util.EnumContainer.Direction;
import it.unibz.inf.isochrone.util.EnumContainer.QueryType; import it.unibz.inf.isochrone.util.EnumContainer.QueryType;
import it.unibz.inf.isoga.config.ConfigClient; import it.unibz.inf.isoga.config.ConfigClient;
...@@ -144,15 +143,13 @@ public final class DbUtility { ...@@ -144,15 +143,13 @@ public final class DbUtility {
return false; return false;
} }
public static ResponsePoiFeature getPoiFeatures(final String sqlExpr, final ConfigDataset config) { public static ResponsePoiFeature getPoiFeatures(final Connection connection, final String sqlExpr, final ConfigDataset config) {
final ResponsePoiFeature result = new ResponsePoiFeature(); final ResponsePoiFeature result = new ResponsePoiFeature();
if ("noResult".equals(sqlExpr)) { if ("noResult".equals(sqlExpr)) {
result.setType("invalid"); result.setType("invalid");
return result; return result;
} }
final Connection connection = ConfigIsochrone.getInstance().getConnection();
Statement stmt = null; Statement stmt = null;
ResultSet rSet = null; ResultSet rSet = null;
try { try {
...@@ -178,11 +175,10 @@ public final class DbUtility { ...@@ -178,11 +175,10 @@ public final class DbUtility {
return result; return result;
} }
public static WpsStatistic getStatistics(final String sqlExpr, final boolean withSum, final ConfigDataset config) { public static WpsStatistic getStatistics(final Connection connection, final String sqlExpr, final boolean withSum, final ConfigDataset config) {
final Connection connection = ConfigIsochrone.getInstance().getConnection();
int sum = 0; int sum = 0;
int count = 0; int count = 0;
Statement stmt = null; Statement stmt = null;
ResultSet rSet = null; ResultSet rSet = null;
try { try {
...@@ -210,10 +206,9 @@ public final class DbUtility { ...@@ -210,10 +206,9 @@ public final class DbUtility {
return new WpsStatistic(count, sum); return new WpsStatistic(count, sum);
} }
public static SortedMap<Calendar, RouteEntity> getVertexAnnotation(final ConfigClient config, final int vertexId, final Direction direction) { public static SortedMap<Calendar, RouteEntity> getVertexAnnotation(final Connection connection, final ConfigClient config, final int vertexId, final Direction direction) {
final Comparator<Object> comp = (direction == Direction.INCOMING) ? Collections.reverseOrder() : null; final Comparator<Object> comp = (direction == Direction.INCOMING) ? Collections.reverseOrder() : null;
final SortedMap<Calendar, RouteEntity> schedules = new TreeMap<Calendar, RouteEntity>(comp); final SortedMap<Calendar, RouteEntity> schedules = new TreeMap<Calendar, RouteEntity>(comp);
final Connection connection = ConfigIsochrone.getInstance().getConnection();
final String arrivalTimeStr = "to_char(to_timestamp(CAST(\"TIME_A\" AS text),'SSSSS'),'HH24:MI') \"ARRIVAL_TIME\""; final String arrivalTimeStr = "to_char(to_timestamp(CAST(\"TIME_A\" AS text),'SSSSS'),'HH24:MI') \"ARRIVAL_TIME\"";
final String departureTimeStr = "to_char(to_timestamp(CAST(\"TIME_D\" AS text),'SSSSS'),'HH24:MI') \"DEPARTURE_TIME\""; final String departureTimeStr = "to_char(to_timestamp(CAST(\"TIME_D\" AS text),'SSSSS'),'HH24:MI') \"DEPARTURE_TIME\"";
...@@ -291,15 +286,13 @@ public final class DbUtility { ...@@ -291,15 +286,13 @@ public final class DbUtility {
} }
} }
public static ResponseWps spatialIntersection2JSON(final String sqlExpr, final SqlQuery query, final ConfigDataset config) { public static ResponseWps spatialIntersection2JSON(final Connection connection, final String sqlExpr, final SqlQuery query, final ConfigDataset config) {
final ResponseWps result = new ResponseWps(query.getQueryType().toString().toLowerCase()); final ResponseWps result = new ResponseWps(query.getQueryType().toString().toLowerCase());
if (sqlExpr.equals("noResult")) { if (sqlExpr.equals("noResult")) {
result.setType("invalid"); result.setType("invalid");
return result; return result;
} }
final Connection connection = ConfigIsochrone.getInstance().getConnection();
Statement stmt = null; Statement stmt = null;
ResultSet rSet = null; ResultSet rSet = null;
try { try {
......
...@@ -83,15 +83,15 @@ public class BBoxOutput extends MemoryOutput { ...@@ -83,15 +83,15 @@ public class BBoxOutput extends MemoryOutput {
// Private methods // Private methods
private void calculateBoundingBox() { private void calculateBoundingBox() {
final ConfigIsochrone configIso = ConfigIsochrone.getInstance(); final int clientSRID = ConfigIsochrone.getInstance().getClientSRID();
final Connection connection = configIso.getConnection(); final Connection connection = db.getConnection();
PreparedStatement statement = null; PreparedStatement statement = null;
ResultSet rSet = null; ResultSet rSet = null;
try { try {
statement = connection.prepareStatement(query); statement = connection.prepareStatement(query);
statement.setInt(1, serverSRID); statement.setInt(1, serverSRID);
statement.setInt(2, configIso.getClientSRID()); statement.setInt(2, clientSRID);
rSet = statement.executeQuery(); rSet = statement.executeQuery();
if (rSet.next()) { if (rSet.next()) {
long minX = Math.round(rSet.getDouble("min_x")); long minX = Math.round(rSet.getDouble("min_x"));
......
...@@ -14,6 +14,8 @@ import java.util.Set; ...@@ -14,6 +14,8 @@ import java.util.Set;
import javax.websocket.Session; import javax.websocket.Session;
import org.apache.commons.dbutils.DbUtils;
/** /**
* @author Nikolaus Krismer * @author Nikolaus Krismer
*/ */
...@@ -66,6 +68,8 @@ public class ServiceConfiguration extends AbstractService<RequestConfiguration, ...@@ -66,6 +68,8 @@ public class ServiceConfiguration extends AbstractService<RequestConfiguration,
final ConfigClient configClient = ConfigClient.getInstance(clientId, dataset); final ConfigClient configClient = ConfigClient.getInstance(clientId, dataset);
registerTableAndLayers(connection, configClient); registerTableAndLayers(connection, configClient);
} }
DbUtils.closeQuietly(connection);
} }
} }
package it.unibz.inf.isoga.service; package it.unibz.inf.isoga.service;
import it.unibz.inf.isochrone.config.ConfigIsochrone;
import it.unibz.inf.isochrone.util.EnumContainer.Direction; import it.unibz.inf.isochrone.util.EnumContainer.Direction;
import it.unibz.inf.isoga.config.ConfigClient; import it.unibz.inf.isoga.config.ConfigClient;
import it.unibz.inf.isoga.db.DbUtility; import it.unibz.inf.isoga.db.DbUtility;
...@@ -9,11 +10,14 @@ import it.unibz.inf.isoga.service.dto.RequestFeatureInfo; ...@@ -9,11 +10,14 @@ import it.unibz.inf.isoga.service.dto.RequestFeatureInfo;
import it.unibz.inf.isoga.service.dto.ResponseFeatureInfo; import it.unibz.inf.isoga.service.dto.ResponseFeatureInfo;
import it.unibz.inf.isoga.service.dto.ResponseFeatureInfo.Entry; import it.unibz.inf.isoga.service.dto.ResponseFeatureInfo.Entry;
import java.sql.Connection;
import java.util.Calendar; import java.util.Calendar;
import java.util.SortedMap; import java.util.SortedMap;
import javax.websocket.Session; import javax.websocket.Session;
import org.apache.commons.dbutils.DbUtils;
/** /**
* @author Nikolaus Krismer * @author Nikolaus Krismer
*/ */
...@@ -35,11 +39,13 @@ public class ServiceFeatureInfo extends AbstractService<RequestFeatureInfo, Resp ...@@ -35,11 +39,13 @@ public class ServiceFeatureInfo extends AbstractService<RequestFeatureInfo, Resp
final ConfigClient config = ConfigClient.getInstance(clientId, ds); final ConfigClient config = ConfigClient.getInstance(clientId, ds);
final ResponseFeatureInfo result = new ResponseFeatureInfo(); final ResponseFeatureInfo result = new ResponseFeatureInfo();
final SortedMap<Calendar, RouteEntity> schedules = DbUtility.getVertexAnnotation(config, stopId, direction); final Connection connection = ConfigIsochrone.getInstance().getConnection();
final SortedMap<Calendar, RouteEntity> schedules = DbUtility.getVertexAnnotation(connection, config, stopId, direction);
for (final RouteEntity routeEntity : schedules.values()) { for (final RouteEntity routeEntity : schedules.values()) {
result.addEntry(new Entry(routeEntity)); result.addEntry(new Entry(routeEntity));
} }
DbUtils.closeQuietly(connection);
return result; return result;
} }
......
...@@ -7,7 +7,6 @@ import it.unibz.inf.isochrone.algorithm.MDijkstra; ...@@ -7,7 +7,6 @@ import it.unibz.inf.isochrone.algorithm.MDijkstra;
import it.unibz.inf.isochrone.algorithm.MineX; import it.unibz.inf.isochrone.algorithm.MineX;
import it.unibz.inf.isochrone.algorithm.MrneX; import it.unibz.inf.isochrone.algorithm.MrneX;
import it.unibz.inf.isochrone.config.ConfigDataset; import it.unibz.inf.isochrone.config.ConfigDataset;
import it.unibz.inf.isochrone.config.ConfigIsochrone;
import it.unibz.inf.isochrone.network.Location; import it.unibz.inf.isochrone.network.Location;
import it.unibz.inf.isochrone.util.EnumContainer.Algorithm; import it.unibz.inf.isochrone.util.EnumContainer.Algorithm;
import it.unibz.inf.isochrone.util.EnumContainer.CoverageMode; import it.unibz.inf.isochrone.util.EnumContainer.CoverageMode;
...@@ -57,15 +56,15 @@ public class ServiceIsochrone extends AbstractService<RequestIsochrone, Response ...@@ -57,15 +56,15 @@ public class ServiceIsochrone extends AbstractService<RequestIsochrone, Response
final ConfigClient config = ConfigClient.getInstance(clientId, dataset); final ConfigClient config = ConfigClient.getInstance(clientId, dataset);
// register layers which have not been pre-registered in ServiceConfiguration class // register layers which have not been pre-registered in ServiceConfiguration class
final long startComputationTiming = System.currentTimeMillis();
final DatabaseWeb db = new DatabaseWeb(config, request.getMode(), direction);
if (!config.isRegistered()) { if (!config.isRegistered()) {
registerTableAndLayers(ConfigIsochrone.getInstance().getConnection(), config); registerTableAndLayers(db.getConnection(), config);
} }
// Timing start // Timing start
final long startComputationTiming = System.currentTimeMillis(); truncateTables(db.getConnection(), config);
final DatabaseWeb db = new DatabaseWeb(config, request.getMode(), direction);
truncateTables(config);
final Query query = new Query(direction, request.getSpeed(), request.getDmax(), request.getDate(), true, request.getMode()); final Query query = new Query(direction, request.getSpeed(), request.getDmax(), request.getDate(), true, request.getMode());
query.setStartLocations(locationsFromQueryNodes(request.getQueryNodes(), db)); query.setStartLocations(locationsFromQueryNodes(request.getQueryNodes(), db));
final Isochrone isochrone = getAlgorithm(request.getAlgorithm(), config, db, query); final Isochrone isochrone = getAlgorithm(request.getAlgorithm(), config, db, query);
...@@ -126,9 +125,7 @@ public class ServiceIsochrone extends AbstractService<RequestIsochrone, Response ...@@ -126,9 +125,7 @@ public class ServiceIsochrone extends AbstractService<RequestIsochrone, Response
return locations; return locations;
} }
private void truncateTables(final ConfigDataset config) { private void truncateTables(final Connection conn, final ConfigDataset config) {
final Connection conn = ConfigIsochrone.getInstance().getConnection();
DbUtility.truncateTable(conn, config.getEdgeTableEntry().getTableName()); DbUtility.truncateTable(conn, config.getEdgeTableEntry().getTableName());
DbUtility.truncateTable(conn, config.getVertexTableEntry().getTableName()); DbUtility.truncateTable(conn, config.getVertexTableEntry().getTableName());
DbUtility.dropIndex(conn, config.getVertexTableEntry().getIndexName()); DbUtility.dropIndex(conn, config.getVertexTableEntry().getIndexName());
......
...@@ -7,8 +7,12 @@ import it.unibz.inf.isoga.db.DbUtility; ...@@ -7,8 +7,12 @@ import it.unibz.inf.isoga.db.DbUtility;
import it.unibz.inf.isoga.service.dto.RequestPoiFeature; import it.unibz.inf.isoga.service.dto.RequestPoiFeature;
import it.unibz.inf.isoga.service.dto.ResponsePoiFeature; import it.unibz.inf.isoga.service.dto.ResponsePoiFeature;
import java.sql.Connection;
import javax.websocket.Session; import javax.websocket.Session;
import org.apache.commons.dbutils.DbUtils;
/** /**
* @author Nikolaus Krismer * @author Nikolaus Krismer
*/ */
...@@ -35,7 +39,9 @@ public class ServicePoiFeature extends AbstractService<RequestPoiFeature, Respon ...@@ -35,7 +39,9 @@ public class ServicePoiFeature extends AbstractService<RequestPoiFeature, Respon
if (!sqlMessage.toUpperCase().startsWith("SELECT")) { if (!sqlMessage.toUpperCase().startsWith("SELECT")) {
poiFeatures.setType("No result"); poiFeatures.setType("No result");
} else { } else {
poiFeatures = DbUtility.getPoiFeatures(sqlMessage, config); final Connection connection = ConfigIsochrone.getInstance().getConnection();
poiFeatures = DbUtility.getPoiFeatures(connection, sqlMessage, config);
DbUtils.closeQuietly(connection);
} }
return poiFeatures; return poiFeatures;
......
package it.unibz.inf.isoga.service; package it.unibz.inf.isoga.service;
import it.unibz.inf.isochrone.config.ConfigIsochrone;
import it.unibz.inf.isochrone.util.EnumContainer.QueryType; import it.unibz.inf.isochrone.util.EnumContainer.QueryType;
import it.unibz.inf.isoga.config.ConfigClient; import it.unibz.inf.isoga.config.ConfigClient;
import it.unibz.inf.isoga.db.DbUtility; import it.unibz.inf.isoga.db.DbUtility;
...@@ -8,8 +9,12 @@ import it.unibz.inf.isoga.db.SqlQuery; ...@@ -8,8 +9,12 @@ import it.unibz.inf.isoga.db.SqlQuery;
import it.unibz.inf.isoga.service.dto.RequestWps; import it.unibz.inf.isoga.service.dto.RequestWps;
import it.unibz.inf.isoga.service.dto.ResponseWps; import it.unibz.inf.isoga.service.dto.ResponseWps;
import java.sql.Connection;
import javax.websocket.Session; import javax.websocket.Session;
import org.apache.commons.dbutils.DbUtils;
/** /**
* @author Nikolaus Krismer * @author Nikolaus Krismer
*/ */
...@@ -36,13 +41,16 @@ public class ServiceWps extends AbstractService<RequestWps, ResponseWps> { ...@@ -36,13 +41,16 @@ public class ServiceWps extends AbstractService<RequestWps, ResponseWps> {
final String clientId = session.getId(); final String clientId = session.getId();
final ConfigClient config = ConfigClient.getInstance(clientId, ds); final ConfigClient config = ConfigClient.getInstance(clientId, ds);
final String spatialQuery = query.getSpatialQueryString(config); final String spatialQuery = query.getSpatialQueryString(config);
response = DbUtility.spatialIntersection2JSON(spatialQuery, query, config); final Connection connection = ConfigIsochrone.getInstance().getConnection();
response = DbUtility.spatialIntersection2JSON(connection, spatialQuery, query, config);
if (query.getQueryType().equals(QueryType.SELECT)) { if (query.getQueryType().equals(QueryType.SELECT)) {
response.setStatistic(DbUtility.getStatistics(query.getStatistics(false), false, config)); response.setStatistic(DbUtility.getStatistics(connection, query.getStatistics(false), false, config));
} else if (query.getQueryType().equals(QueryType.SUM)) { } else if (query.getQueryType().equals(QueryType.SUM)) {
response.setStatistic(DbUtility.getStatistics(query.getStatisticsWithSum(false), true, config)); response.setStatistic(DbUtility.getStatistics(connection, query.getStatisticsWithSum(false), true, config));
} }
DbUtils.closeQuietly(connection);
return response; return response;
} }
......
...@@ -41,6 +41,7 @@ import javax.websocket.OnOpen; ...@@ -41,6 +41,7 @@ import javax.websocket.OnOpen;
import javax.websocket.Session; import javax.websocket.Session;
import javax.websocket.server.ServerEndpoint; import javax.websocket.server.ServerEndpoint;
import org.apache.commons.dbutils.DbUtils;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
...@@ -62,14 +63,14 @@ public class JsonWebsocket { ...@@ -62,14 +63,14 @@ public class JsonWebsocket {
@OnClose @OnClose
public void onClose(final Session session, final CloseReason closeReason) { public void onClose(final Session session, final CloseReason closeReason) {
final Connection connection = ConfigIsochrone.getInstance().getConnection();
final ConfigGeoserver config = ConfigGeoserver.getInstance(); final ConfigGeoserver config = ConfigGeoserver.getInstance();
final String ws = config.getRenderServerWorkspace(); final String ws = config.getRenderServerWorkspace();
final GeoServerRESTPublisher publisher = config.getGeoServerPublisher(); final GeoServerRESTPublisher publisher = config.getGeoServerPublisher();
final String clientId = session.getId(); final String clientId = session.getId();
final Collection<ConfigClient> allClientDatasetConfigs = ConfigClient.getAllConfigs(clientId); final Collection<ConfigClient> allClientDatasetConfigs = ConfigClient.getAllConfigs(clientId);
final Connection connection = ConfigIsochrone.getInstance().getConnection();
for (final ConfigClient clientDSetConfig : allClientDatasetConfigs) { for (final ConfigClient clientDSetConfig : allClientDatasetConfigs) {
if (clientDSetConfig.isRegistered()) { if (clientDSetConfig.isRegistered()) {
// unregister layers // unregister layers
...@@ -86,6 +87,7 @@ public class JsonWebsocket { ...@@ -86,6 +87,7 @@ public class JsonWebsocket {
} }
} }
} }
DbUtils.closeQuietly(connection);
publisher.reload(); publisher.reload();
LOGGER.debug("Websocket: Session \"" + clientId + "\" closed: " + closeReason); LOGGER.debug("Websocket: Session \"" + clientId + "\" closed: " + closeReason);
......
...@@ -11,6 +11,7 @@ import javax.servlet.ServletContextEvent; ...@@ -11,6 +11,7 @@ import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener; import javax.servlet.ServletContextListener;
import javax.servlet.annotation.WebListener; import javax.servlet.annotation.WebListener;
import org.apache.commons.dbutils.DbUtils;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
...@@ -68,6 +69,8 @@ public class StartupListener implements ServletContextListener { ...@@ -68,6 +69,8 @@ public class StartupListener implements ServletContextListener {
LOGGER.warn(" - table(s) \"" + regexp + "\" could not be dropped"); LOGGER.warn(" - table(s) \"" + regexp + "\" could not be dropped");
} }
} }
DbUtils.closeQuietly(connection);
} }
/** /**
......
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