From 0fd24308664d1022a1eac410be1c8345e6f1ff30 Mon Sep 17 00:00:00 2001 From: Darin Kelkhoff Date: Fri, 7 Jun 2024 12:43:26 -0500 Subject: [PATCH] Update to avoid NPE for null backend names (used by some non-standard flows) --- .../module/rdbms/jdbc/ConnectionManager.java | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) diff --git a/qqq-backend-module-rdbms/src/main/java/com/kingsrook/qqq/backend/module/rdbms/jdbc/ConnectionManager.java b/qqq-backend-module-rdbms/src/main/java/com/kingsrook/qqq/backend/module/rdbms/jdbc/ConnectionManager.java index 688e231b..1e5eeea1 100644 --- a/qqq-backend-module-rdbms/src/main/java/com/kingsrook/qqq/backend/module/rdbms/jdbc/ConnectionManager.java +++ b/qqq-backend-module-rdbms/src/main/java/com/kingsrook/qqq/backend/module/rdbms/jdbc/ConnectionManager.java @@ -26,6 +26,7 @@ import java.sql.Connection; import java.sql.SQLException; import java.util.LinkedHashMap; import java.util.Map; +import java.util.Objects; import java.util.concurrent.ConcurrentHashMap; import com.kingsrook.qqq.backend.core.actions.customizers.QCodeLoader; import com.kingsrook.qqq.backend.core.exceptions.QException; @@ -74,11 +75,16 @@ public class ConnectionManager *******************************************************************************/ private static ConnectionProviderInterface getConnectionProvider(RDBMSBackendMetaData backend) throws QException { - if(!connectionProviderMap.containsKey(backend.getName())) + ////////////////////////////////////////////////////////////////////////////////// + // some non-standard use-cases use a backend without a name... avoid NPE in map // + ////////////////////////////////////////////////////////////////////////////////// + String name = Objects.requireNonNullElse(backend.getName(), ""); + + if(!connectionProviderMap.containsKey(name)) { synchronized(connectionProviderMap) { - if(!connectionProviderMap.containsKey(backend.getName())) + if(!connectionProviderMap.containsKey(name)) { QCodeReference connectionProviderReference = backend.getConnectionProvider(); boolean usingDefaultSimpleProvider = false; @@ -88,16 +94,16 @@ public class ConnectionManager usingDefaultSimpleProvider = true; } - LOG.info("Initializing connection provider for RDBMS backend", logPair("backendName", backend.getName()), logPair("connectionProvider", connectionProviderReference.getName()), logPair("usingDefaultSimpleProvider", usingDefaultSimpleProvider)); + LOG.info("Initializing connection provider for RDBMS backend", logPair("backendName", name), logPair("connectionProvider", connectionProviderReference.getName()), logPair("usingDefaultSimpleProvider", usingDefaultSimpleProvider)); ConnectionProviderInterface connectionProvider = QCodeLoader.getAdHoc(ConnectionProviderInterface.class, connectionProviderReference); connectionProvider.init(backend); - connectionProviderMap.put(backend.getName(), connectionProvider); + connectionProviderMap.put(name, connectionProvider); } } } - return (connectionProviderMap.get(backend.getName())); + return (connectionProviderMap.get(name)); }