Update to avoid NPE for null backend names (used by some non-standard flows)

This commit is contained in:
2024-06-07 12:43:26 -05:00
parent 9e9d1960c8
commit 0fd2430866

View File

@ -26,6 +26,7 @@ import java.sql.Connection;
import java.sql.SQLException; import java.sql.SQLException;
import java.util.LinkedHashMap; import java.util.LinkedHashMap;
import java.util.Map; import java.util.Map;
import java.util.Objects;
import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.ConcurrentHashMap;
import com.kingsrook.qqq.backend.core.actions.customizers.QCodeLoader; import com.kingsrook.qqq.backend.core.actions.customizers.QCodeLoader;
import com.kingsrook.qqq.backend.core.exceptions.QException; import com.kingsrook.qqq.backend.core.exceptions.QException;
@ -74,11 +75,16 @@ public class ConnectionManager
*******************************************************************************/ *******************************************************************************/
private static ConnectionProviderInterface getConnectionProvider(RDBMSBackendMetaData backend) throws QException 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) synchronized(connectionProviderMap)
{ {
if(!connectionProviderMap.containsKey(backend.getName())) if(!connectionProviderMap.containsKey(name))
{ {
QCodeReference connectionProviderReference = backend.getConnectionProvider(); QCodeReference connectionProviderReference = backend.getConnectionProvider();
boolean usingDefaultSimpleProvider = false; boolean usingDefaultSimpleProvider = false;
@ -88,16 +94,16 @@ public class ConnectionManager
usingDefaultSimpleProvider = true; 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); ConnectionProviderInterface connectionProvider = QCodeLoader.getAdHoc(ConnectionProviderInterface.class, connectionProviderReference);
connectionProvider.init(backend); connectionProvider.init(backend);
connectionProviderMap.put(backend.getName(), connectionProvider); connectionProviderMap.put(name, connectionProvider);
} }
} }
} }
return (connectionProviderMap.get(backend.getName())); return (connectionProviderMap.get(name));
} }