diff --git a/src/catalog/backends/common/src/main/java/org/geoserver/cloud/autoconfigure/catalog/backend/core/GeoServerBackendAutoConfiguration.java b/src/catalog/backends/common/src/main/java/org/geoserver/cloud/autoconfigure/catalog/backend/core/GeoServerBackendAutoConfiguration.java
index 364a51f0a..b18c97800 100644
--- a/src/catalog/backends/common/src/main/java/org/geoserver/cloud/autoconfigure/catalog/backend/core/GeoServerBackendAutoConfiguration.java
+++ b/src/catalog/backends/common/src/main/java/org/geoserver/cloud/autoconfigure/catalog/backend/core/GeoServerBackendAutoConfiguration.java
@@ -6,7 +6,7 @@
import org.geoserver.cloud.autoconfigure.geotools.GeoToolsHttpClientAutoConfiguration;
import org.geoserver.cloud.config.catalog.backend.core.CoreBackendConfiguration;
-import org.geoserver.cloud.config.jndidatasource.JNDIDataSourceAutoConfiguration;
+import org.geoserver.cloud.config.jndi.JNDIDataSourceConfiguration;
import org.springframework.boot.autoconfigure.AutoConfiguration;
import org.springframework.boot.autoconfigure.AutoConfigureAfter;
import org.springframework.context.annotation.Import;
@@ -23,6 +23,6 @@
* @see CoreBackendConfiguration
*/
@AutoConfiguration(
- after = {GeoToolsHttpClientAutoConfiguration.class, JNDIDataSourceAutoConfiguration.class})
+ after = {GeoToolsHttpClientAutoConfiguration.class, JNDIDataSourceConfiguration.class})
@Import(CoreBackendConfiguration.class)
public class GeoServerBackendAutoConfiguration {}
diff --git a/src/catalog/backends/pgconfig/src/main/java/org/geoserver/cloud/autoconfigure/catalog/backend/pgconfig/PgconfigDataSourceAutoConfiguration.java b/src/catalog/backends/pgconfig/src/main/java/org/geoserver/cloud/autoconfigure/catalog/backend/pgconfig/PgconfigDataSourceAutoConfiguration.java
index ed923ce93..2770156a3 100644
--- a/src/catalog/backends/pgconfig/src/main/java/org/geoserver/cloud/autoconfigure/catalog/backend/pgconfig/PgconfigDataSourceAutoConfiguration.java
+++ b/src/catalog/backends/pgconfig/src/main/java/org/geoserver/cloud/autoconfigure/catalog/backend/pgconfig/PgconfigDataSourceAutoConfiguration.java
@@ -5,14 +5,14 @@
package org.geoserver.cloud.autoconfigure.catalog.backend.pgconfig;
import org.geoserver.cloud.config.catalog.backend.pgconfig.PconfigDataSourceConfiguration;
-import org.geoserver.cloud.config.jndidatasource.JNDIDataSourceAutoConfiguration;
+import org.geoserver.cloud.config.jndi.JNDIDataSourceConfiguration;
import org.springframework.boot.autoconfigure.AutoConfiguration;
import org.springframework.context.annotation.Import;
/**
* @since 1.4
*/
-@AutoConfiguration(after = JNDIDataSourceAutoConfiguration.class)
+@AutoConfiguration(after = JNDIDataSourceConfiguration.class)
@ConditionalOnPgconfigBackendEnabled
@Import(PconfigDataSourceConfiguration.class)
public class PgconfigDataSourceAutoConfiguration {}
diff --git a/src/catalog/backends/pgconfig/src/main/java/org/geoserver/cloud/config/catalog/backend/pgconfig/PconfigDataSourceConfiguration.java b/src/catalog/backends/pgconfig/src/main/java/org/geoserver/cloud/config/catalog/backend/pgconfig/PconfigDataSourceConfiguration.java
index bdafb3b40..3ed44c404 100644
--- a/src/catalog/backends/pgconfig/src/main/java/org/geoserver/cloud/config/catalog/backend/pgconfig/PconfigDataSourceConfiguration.java
+++ b/src/catalog/backends/pgconfig/src/main/java/org/geoserver/cloud/config/catalog/backend/pgconfig/PconfigDataSourceConfiguration.java
@@ -46,9 +46,9 @@ DataSource pgconfigDataSource(PgconfigBackendProperties configprops) {
Object jndiInitializerFallback() {
log.warn(
"""
- jndiInitializer is not provided, beware a JNDI datasource \
- definition for the pgconfig catalog backend won't work.
- """);
+ jndiInitializer is not provided, beware a JNDI datasource \
+ definition for the pgconfig catalog backend won't work.
+ """);
return new Object();
}
}
diff --git a/src/catalog/backends/pgconfig/src/test/java/org/geoserver/cloud/backend/pgconfig/support/PgConfigTestContainer.java b/src/catalog/backends/pgconfig/src/test/java/org/geoserver/cloud/backend/pgconfig/support/PgConfigTestContainer.java
index 414965887..6f4027cb7 100644
--- a/src/catalog/backends/pgconfig/src/test/java/org/geoserver/cloud/backend/pgconfig/support/PgConfigTestContainer.java
+++ b/src/catalog/backends/pgconfig/src/test/java/org/geoserver/cloud/backend/pgconfig/support/PgConfigTestContainer.java
@@ -10,9 +10,9 @@
import lombok.Getter;
import lombok.SneakyThrows;
+import org.geoserver.cloud.autoconfigure.jndi.SimpleJNDIStaticContextInitializer;
import org.geoserver.cloud.config.catalog.backend.pgconfig.PgconfigDatabaseMigrations;
-import org.geoserver.cloud.config.jndi.SimpleJNDIStaticContextInitializer;
-import org.geoserver.cloud.config.jndidatasource.JNDIDataSourceAutoConfiguration;
+import org.geoserver.cloud.config.jndi.JNDIDataSourceConfiguration;
import org.springframework.boot.autoconfigure.AutoConfigurations;
import org.springframework.boot.test.context.runner.AbstractApplicationContextRunner;
import org.springframework.jdbc.core.JdbcTemplate;
@@ -94,8 +94,7 @@ public void tearDown() {
runner
// enable simplejndi
.withInitializer(new SimpleJNDIStaticContextInitializer())
- .withConfiguration(
- AutoConfigurations.of(JNDIDataSourceAutoConfiguration.class))
+ .withConfiguration(AutoConfigurations.of(JNDIDataSourceConfiguration.class))
.withPropertyValues(
"geoserver.backend.pgconfig.enabled: true", //
// java:comp/env/jdbc/testdb config properties
diff --git a/src/library/spring-boot-simplejndi/pom.xml b/src/library/spring-boot-simplejndi/pom.xml
index 8151ae3cb..8eda16451 100644
--- a/src/library/spring-boot-simplejndi/pom.xml
+++ b/src/library/spring-boot-simplejndi/pom.xml
@@ -33,5 +33,10 @@
h2
test
+
+ org.postgresql
+ postgresql
+ test
+
diff --git a/src/library/spring-boot-simplejndi/src/main/java/org/geoserver/cloud/autoconfigure/jndi/JNDIDataSourceAutoConfiguration.java b/src/library/spring-boot-simplejndi/src/main/java/org/geoserver/cloud/autoconfigure/jndi/JNDIDataSourceAutoConfiguration.java
new file mode 100644
index 000000000..9703d0ef5
--- /dev/null
+++ b/src/library/spring-boot-simplejndi/src/main/java/org/geoserver/cloud/autoconfigure/jndi/JNDIDataSourceAutoConfiguration.java
@@ -0,0 +1,19 @@
+/*
+ * (c) 2022 Open Source Geospatial Foundation - all rights reserved This code is licensed under the
+ * GPL 2.0 license, available at the root application directory.
+ */
+package org.geoserver.cloud.autoconfigure.jndi;
+
+import org.geoserver.cloud.config.jndi.JNDIDataSourceConfiguration;
+import org.springframework.boot.autoconfigure.AutoConfiguration;
+import org.springframework.boot.autoconfigure.AutoConfigureOrder;
+import org.springframework.context.annotation.Import;
+import org.springframework.core.Ordered;
+
+/**
+ * @since 1.0
+ */
+@AutoConfiguration
+@AutoConfigureOrder(Ordered.HIGHEST_PRECEDENCE)
+@Import(JNDIDataSourceConfiguration.class)
+public class JNDIDataSourceAutoConfiguration {}
diff --git a/src/library/spring-boot-simplejndi/src/main/java/org/geoserver/cloud/config/jndi/SimpleJNDIStaticContextInitializer.java b/src/library/spring-boot-simplejndi/src/main/java/org/geoserver/cloud/autoconfigure/jndi/SimpleJNDIStaticContextInitializer.java
similarity index 98%
rename from src/library/spring-boot-simplejndi/src/main/java/org/geoserver/cloud/config/jndi/SimpleJNDIStaticContextInitializer.java
rename to src/library/spring-boot-simplejndi/src/main/java/org/geoserver/cloud/autoconfigure/jndi/SimpleJNDIStaticContextInitializer.java
index 22a87041d..4416db3f4 100644
--- a/src/library/spring-boot-simplejndi/src/main/java/org/geoserver/cloud/config/jndi/SimpleJNDIStaticContextInitializer.java
+++ b/src/library/spring-boot-simplejndi/src/main/java/org/geoserver/cloud/autoconfigure/jndi/SimpleJNDIStaticContextInitializer.java
@@ -2,7 +2,7 @@
* (c) 2022 Open Source Geospatial Foundation - all rights reserved This code is licensed under the
* GPL 2.0 license, available at the root application directory.
*/
-package org.geoserver.cloud.config.jndi;
+package org.geoserver.cloud.autoconfigure.jndi;
import lombok.extern.slf4j.Slf4j;
diff --git a/src/library/spring-boot-simplejndi/src/main/java/org/geoserver/cloud/config/jndidatasource/JNDIDataSourceAutoConfiguration.java b/src/library/spring-boot-simplejndi/src/main/java/org/geoserver/cloud/config/jndi/JNDIDataSourceConfiguration.java
similarity index 75%
rename from src/library/spring-boot-simplejndi/src/main/java/org/geoserver/cloud/config/jndidatasource/JNDIDataSourceAutoConfiguration.java
rename to src/library/spring-boot-simplejndi/src/main/java/org/geoserver/cloud/config/jndi/JNDIDataSourceConfiguration.java
index 5fc0f0c39..350ab5626 100644
--- a/src/library/spring-boot-simplejndi/src/main/java/org/geoserver/cloud/config/jndidatasource/JNDIDataSourceAutoConfiguration.java
+++ b/src/library/spring-boot-simplejndi/src/main/java/org/geoserver/cloud/config/jndi/JNDIDataSourceConfiguration.java
@@ -2,18 +2,18 @@
* (c) 2022 Open Source Geospatial Foundation - all rights reserved This code is licensed under the
* GPL 2.0 license, available at the root application directory.
*/
-package org.geoserver.cloud.config.jndidatasource;
+package org.geoserver.cloud.config.jndi;
-import org.springframework.boot.autoconfigure.AutoConfiguration;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
/**
* @since 1.0
*/
-@AutoConfiguration
+@Configuration
@EnableConfigurationProperties(JNDIDataSourcesConfigurationProperties.class)
-public class JNDIDataSourceAutoConfiguration {
+public class JNDIDataSourceConfiguration {
@Bean
JNDIInitializer jndiInitializer(JNDIDataSourcesConfigurationProperties config) {
return new JNDIInitializer(config);
diff --git a/src/library/spring-boot-simplejndi/src/main/java/org/geoserver/cloud/config/jndidatasource/JNDIDataSourcesConfigurationProperties.java b/src/library/spring-boot-simplejndi/src/main/java/org/geoserver/cloud/config/jndi/JNDIDataSourcesConfigurationProperties.java
similarity index 91%
rename from src/library/spring-boot-simplejndi/src/main/java/org/geoserver/cloud/config/jndidatasource/JNDIDataSourcesConfigurationProperties.java
rename to src/library/spring-boot-simplejndi/src/main/java/org/geoserver/cloud/config/jndi/JNDIDataSourcesConfigurationProperties.java
index 3edd15ce7..5c2598662 100644
--- a/src/library/spring-boot-simplejndi/src/main/java/org/geoserver/cloud/config/jndidatasource/JNDIDataSourcesConfigurationProperties.java
+++ b/src/library/spring-boot-simplejndi/src/main/java/org/geoserver/cloud/config/jndi/JNDIDataSourcesConfigurationProperties.java
@@ -2,7 +2,7 @@
* (c) 2022 Open Source Geospatial Foundation - all rights reserved This code is licensed under the
* GPL 2.0 license, available at the root application directory.
*/
-package org.geoserver.cloud.config.jndidatasource;
+package org.geoserver.cloud.config.jndi;
import lombok.Data;
diff --git a/src/library/spring-boot-simplejndi/src/main/java/org/geoserver/cloud/config/jndidatasource/JNDIDatasourceConfig.java b/src/library/spring-boot-simplejndi/src/main/java/org/geoserver/cloud/config/jndi/JNDIDatasourceConfig.java
similarity index 93%
rename from src/library/spring-boot-simplejndi/src/main/java/org/geoserver/cloud/config/jndidatasource/JNDIDatasourceConfig.java
rename to src/library/spring-boot-simplejndi/src/main/java/org/geoserver/cloud/config/jndi/JNDIDatasourceConfig.java
index f7b2f4429..058ef26bd 100644
--- a/src/library/spring-boot-simplejndi/src/main/java/org/geoserver/cloud/config/jndidatasource/JNDIDatasourceConfig.java
+++ b/src/library/spring-boot-simplejndi/src/main/java/org/geoserver/cloud/config/jndi/JNDIDatasourceConfig.java
@@ -2,7 +2,7 @@
* (c) 2022 Open Source Geospatial Foundation - all rights reserved This code is licensed under the
* GPL 2.0 license, available at the root application directory.
*/
-package org.geoserver.cloud.config.jndidatasource;
+package org.geoserver.cloud.config.jndi;
import lombok.Data;
import lombok.EqualsAndHashCode;
diff --git a/src/library/spring-boot-simplejndi/src/main/java/org/geoserver/cloud/config/jndidatasource/JNDIInitializer.java b/src/library/spring-boot-simplejndi/src/main/java/org/geoserver/cloud/config/jndi/JNDIInitializer.java
similarity index 91%
rename from src/library/spring-boot-simplejndi/src/main/java/org/geoserver/cloud/config/jndidatasource/JNDIInitializer.java
rename to src/library/spring-boot-simplejndi/src/main/java/org/geoserver/cloud/config/jndi/JNDIInitializer.java
index f2a84c586..f1c128931 100644
--- a/src/library/spring-boot-simplejndi/src/main/java/org/geoserver/cloud/config/jndidatasource/JNDIInitializer.java
+++ b/src/library/spring-boot-simplejndi/src/main/java/org/geoserver/cloud/config/jndi/JNDIInitializer.java
@@ -2,7 +2,7 @@
* (c) 2022 Open Source Geospatial Foundation - all rights reserved This code is licensed under the
* GPL 2.0 license, available at the root application directory.
*/
-package org.geoserver.cloud.config.jndidatasource;
+package org.geoserver.cloud.config.jndi;
import com.zaxxer.hikari.HikariDataSource;
@@ -28,12 +28,17 @@ public class JNDIInitializer implements InitializingBean {
private JNDIDataSourcesConfigurationProperties config;
+ static boolean initialized = false;
+
JNDIInitializer(JNDIDataSourcesConfigurationProperties config) {
this.config = config;
}
@Override
public void afterPropertiesSet() throws Exception {
+ if (initialized)
+ throw new IllegalStateException("JNDI already initialized or failed. Giving up.");
+ initialized = true;
Map configs = config.getDatasources();
@@ -52,8 +57,12 @@ public void afterPropertiesSet() throws Exception {
props.setName(name);
}
});
- configs.entrySet()
- .forEach(e -> setUpDataSource(toJndiDatasourceName(e.getKey()), e.getValue()));
+ try {
+ configs.entrySet()
+ .forEach(e -> setUpDataSource(toJndiDatasourceName(e.getKey()), e.getValue()));
+ } catch (Exception e) {
+ throw new IllegalStateException(e);
+ }
}
String toJndiDatasourceName(String dsname) {
diff --git a/src/library/spring-boot-simplejndi/src/main/resources/META-INF/spring.factories b/src/library/spring-boot-simplejndi/src/main/resources/META-INF/spring.factories
index af2e32717..ce316edf9 100644
--- a/src/library/spring-boot-simplejndi/src/main/resources/META-INF/spring.factories
+++ b/src/library/spring-boot-simplejndi/src/main/resources/META-INF/spring.factories
@@ -1,7 +1,7 @@
# Initializers
org.springframework.context.ApplicationContextInitializer=\
-org.geoserver.cloud.config.jndi.SimpleJNDIStaticContextInitializer
+org.geoserver.cloud.autoconfigure.jndi.SimpleJNDIStaticContextInitializer
# Auto Configure
org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
-org.geoserver.cloud.config.jndidatasource.JNDIDataSourceAutoConfiguration
\ No newline at end of file
+org.geoserver.cloud.autoconfigure.jndi.JNDIDataSourceAutoConfiguration
\ No newline at end of file
diff --git a/src/library/spring-boot-simplejndi/src/test/java/org/geoserver/cloud/config/jndidatasource/JNDIDataSourceAutoConfigurationTest.java b/src/library/spring-boot-simplejndi/src/test/java/org/geoserver/cloud/autoconfigure/jndi/JNDIDataSourceAutoConfigurationTest.java
similarity index 84%
rename from src/library/spring-boot-simplejndi/src/test/java/org/geoserver/cloud/config/jndidatasource/JNDIDataSourceAutoConfigurationTest.java
rename to src/library/spring-boot-simplejndi/src/test/java/org/geoserver/cloud/autoconfigure/jndi/JNDIDataSourceAutoConfigurationTest.java
index f60f47dfa..9d73daf76 100644
--- a/src/library/spring-boot-simplejndi/src/test/java/org/geoserver/cloud/config/jndidatasource/JNDIDataSourceAutoConfigurationTest.java
+++ b/src/library/spring-boot-simplejndi/src/test/java/org/geoserver/cloud/autoconfigure/jndi/JNDIDataSourceAutoConfigurationTest.java
@@ -2,13 +2,13 @@
* (c) 2022 Open Source Geospatial Foundation - all rights reserved This code is licensed under the
* GPL 2.0 license, available at the root application directory.
*/
-package org.geoserver.cloud.config.jndidatasource;
+package org.geoserver.cloud.autoconfigure.jndi;
import static org.assertj.core.api.Assertions.assertThat;
import com.zaxxer.hikari.HikariDataSource;
-import org.geoserver.cloud.config.jndi.SimpleJNDIStaticContextInitializer;
+import org.geoserver.cloud.config.jndi.JNDIDataSourceConfiguration;
import org.junit.jupiter.api.Test;
import org.springframework.boot.autoconfigure.AutoConfigurations;
import org.springframework.boot.test.context.runner.ApplicationContextRunner;
@@ -24,11 +24,10 @@ class JNDIDataSourceAutoConfigurationTest {
private ApplicationContextRunner runner =
new ApplicationContextRunner()
.withInitializer(new SimpleJNDIStaticContextInitializer())
- .withConfiguration(
- AutoConfigurations.of(JNDIDataSourceAutoConfiguration.class));
+ .withConfiguration(AutoConfigurations.of(JNDIDataSourceConfiguration.class));
@Test
- void test() {
+ void testInitialContextLookup() {
runner.withPropertyValues( //
"jndi.datasources.ds1.url: jdbc:h2:mem:ds1", //
diff --git a/src/library/spring-boot-simplejndi/src/test/java/org/geoserver/cloud/config/jndi/SimpleJNDIStaticContextInitializerTest.java b/src/library/spring-boot-simplejndi/src/test/java/org/geoserver/cloud/config/jndi/SimpleJNDIStaticContextInitializerTest.java
index 913a0e282..be57f5eb6 100644
--- a/src/library/spring-boot-simplejndi/src/test/java/org/geoserver/cloud/config/jndi/SimpleJNDIStaticContextInitializerTest.java
+++ b/src/library/spring-boot-simplejndi/src/test/java/org/geoserver/cloud/config/jndi/SimpleJNDIStaticContextInitializerTest.java
@@ -6,6 +6,7 @@
import static org.assertj.core.api.Assertions.assertThat;
+import org.geoserver.cloud.autoconfigure.jndi.SimpleJNDIStaticContextInitializer;
import org.geoserver.cloud.jndi.SimpleNamingContext;
import org.junit.jupiter.api.Test;
import org.springframework.boot.test.context.runner.ApplicationContextRunner;