You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@couchdb.apache.org by rn...@apache.org on 2023/03/13 14:44:15 UTC
[couchdb] 01/02: move application config to base project to tighten type safety
This is an automated email from the ASF dual-hosted git repository.
rnewson pushed a commit to branch import-nouveau
in repository https://gitbox.apache.org/repos/asf/couchdb.git
commit 48ac91e3f0c29c330d010e215b0e0eec6ef498b8
Author: Robert Newson <rn...@apache.org>
AuthorDate: Mon Mar 13 14:04:20 2023 +0000
move application config to base project to tighten type safety
---
.../org/apache/couchdb/nouveau/LuceneBundle.java | 2 +-
.../nouveau/NouveauApplicationConfiguration.java | 86 ++++++++++++++++++++++
.../couchdb/nouveau/lucene4/Lucene4Bundle.java | 6 +-
.../org.apache.couchdb.nouveau.LuceneBundle | 16 ++++
.../couchdb/nouveau/lucene9/Lucene9Bundle.java | 6 +-
.../org.apache.couchdb.nouveau.LuceneBundle | 16 ++++
.../apache/couchdb/nouveau/NouveauApplication.java | 11 +--
7 files changed, 129 insertions(+), 14 deletions(-)
diff --git a/java/nouveau/base/src/main/java/org/apache/couchdb/nouveau/LuceneBundle.java b/java/nouveau/base/src/main/java/org/apache/couchdb/nouveau/LuceneBundle.java
index d309b0312..5eecd5973 100644
--- a/java/nouveau/base/src/main/java/org/apache/couchdb/nouveau/LuceneBundle.java
+++ b/java/nouveau/base/src/main/java/org/apache/couchdb/nouveau/LuceneBundle.java
@@ -17,7 +17,7 @@ import org.apache.couchdb.nouveau.core.IndexManager;
import io.dropwizard.ConfiguredBundle;
-public class LuceneBundle<T> implements ConfiguredBundle<T> {
+public class LuceneBundle implements ConfiguredBundle<NouveauApplicationConfiguration> {
protected IndexManager indexManager;
diff --git a/java/nouveau/base/src/main/java/org/apache/couchdb/nouveau/NouveauApplicationConfiguration.java b/java/nouveau/base/src/main/java/org/apache/couchdb/nouveau/NouveauApplicationConfiguration.java
new file mode 100644
index 000000000..6d90086ac
--- /dev/null
+++ b/java/nouveau/base/src/main/java/org/apache/couchdb/nouveau/NouveauApplicationConfiguration.java
@@ -0,0 +1,86 @@
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+package org.apache.couchdb.nouveau;
+
+import java.nio.file.Path;
+
+import javax.validation.constraints.Min;
+import javax.validation.constraints.NotNull;
+
+import com.fasterxml.jackson.annotation.JsonProperty;
+
+import io.dropwizard.Configuration;
+
+public class NouveauApplicationConfiguration extends Configuration {
+
+ @Min(10)
+ private int maxIndexesOpen = 10;
+
+ @Min(10)
+ private int commitIntervalSeconds = 10;
+
+ @Min(30)
+ private int idleSeconds = 30;
+
+ @Min(-1)
+ private int lockCount = -1;
+
+ @NotNull
+ private Path rootDir = null;
+
+ @JsonProperty
+ public void setMaxIndexesOpen(int maxIndexesOpen) {
+ this.maxIndexesOpen = maxIndexesOpen;
+ }
+
+ public int getMaxIndexesOpen() {
+ return maxIndexesOpen;
+ }
+
+ @JsonProperty
+ public void setCommitIntervalSeconds(int commitIntervalSeconds) {
+ this.commitIntervalSeconds = commitIntervalSeconds;
+ }
+
+ public int getCommitIntervalSeconds() {
+ return commitIntervalSeconds;
+ }
+
+ @JsonProperty
+ public void setIdleSeconds(int idleSeconds) {
+ this.idleSeconds = idleSeconds;
+ }
+
+ public int getIdleSeconds() {
+ return idleSeconds;
+ }
+
+ public int getLockCount() {
+ return lockCount;
+ }
+
+ public void setLockCount(int lockCount) {
+ this.lockCount = lockCount;
+ }
+
+ @JsonProperty
+ public void setRootDir(Path rootDir) {
+ this.rootDir = rootDir;
+ }
+
+ public Path getRootDir() {
+ return rootDir;
+ }
+
+}
diff --git a/java/nouveau/lucene4/src/main/java/org/apache/couchdb/nouveau/lucene4/Lucene4Bundle.java b/java/nouveau/lucene4/src/main/java/org/apache/couchdb/nouveau/lucene4/Lucene4Bundle.java
index 93a0a564c..228f12d26 100644
--- a/java/nouveau/lucene4/src/main/java/org/apache/couchdb/nouveau/lucene4/Lucene4Bundle.java
+++ b/java/nouveau/lucene4/src/main/java/org/apache/couchdb/nouveau/lucene4/Lucene4Bundle.java
@@ -16,19 +16,19 @@ package org.apache.couchdb.nouveau.lucene4;
import java.util.concurrent.ExecutorService;
import org.apache.couchdb.nouveau.LuceneBundle;
+import org.apache.couchdb.nouveau.NouveauApplicationConfiguration;
import org.apache.couchdb.nouveau.lucene4.core.Lucene4Module;
import org.apache.couchdb.nouveau.lucene4.core.ParallelSearcherFactory;
import org.apache.couchdb.nouveau.lucene4.resources.AnalyzeResource;
import org.apache.couchdb.nouveau.lucene4.resources.IndexResource;
import org.apache.lucene.search.SearcherFactory;
-import io.dropwizard.Configuration;
import io.dropwizard.setup.Environment;
-public final class Lucene4Bundle extends LuceneBundle<Configuration> {
+public final class Lucene4Bundle extends LuceneBundle {
@Override
- public void run(final Configuration configuration, final Environment environment) throws Exception {
+ public void run(final NouveauApplicationConfiguration configuration, final Environment environment) throws Exception {
// Serialization classes
environment.getObjectMapper().registerModule(new Lucene4Module());
diff --git a/java/nouveau/lucene4/src/main/resources/META-INF/services/org.apache.couchdb.nouveau.LuceneBundle b/java/nouveau/lucene4/src/main/resources/META-INF/services/org.apache.couchdb.nouveau.LuceneBundle
new file mode 100644
index 000000000..8fe744dd9
--- /dev/null
+++ b/java/nouveau/lucene4/src/main/resources/META-INF/services/org.apache.couchdb.nouveau.LuceneBundle
@@ -0,0 +1,16 @@
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements. See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.
+# The ASF licenses this file to You under the Apache License, Version 2.0
+# (the "License"); you may not use this file except in compliance with
+# the License. You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+org.apache.couchdb.nouveau.lucene4.Lucene4Bundle
diff --git a/java/nouveau/lucene9/src/main/java/org/apache/couchdb/nouveau/lucene9/Lucene9Bundle.java b/java/nouveau/lucene9/src/main/java/org/apache/couchdb/nouveau/lucene9/Lucene9Bundle.java
index 669f6ccbb..ee5c299e4 100644
--- a/java/nouveau/lucene9/src/main/java/org/apache/couchdb/nouveau/lucene9/Lucene9Bundle.java
+++ b/java/nouveau/lucene9/src/main/java/org/apache/couchdb/nouveau/lucene9/Lucene9Bundle.java
@@ -16,19 +16,19 @@ package org.apache.couchdb.nouveau.lucene9;
import java.util.concurrent.ExecutorService;
import org.apache.couchdb.nouveau.LuceneBundle;
+import org.apache.couchdb.nouveau.NouveauApplicationConfiguration;
import org.apache.couchdb.nouveau.lucene9.core.Lucene9Module;
import org.apache.couchdb.nouveau.lucene9.core.ParallelSearcherFactory;
import org.apache.couchdb.nouveau.lucene9.resources.AnalyzeResource;
import org.apache.couchdb.nouveau.lucene9.resources.IndexResource;
import org.apache.lucene.search.SearcherFactory;
-import io.dropwizard.Configuration;
import io.dropwizard.setup.Environment;
-public final class Lucene9Bundle extends LuceneBundle<Configuration> {
+public final class Lucene9Bundle extends LuceneBundle {
@Override
- public void run(final Configuration configuration, final Environment environment) throws Exception {
+ public void run(final NouveauApplicationConfiguration configuration, final Environment environment) throws Exception {
// Serialization classes
environment.getObjectMapper().registerModule(new Lucene9Module());
diff --git a/java/nouveau/lucene9/src/main/resources/META-INF/services/org.apache.couchdb.nouveau.LuceneBundle b/java/nouveau/lucene9/src/main/resources/META-INF/services/org.apache.couchdb.nouveau.LuceneBundle
new file mode 100644
index 000000000..64ad96f64
--- /dev/null
+++ b/java/nouveau/lucene9/src/main/resources/META-INF/services/org.apache.couchdb.nouveau.LuceneBundle
@@ -0,0 +1,16 @@
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements. See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.
+# The ASF licenses this file to You under the Apache License, Version 2.0
+# (the "License"); you may not use this file except in compliance with
+# the License. You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+org.apache.couchdb.nouveau.lucene9.Lucene9Bundle
diff --git a/java/nouveau/server/src/main/java/org/apache/couchdb/nouveau/NouveauApplication.java b/java/nouveau/server/src/main/java/org/apache/couchdb/nouveau/NouveauApplication.java
index 7c5de8fbc..eba48ccd6 100644
--- a/java/nouveau/server/src/main/java/org/apache/couchdb/nouveau/NouveauApplication.java
+++ b/java/nouveau/server/src/main/java/org/apache/couchdb/nouveau/NouveauApplication.java
@@ -22,7 +22,6 @@ import org.apache.couchdb.nouveau.core.IndexManager;
import org.apache.couchdb.nouveau.core.UpdatesOutOfOrderExceptionMapper;
import io.dropwizard.Application;
-import io.dropwizard.ConfiguredBundle;
import io.dropwizard.setup.Bootstrap;
import io.dropwizard.setup.Environment;
@@ -49,13 +48,11 @@ public class NouveauApplication extends Application<NouveauApplicationConfigurat
try {
ClassLoader classLoader = URLClassLoader
.newInstance(new URL[] { new URL(System.getProperty(name)) });
- final ServiceLoader<ConfiguredBundle> bundleLoader = ServiceLoader.load(ConfiguredBundle.class,
+ final ServiceLoader<LuceneBundle> bundleLoader = ServiceLoader.load(LuceneBundle.class,
classLoader);
- for (final ConfiguredBundle<NouveauApplicationConfiguration> bundle : bundleLoader) {
- if (bundle instanceof LuceneBundle) {
- ((LuceneBundle)bundle).setIndexManager(indexManager);
- bootstrap.addBundle(bundle);
- }
+ for (final LuceneBundle bundle : bundleLoader) {
+ bundle.setIndexManager(indexManager);
+ bootstrap.addBundle(bundle);
}
} catch (final MalformedURLException e) {
throw new Error(e);