This is an automated email from the ASF dual-hosted git repository. agingade pushed a commit to branch feature/GEODE-3781 in repository https://gitbox.apache.org/repos/asf/geode.git
The following commit(s) were added to refs/heads/feature/GEODE-3781 by this push: new e23aa67 Made prepared statment cache thread safe. Now each thread has its own prepared statement cache. e23aa67 is described below commit e23aa67ef93e8c83472c8ff2fa0e1944276b5c58 Author: Anil <aging...@pivotal.io> AuthorDate: Fri Oct 27 11:24:48 2017 -0700 Made prepared statment cache thread safe. Now each thread has its own prepared statement cache. --- .../org/apache/geode/connectors/jdbc/JDBCManager.java | 19 +++++++++++++++---- 1 file changed, 15 insertions(+), 4 deletions(-) diff --git a/geode-connectors/src/main/java/org/apache/geode/connectors/jdbc/JDBCManager.java b/geode-connectors/src/main/java/org/apache/geode/connectors/jdbc/JDBCManager.java index 7c7ecea..afc59b2 100644 --- a/geode-connectors/src/main/java/org/apache/geode/connectors/jdbc/JDBCManager.java +++ b/geode-connectors/src/main/java/org/apache/geode/connectors/jdbc/JDBCManager.java @@ -23,7 +23,9 @@ import java.sql.ResultSetMetaData; import java.sql.SQLException; import java.util.ArrayList; import java.util.Collections; +import java.util.HashMap; import java.util.List; +import java.util.Map; import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.ConcurrentMap; @@ -40,6 +42,18 @@ public class JDBCManager { private final ConcurrentMap<String, String> tableToPrimaryKeyMap = new ConcurrentHashMap<>(); + private final ThreadLocal<Map<StatementKey, PreparedStatement>> preparedStatementCache = + new ThreadLocal<>(); + + private Map<StatementKey, PreparedStatement> getPreparedStatementCache() { + Map<StatementKey, PreparedStatement> result = preparedStatementCache.get(); + if (result == null) { + result = new HashMap<>(); + preparedStatementCache.set(result); + } + return result; + } + JDBCManager(JDBCConfiguration config) { this.config = config; } @@ -186,9 +200,6 @@ public class JDBCManager { return result; } - private final ConcurrentMap<StatementKey, PreparedStatement> preparedStatementCache = - new ConcurrentHashMap<>(); - private static class StatementKey { private final int pdxTypeId; private final Operation operation; @@ -232,7 +243,7 @@ public class JDBCManager { System.out.println("getPreparedStatement : " + pdxTypeId + "operation: " + operation + " columns: " + columnList); StatementKey key = new StatementKey(pdxTypeId, operation, tableName); - return preparedStatementCache.computeIfAbsent(key, k -> { + return getPreparedStatementCache().computeIfAbsent(key, k -> { String query = getQueryString(tableName, columnList, operation); System.out.println("query=" + query); Connection con = getConnection(); -- To stop receiving notification emails like this one, please contact ['"commits@geode.apache.org" <commits@geode.apache.org>'].