From e6faf9efd15697bd88a7f48e5bcb6bf6b59c1c55 Mon Sep 17 00:00:00 2001 From: Robin Bygrave Date: Thu, 11 Mar 2021 23:21:44 +1300 Subject: [PATCH] #2193 - Prevent registration of 2 default servers (2 Database that have defaultServer=true) --- ebean-api/src/main/java/io/ebean/DatabaseFactory.java | 7 +++++++ .../src/main/java/io/ebean/config/DatabaseConfig.java | 1 + .../src/test/java/io/ebean/config/ServerConfigTest.java | 3 +++ 3 files changed, 11 insertions(+) diff --git a/ebean-api/src/main/java/io/ebean/DatabaseFactory.java b/ebean-api/src/main/java/io/ebean/DatabaseFactory.java index 11cdf9068..6ad7b1d89 100644 --- a/ebean-api/src/main/java/io/ebean/DatabaseFactory.java +++ b/ebean-api/src/main/java/io/ebean/DatabaseFactory.java @@ -33,6 +33,7 @@ public class DatabaseFactory { private static final ReentrantLock lock = new ReentrantLock(); private static SpiContainer container; + private static String defaultServerName; static { EbeanVersion.getVersion(); @@ -76,6 +77,12 @@ public class DatabaseFactory { } Database server = createInternal(config); if (config.isRegister()) { + if (config.isDefaultServer()) { + if (defaultServerName != null) { + throw new IllegalStateException("Registering [" + config.getName() + "] as the default server but [" + defaultServerName + "] is already registered as the default"); + } + defaultServerName = config.getName(); + } DbPrimary.setSkip(true); DbContext.getInstance().register(server, config.isDefaultServer()); } diff --git a/ebean-api/src/main/java/io/ebean/config/DatabaseConfig.java b/ebean-api/src/main/java/io/ebean/config/DatabaseConfig.java index 036a39040..8e65f9bb3 100644 --- a/ebean-api/src/main/java/io/ebean/config/DatabaseConfig.java +++ b/ebean-api/src/main/java/io/ebean/config/DatabaseConfig.java @@ -2795,6 +2795,7 @@ public class DatabaseConfig { } loadDocStoreSettings(p); + defaultServer = p.getBoolean("defaultServer", defaultServer); loadModuleInfo = p.getBoolean("loadModuleInfo", loadModuleInfo); maxCallStack = p.getInt("maxCallStack", maxCallStack); dumpMetricsOnShutdown = p.getBoolean("dumpMetricsOnShutdown", dumpMetricsOnShutdown); diff --git a/ebean-core/src/test/java/io/ebean/config/ServerConfigTest.java b/ebean-core/src/test/java/io/ebean/config/ServerConfigTest.java index a81082d16..8fda93985 100644 --- a/ebean-core/src/test/java/io/ebean/config/ServerConfigTest.java +++ b/ebean-core/src/test/java/io/ebean/config/ServerConfigTest.java @@ -74,9 +74,11 @@ public class ServerConfigTest { props.setProperty("loadModuleInfo", "true"); props.setProperty("collectQueryPlanThresholdMicros", "10000"); props.setProperty("forUpdateNoKey", "true"); + props.setProperty("defaultServer", "false"); serverConfig.loadFromProperties(props); + assertFalse(serverConfig.isDefaultServer()); assertTrue(serverConfig.isDisableL2Cache()); assertTrue(serverConfig.isNotifyL2CacheInForeground()); assertTrue(serverConfig.isDbOffline()); @@ -134,6 +136,7 @@ public class ServerConfigTest { ServerConfig serverConfig = new ServerConfig(); assertTrue(serverConfig.isIdGeneratorAutomatic()); + assertTrue(serverConfig.isDefaultServer()); serverConfig.setIdGeneratorAutomatic(false); assertFalse(serverConfig.isIdGeneratorAutomatic());