From 870e07ec998a543c25f5d6deef05121aa7e1aa8a Mon Sep 17 00:00:00 2001 From: GiuseppeS Date: Tue, 21 Jan 2025 17:27:14 +0100 Subject: [PATCH] Synchronized collection in connection pool --- .../Tomcat_9__1__DBServer2019_.xml | 16 ++++++++++++++++ .../MultiDBTransaction/BasicConnectionPool.java | 12 +++++------- 2 files changed, 21 insertions(+), 7 deletions(-) create mode 100644 .idea/runConfigurations/Tomcat_9__1__DBServer2019_.xml diff --git a/.idea/runConfigurations/Tomcat_9__1__DBServer2019_.xml b/.idea/runConfigurations/Tomcat_9__1__DBServer2019_.xml new file mode 100644 index 0000000000..d93576a3d1 --- /dev/null +++ b/.idea/runConfigurations/Tomcat_9__1__DBServer2019_.xml @@ -0,0 +1,16 @@ + + + + + \ No newline at end of file diff --git a/ems-core/src/main/java/it/integry/ems/sync/MultiDBTransaction/BasicConnectionPool.java b/ems-core/src/main/java/it/integry/ems/sync/MultiDBTransaction/BasicConnectionPool.java index 4fecf72a43..dceb558f04 100644 --- a/ems-core/src/main/java/it/integry/ems/sync/MultiDBTransaction/BasicConnectionPool.java +++ b/ems-core/src/main/java/it/integry/ems/sync/MultiDBTransaction/BasicConnectionPool.java @@ -10,9 +10,7 @@ import org.springframework.stereotype.Component; import java.io.IOException; import java.sql.SQLException; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; +import java.util.*; @Component public class BasicConnectionPool { @@ -20,8 +18,8 @@ public class BasicConnectionPool { @Autowired private SettingsModel settingsModel; - private final HashMap> connectionPool = new HashMap<>(); - private final HashMap> usedConnections = new HashMap<>(); + private final Map> connectionPool = Collections.synchronizedMap(new HashMap<>()); + private final Map> usedConnections = Collections.synchronizedMap(new HashMap<>()); public synchronized void init() throws Exception { @@ -40,10 +38,10 @@ public class BasicConnectionPool { for (final AvailableConnectionsModel availableConnectionsModel : availableConnections) { synchronized (connectionPool) { if (!connectionPool.containsKey(availableConnectionsModel.getProfileName())) - connectionPool.put(availableConnectionsModel.getProfileName(), new ArrayList<>()); + connectionPool.put(availableConnectionsModel.getProfileName(), Collections.synchronizedList(new ArrayList<>())); if (!usedConnections.containsKey(availableConnectionsModel.getProfileName())) - usedConnections.put(availableConnectionsModel.getProfileName(), new ArrayList<>()); + usedConnections.put(availableConnectionsModel.getProfileName(), Collections.synchronizedList(new ArrayList<>())); int createdConnections = connectionPool.get(availableConnectionsModel.getProfileName()).size() + usedConnections.get(availableConnectionsModel.getProfileName()).size();