From 91360c7854bf82705f08619aaac2c5253e12d826 Mon Sep 17 00:00:00 2001 From: Maximillian Arruda Date: Sat, 15 Jul 2023 03:38:13 -0300 Subject: [PATCH 01/24] build: create module for keyvalue coachbase support Signed-off-by: Maximillian Arruda --- .../couchbase-parent/deployment/pom.xml | 44 +++++++ .../integration-tests/pom.xml | 120 ++++++++++++++++++ keyvalue-parent/couchbase-parent/pom.xml | 35 +++++ .../couchbase-parent/runtime/pom.xml | 54 ++++++++ keyvalue-parent/pom.xml | 1 + pom.xml | 5 + 6 files changed, 259 insertions(+) create mode 100644 keyvalue-parent/couchbase-parent/deployment/pom.xml create mode 100644 keyvalue-parent/couchbase-parent/integration-tests/pom.xml create mode 100644 keyvalue-parent/couchbase-parent/pom.xml create mode 100644 keyvalue-parent/couchbase-parent/runtime/pom.xml diff --git a/keyvalue-parent/couchbase-parent/deployment/pom.xml b/keyvalue-parent/couchbase-parent/deployment/pom.xml new file mode 100644 index 0000000..9ea1001 --- /dev/null +++ b/keyvalue-parent/couchbase-parent/deployment/pom.xml @@ -0,0 +1,44 @@ + + + 4.0.0 + + io.quarkiverse.jnosql + quarkus-jnosql-keyvalue-couchbase-parent + 1.0.6-SNAPSHOT + + quarkus-jnosql-keyvalue-couchbase-deployment + Quarkus JNoSQL - KeyValue - Couchbase - Deployment + + + io.quarkiverse.jnosql + quarkus-jnosql-keyvalue-deployment + ${project.version} + + + io.quarkiverse.jnosql + quarkus-jnosql-keyvalue-couchbase + ${project.version} + + + io.quarkus + quarkus-junit5-internal + test + + + + + + maven-compiler-plugin + + + + io.quarkus + quarkus-extension-processor + ${quarkus.version} + + + + + + + diff --git a/keyvalue-parent/couchbase-parent/integration-tests/pom.xml b/keyvalue-parent/couchbase-parent/integration-tests/pom.xml new file mode 100644 index 0000000..b8d662c --- /dev/null +++ b/keyvalue-parent/couchbase-parent/integration-tests/pom.xml @@ -0,0 +1,120 @@ + + + 4.0.0 + + io.quarkiverse.jnosql + quarkus-jnosql-keyvalue-couchbase-parent + 1.0.6-SNAPSHOT + + quarkus-jnosql-keyvalue-couchbase-integration-tests + Quarkus JNoSQL - KeyValue - Couchbase - Integration Tests + + 1.18.3 + true + + + + io.quarkus + quarkus-resteasy + + + io.quarkiverse.jnosql + quarkus-jnosql-keyvalue-integration-tests + ${project.version} + + + io.quarkiverse.jnosql + quarkus-jnosql-keyvalue-couchbase + ${project.version} + + + io.quarkus + quarkus-junit5 + test + + + org.awaitility + awaitility + test + + + io.rest-assured + rest-assured + test + + + org.testcontainers + couchbase + ${testcontainers.version} + test + + + junit + junit + + + + + io.quarkus + quarkus-junit4-mock + test + + + + + + io.quarkus + quarkus-maven-plugin + + + + build + + + + + + maven-failsafe-plugin + + + + integration-test + verify + + + + ${project.build.directory}/${project.build.finalName}-runner + org.jboss.logmanager.LogManager + ${maven.home} + + + + + + + + + + native-image + + + native + + + + + + maven-surefire-plugin + + ${native.surefire.skip} + + + + + + false + native + + + + diff --git a/keyvalue-parent/couchbase-parent/pom.xml b/keyvalue-parent/couchbase-parent/pom.xml new file mode 100644 index 0000000..91fad13 --- /dev/null +++ b/keyvalue-parent/couchbase-parent/pom.xml @@ -0,0 +1,35 @@ + + + 4.0.0 + + + io.quarkiverse.jnosql + quarkus-jnosql-keyvalue-parent + 1.0.6-SNAPSHOT + + + pom + quarkus-jnosql-keyvalue-couchbase-parent + Quarkus JNoSQL - KeyValue - Couchbase - Parent + + + deployment + runtime + + + + + it + + + performRelease + !true + + + + integration-tests + + + + + \ No newline at end of file diff --git a/keyvalue-parent/couchbase-parent/runtime/pom.xml b/keyvalue-parent/couchbase-parent/runtime/pom.xml new file mode 100644 index 0000000..eb087dc --- /dev/null +++ b/keyvalue-parent/couchbase-parent/runtime/pom.xml @@ -0,0 +1,54 @@ + + + 4.0.0 + + io.quarkiverse.jnosql + quarkus-jnosql-keyvalue-couchbase-parent + 1.0.6-SNAPSHOT + + quarkus-jnosql-keyvalue-couchbase + Quarkus JNoSQL - KeyValue - Couchbase - Runtime + + + io.quarkiverse.jnosql + quarkus-jnosql-keyvalue + ${project.version} + + + org.eclipse.jnosql.databases + jnosql-couchbase + + + + + + io.quarkus + quarkus-extension-maven-plugin + ${quarkus.version} + + + compile + + extension-descriptor + + + ${project.groupId}:${project.artifactId}-deployment:${project.version} + + + + + + maven-compiler-plugin + + + + io.quarkus + quarkus-extension-processor + ${quarkus.version} + + + + + + + diff --git a/keyvalue-parent/pom.xml b/keyvalue-parent/pom.xml index 512e084..090cc5b 100644 --- a/keyvalue-parent/pom.xml +++ b/keyvalue-parent/pom.xml @@ -18,6 +18,7 @@ arangodb-parent dynamodb-parent redis-parent + couchbase-parent integration-tests diff --git a/pom.xml b/pom.xml index bb485fc..89889e2 100644 --- a/pom.xml +++ b/pom.xml @@ -119,6 +119,11 @@ jnosql-arangodb ${jnosql.version} + + org.eclipse.jnosql.databases + jnosql-couchbase + ${jnosql.version} + From 7aac19e3d5e0f8ffe8665168adce01ba7d7590a7 Mon Sep 17 00:00:00 2001 From: Maximillian Arruda Date: Sat, 15 Jul 2023 03:40:46 -0300 Subject: [PATCH 02/24] feat: add quarkus-jnosql-keyvalue-couchbase src files Signed-off-by: Maximillian Arruda --- ...QuarkusCouchbaseKeyValueConfiguration.java | 30 +++++++++++++++++++ .../resources/META-INF/quarkus-extension.yaml | 9 ++++++ 2 files changed, 39 insertions(+) create mode 100644 keyvalue-parent/couchbase-parent/runtime/src/main/java/org/eclipse/jnosql/databases/couchbase/communication/QuarkusCouchbaseKeyValueConfiguration.java create mode 100644 keyvalue-parent/couchbase-parent/runtime/src/main/resources/META-INF/quarkus-extension.yaml diff --git a/keyvalue-parent/couchbase-parent/runtime/src/main/java/org/eclipse/jnosql/databases/couchbase/communication/QuarkusCouchbaseKeyValueConfiguration.java b/keyvalue-parent/couchbase-parent/runtime/src/main/java/org/eclipse/jnosql/databases/couchbase/communication/QuarkusCouchbaseKeyValueConfiguration.java new file mode 100644 index 0000000..1e875c1 --- /dev/null +++ b/keyvalue-parent/couchbase-parent/runtime/src/main/java/org/eclipse/jnosql/databases/couchbase/communication/QuarkusCouchbaseKeyValueConfiguration.java @@ -0,0 +1,30 @@ +package org.eclipse.jnosql.databases.couchbase.communication; + +import java.util.List; + +import jakarta.data.exceptions.MappingException; +import jakarta.inject.Singleton; + +import org.eclipse.jnosql.communication.Settings; +import org.eclipse.jnosql.communication.keyvalue.KeyValueConfiguration; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +@Singleton +public class QuarkusCouchbaseKeyValueConfiguration implements KeyValueConfiguration { + + @Override + public CouchbaseBucketManagerFactory apply(Settings settings) throws NullPointerException { + validateSettings(settings); + return new CouchbaseKeyValueConfiguration().apply(settings); + } + + protected void validateSettings(Settings settings) { + List.of( + CouchbaseConfigurations.HOST, + CouchbaseConfigurations.USER, + CouchbaseConfigurations.PASSWORD + ).forEach(setting -> settings.get(setting, String.class).orElseThrow( + () -> new MappingException("Please, inform the database filling up the property " + setting.get()))); + } +} diff --git a/keyvalue-parent/couchbase-parent/runtime/src/main/resources/META-INF/quarkus-extension.yaml b/keyvalue-parent/couchbase-parent/runtime/src/main/resources/META-INF/quarkus-extension.yaml new file mode 100644 index 0000000..752371e --- /dev/null +++ b/keyvalue-parent/couchbase-parent/runtime/src/main/resources/META-INF/quarkus-extension.yaml @@ -0,0 +1,9 @@ +name: JNoSQL KeyValue Couchbase +#description: Do something useful. +metadata: +# keywords: +# - jnosql +# guide: https://quarkiverse.github.io/quarkiverse-docs/jnosql/dev/ +# categories: +# - "miscellaneous" +# status: "preview" From 9fe185db13636516f66ed075b844996deb35a363 Mon Sep 17 00:00:00 2001 From: Maximillian Arruda Date: Sat, 15 Jul 2023 03:42:25 -0300 Subject: [PATCH 03/24] feat: add quarkus-jnosql-keyvalue-couchbase-deployment source files Signed-off-by: Maximillian Arruda --- .../couchbase/deployment/Processor.java | 24 +++++++++++++++++++ .../document/test/JNoSQLDevModeTest.java | 23 ++++++++++++++++++ .../jnosql/document/test/JNoSQLTest.java | 23 ++++++++++++++++++ 3 files changed, 70 insertions(+) create mode 100644 keyvalue-parent/couchbase-parent/deployment/src/main/java/io/quarkiverse/jnosql/keyvalue/couchbase/deployment/Processor.java create mode 100644 keyvalue-parent/couchbase-parent/deployment/src/test/java/io/quarkiverse/jnosql/document/test/JNoSQLDevModeTest.java create mode 100644 keyvalue-parent/couchbase-parent/deployment/src/test/java/io/quarkiverse/jnosql/document/test/JNoSQLTest.java diff --git a/keyvalue-parent/couchbase-parent/deployment/src/main/java/io/quarkiverse/jnosql/keyvalue/couchbase/deployment/Processor.java b/keyvalue-parent/couchbase-parent/deployment/src/main/java/io/quarkiverse/jnosql/keyvalue/couchbase/deployment/Processor.java new file mode 100644 index 0000000..2d93a3c --- /dev/null +++ b/keyvalue-parent/couchbase-parent/deployment/src/main/java/io/quarkiverse/jnosql/keyvalue/couchbase/deployment/Processor.java @@ -0,0 +1,24 @@ +package io.quarkiverse.jnosql.keyvalue.couchbase.deployment; + +import org.eclipse.jnosql.databases.couchbase.communication.QuarkusCouchbaseKeyValueConfiguration; + +import io.quarkus.arc.deployment.AdditionalBeanBuildItem; +import io.quarkus.deployment.annotations.BuildProducer; +import io.quarkus.deployment.annotations.BuildStep; +import io.quarkus.deployment.builditem.FeatureBuildItem; + +class Processor { + + private static final String FEATURE = "jnosql-keyvalue-couchbase"; + + @BuildStep + FeatureBuildItem feature() { + return new FeatureBuildItem(FEATURE); + } + + @BuildStep + void build(BuildProducer additionalBeanProducer) { + additionalBeanProducer.produce(AdditionalBeanBuildItem.unremovableOf(QuarkusCouchbaseKeyValueConfiguration.class)); + } + +} diff --git a/keyvalue-parent/couchbase-parent/deployment/src/test/java/io/quarkiverse/jnosql/document/test/JNoSQLDevModeTest.java b/keyvalue-parent/couchbase-parent/deployment/src/test/java/io/quarkiverse/jnosql/document/test/JNoSQLDevModeTest.java new file mode 100644 index 0000000..70a8d43 --- /dev/null +++ b/keyvalue-parent/couchbase-parent/deployment/src/test/java/io/quarkiverse/jnosql/document/test/JNoSQLDevModeTest.java @@ -0,0 +1,23 @@ +package io.quarkiverse.jnosql.document.test; + +import org.jboss.shrinkwrap.api.ShrinkWrap; +import org.jboss.shrinkwrap.api.spec.JavaArchive; +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.RegisterExtension; + +import io.quarkus.test.QuarkusDevModeTest; + +public class JNoSQLDevModeTest { + + // Start hot reload (DevMode) test with your extension loaded + @RegisterExtension + static final QuarkusDevModeTest devModeTest = new QuarkusDevModeTest() + .setArchiveProducer(() -> ShrinkWrap.create(JavaArchive.class)); + + @Test + public void writeYourOwnDevModeTest() { + // Write your dev mode tests here - see the testing extension guide https://quarkus.io/guides/writing-extensions#testing-hot-reload for more information + Assertions.assertTrue(true, "Add dev mode assertions to " + getClass().getName()); + } +} diff --git a/keyvalue-parent/couchbase-parent/deployment/src/test/java/io/quarkiverse/jnosql/document/test/JNoSQLTest.java b/keyvalue-parent/couchbase-parent/deployment/src/test/java/io/quarkiverse/jnosql/document/test/JNoSQLTest.java new file mode 100644 index 0000000..cb7cfec --- /dev/null +++ b/keyvalue-parent/couchbase-parent/deployment/src/test/java/io/quarkiverse/jnosql/document/test/JNoSQLTest.java @@ -0,0 +1,23 @@ +package io.quarkiverse.jnosql.document.test; + +import org.jboss.shrinkwrap.api.ShrinkWrap; +import org.jboss.shrinkwrap.api.spec.JavaArchive; +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.RegisterExtension; + +import io.quarkus.test.QuarkusUnitTest; + +public class JNoSQLTest { + + // Start unit test with your extension loaded + @RegisterExtension + static final QuarkusUnitTest unitTest = new QuarkusUnitTest() + .setArchiveProducer(() -> ShrinkWrap.create(JavaArchive.class)); + + @Test + public void writeYourOwnUnitTest() { + // Write your unit tests here - see the testing extension guide https://quarkus.io/guides/writing-extensions#testing-extensions for more information + Assertions.assertTrue(true, "Add some assertions to " + getClass().getName()); + } +} From e4835d3fc898b22f736f6dbef685e10cb3840678 Mon Sep 17 00:00:00 2001 From: Maximillian Arruda Date: Sat, 15 Jul 2023 03:43:36 -0300 Subject: [PATCH 04/24] feat: add quarkus-jnosql-keyvalue-couchbase-integration-tests source files Signed-off-by: Maximillian Arruda --- .../keyvalue/couchbase/it/JNoSQLResource.java | 28 +++ .../jnosql/keyvalue/couchbase/it/Person.java | 45 +++++ .../src/main/resources/application.properties | 3 + .../couchbase/it/CouchbaseTestResource.java | 188 ++++++++++++++++++ .../couchbase/it/JNoSQLResourceIT.java | 7 + .../couchbase/it/JNoSQLResourceTest.java | 27 +++ 6 files changed, 298 insertions(+) create mode 100644 keyvalue-parent/couchbase-parent/integration-tests/src/main/java/io/quarkiverse/jnosql/keyvalue/couchbase/it/JNoSQLResource.java create mode 100644 keyvalue-parent/couchbase-parent/integration-tests/src/main/java/io/quarkiverse/jnosql/keyvalue/couchbase/it/Person.java create mode 100644 keyvalue-parent/couchbase-parent/integration-tests/src/main/resources/application.properties create mode 100644 keyvalue-parent/couchbase-parent/integration-tests/src/test/java/io/quarkiverse/jnosql/keyvalue/couchbase/it/CouchbaseTestResource.java create mode 100644 keyvalue-parent/couchbase-parent/integration-tests/src/test/java/io/quarkiverse/jnosql/keyvalue/couchbase/it/JNoSQLResourceIT.java create mode 100644 keyvalue-parent/couchbase-parent/integration-tests/src/test/java/io/quarkiverse/jnosql/keyvalue/couchbase/it/JNoSQLResourceTest.java diff --git a/keyvalue-parent/couchbase-parent/integration-tests/src/main/java/io/quarkiverse/jnosql/keyvalue/couchbase/it/JNoSQLResource.java b/keyvalue-parent/couchbase-parent/integration-tests/src/main/java/io/quarkiverse/jnosql/keyvalue/couchbase/it/JNoSQLResource.java new file mode 100644 index 0000000..9ffd755 --- /dev/null +++ b/keyvalue-parent/couchbase-parent/integration-tests/src/main/java/io/quarkiverse/jnosql/keyvalue/couchbase/it/JNoSQLResource.java @@ -0,0 +1,28 @@ +/* +* 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. + */ +package io.quarkiverse.jnosql.keyvalue.couchbase.it; + +import jakarta.enterprise.context.ApplicationScoped; +import jakarta.nosql.keyvalue.KeyValueTemplate; +import jakarta.ws.rs.Path; + +import io.quarkiverse.jnosql.keyvalue.it.AbstractJNoSQLKeyValueResource; + +@Path("/jnosql") +@ApplicationScoped +public class JNoSQLResource extends AbstractJNoSQLKeyValueResource { +} diff --git a/keyvalue-parent/couchbase-parent/integration-tests/src/main/java/io/quarkiverse/jnosql/keyvalue/couchbase/it/Person.java b/keyvalue-parent/couchbase-parent/integration-tests/src/main/java/io/quarkiverse/jnosql/keyvalue/couchbase/it/Person.java new file mode 100644 index 0000000..6cf1259 --- /dev/null +++ b/keyvalue-parent/couchbase-parent/integration-tests/src/main/java/io/quarkiverse/jnosql/keyvalue/couchbase/it/Person.java @@ -0,0 +1,45 @@ +package io.quarkiverse.jnosql.keyvalue.couchbase.it; + +import java.util.List; + +import jakarta.nosql.Column; +import jakarta.nosql.Entity; +import jakarta.nosql.Id; + +@Entity +public class Person { + + @Id + private String id; + + @Column + private String name; + + @Column + private List phones; + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public List getPhones() { + return phones; + } + + public void setPhones(List phones) { + this.phones = phones; + } + +} diff --git a/keyvalue-parent/couchbase-parent/integration-tests/src/main/resources/application.properties b/keyvalue-parent/couchbase-parent/integration-tests/src/main/resources/application.properties new file mode 100644 index 0000000..175f363 --- /dev/null +++ b/keyvalue-parent/couchbase-parent/integration-tests/src/main/resources/application.properties @@ -0,0 +1,3 @@ +jnosql.keyvalue.database=test +jnosql.couchbase.collections=Person +jnosql.couchbase.index=Person \ No newline at end of file diff --git a/keyvalue-parent/couchbase-parent/integration-tests/src/test/java/io/quarkiverse/jnosql/keyvalue/couchbase/it/CouchbaseTestResource.java b/keyvalue-parent/couchbase-parent/integration-tests/src/test/java/io/quarkiverse/jnosql/keyvalue/couchbase/it/CouchbaseTestResource.java new file mode 100644 index 0000000..5419389 --- /dev/null +++ b/keyvalue-parent/couchbase-parent/integration-tests/src/test/java/io/quarkiverse/jnosql/keyvalue/couchbase/it/CouchbaseTestResource.java @@ -0,0 +1,188 @@ +package io.quarkiverse.jnosql.keyvalue.couchbase.it; + +import java.time.Duration; +import java.util.*; + +import com.couchbase.client.core.error.BucketNotFoundException; +import com.couchbase.client.java.Bucket; +import com.couchbase.client.java.Cluster; +import com.couchbase.client.java.manager.bucket.BucketManager; +import com.couchbase.client.java.manager.bucket.BucketSettings; +import com.couchbase.client.java.manager.collection.CollectionManager; +import com.couchbase.client.java.manager.collection.CollectionSpec; +import com.couchbase.client.java.manager.collection.ScopeSpec; +import com.couchbase.client.java.manager.query.QueryIndex; +import com.couchbase.client.java.manager.query.QueryIndexManager; +import jakarta.data.exceptions.MappingException; + +import org.eclipse.jnosql.communication.Settings; +import org.eclipse.jnosql.databases.couchbase.communication.*; +import org.eclipse.jnosql.mapping.config.MappingConfigurations; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.testcontainers.couchbase.BucketDefinition; +import org.testcontainers.couchbase.CouchbaseContainer; +import org.testcontainers.shaded.org.awaitility.Awaitility; +import org.testcontainers.utility.TestcontainersConfiguration; + +import io.quarkiverse.jnosql.core.runtime.MicroProfileSettings; +import io.quarkus.test.common.QuarkusTestResourceLifecycleManager; + +import static com.couchbase.client.java.manager.query.CreatePrimaryQueryIndexOptions.createPrimaryQueryIndexOptions; +import static com.couchbase.client.java.manager.query.GetAllQueryIndexesOptions.getAllQueryIndexesOptions; + +public class CouchbaseTestResource extends CouchbaseConfiguration implements QuarkusTestResourceLifecycleManager { + + private static final Logger LOGGER = LoggerFactory.getLogger(CouchbaseTestResource.class); + + private static final String CONTAINER_IMAGE = "couchbase/server"; + private static final String COUCHDB_BUCKET_NAME = "quarkus"; + + private CouchbaseContainer container; + + private final Settings settings = new MicroProfileSettings(); + + @Override + public Map start() { + LOGGER.info(TestcontainersConfiguration.getInstance().toString()); + + update(settings); + + var bucketName = settings + .get(MappingConfigurations.KEY_VALUE_DATABASE.get(), String.class) + .orElse(COUCHDB_BUCKET_NAME); + + BucketDefinition bucketDefinition = new BucketDefinition(bucketName); + + container = new CouchbaseContainer(CONTAINER_IMAGE) + .withBucket(bucketDefinition); + + container.start(); + + setHost(container.getConnectionString()); + setUser(container.getUsername()); + setPassword(container.getPassword()); + + var couchbaseSettings = toCouchbaseSettings(); + + LOGGER.info(couchbaseSettings.toString()); + + setupCluster(couchbaseSettings, bucketName); + + Map config = new HashMap<>(Map.of( + MappingConfigurations.KEY_VALUE_DATABASE.get(), bucketName, + CouchbaseConfigurations.HOST.get(), container.getConnectionString(), + CouchbaseConfigurations.USER.get(), container.getUsername(), + CouchbaseConfigurations.PASSWORD.get(), container.getPassword(), + CouchbaseConfigurations.COLLECTIONS.get(), String.join(",", couchbaseSettings.getCollections()))); + + Optional.ofNullable(couchbaseSettings.getIndex()) + .ifPresent(index -> config.put(CouchbaseConfigurations.INDEX.get(), index)); + + return config; + + } + + @Override + protected void update(Settings settings) { + validateCouchbaseSettings(settings); + super.update(settings); + } + + private void validateCouchbaseSettings(Settings settings) { + List.of( + CouchbaseConfigurations.INDEX).forEach( + setting -> settings.get(setting, String.class) + .orElseThrow(() -> new MappingException("Please, inform the database filling up the property " + + setting.get()))); + } + + @Override + public void stop() { + try { + if (container != null) { + container.stop(); + } + } catch (Exception e) { + // ignored + } + } + + public void setupCluster(CouchbaseSettings settings, String database) { + long start = System.currentTimeMillis(); + LOGGER.info("starting the setup with database: " + database); + + try (Cluster cluster = settings.getCluster()) { + + BucketManager buckets = cluster.buckets(); + try { + buckets.getBucket(database); + } catch (BucketNotFoundException exp) { + LOGGER.info("The database/bucket does not exist, creating it: " + database); + buckets.createBucket(BucketSettings.create(database)); + } + Bucket bucket = cluster.bucket(database); + bucket.waitUntilReady(Duration.ofSeconds(5)); + + final CollectionManager manager = bucket.collections(); + List scopes = manager.getAllScopes(); + String finalScope = settings.getScope().orElseGet(() -> bucket.defaultScope().name()); + ScopeSpec spec = scopes.stream().filter(s -> finalScope.equals(s.name())) + .findFirst().orElseThrow(); + + for (String collection : collections) { + if (spec.collections().stream().noneMatch(c -> collection.equals(c.name()))) { + LOGGER.info("creating '" + collection + "' in '" + finalScope + "' scope"); + await(() -> manager.createCollection(CollectionSpec.create(collection, finalScope))); + } + } + if (index != null) { + QueryIndexManager queryIndexManager = cluster.queryIndexes(); + List indexes = queryIndexManager.getAllIndexes(database, getAllQueryIndexesOptions() + .scopeName(finalScope).collectionName(index)); + if (indexes.isEmpty()) { + LOGGER.info("Index does not exist, creating primary key with scope " + + scope + " collection " + index + " at database " + database); + final var _queryIndexManager = queryIndexManager; + await(() -> _queryIndexManager.createPrimaryIndex(database, createPrimaryQueryIndexOptions() + .scopeName(finalScope).collectionName(index))); + } + + for (String collection : collections) { + queryIndexManager = cluster.queryIndexes(); + indexes = queryIndexManager.getAllIndexes(database, getAllQueryIndexesOptions() + .scopeName(finalScope).collectionName(collection)); + if (indexes.isEmpty()) { + LOGGER.info("Index for " + collection + " collection does not exist, creating primary key with scope " + + scope + " collection " + collection + " at database " + database); + final var _queryIndexManager = queryIndexManager; + await(() -> _queryIndexManager + .createPrimaryIndex(database, createPrimaryQueryIndexOptions() + .scopeName(finalScope).collectionName(collection))); + } + } + + } + + long end = System.currentTimeMillis() - start; + LOGGER.info("Finished the setup with database: " + database + " end with millis " + + end); + } + } + + private void await(Runnable runnable) { + Awaitility. + given() + .ignoreExceptions() + .await().until(() -> { + try { + runnable.run(); + } catch (RuntimeException ex) { + LOGGER.warn("occurred an issue, but it'll be retried: " + ex.getMessage(), ex); + throw ex; + } + return true; + }); + } + +} diff --git a/keyvalue-parent/couchbase-parent/integration-tests/src/test/java/io/quarkiverse/jnosql/keyvalue/couchbase/it/JNoSQLResourceIT.java b/keyvalue-parent/couchbase-parent/integration-tests/src/test/java/io/quarkiverse/jnosql/keyvalue/couchbase/it/JNoSQLResourceIT.java new file mode 100644 index 0000000..1856a3f --- /dev/null +++ b/keyvalue-parent/couchbase-parent/integration-tests/src/test/java/io/quarkiverse/jnosql/keyvalue/couchbase/it/JNoSQLResourceIT.java @@ -0,0 +1,7 @@ +package io.quarkiverse.jnosql.keyvalue.couchbase.it; + +import io.quarkus.test.junit.QuarkusIntegrationTest; + +@QuarkusIntegrationTest +public class JNoSQLResourceIT extends JNoSQLResourceTest { +} diff --git a/keyvalue-parent/couchbase-parent/integration-tests/src/test/java/io/quarkiverse/jnosql/keyvalue/couchbase/it/JNoSQLResourceTest.java b/keyvalue-parent/couchbase-parent/integration-tests/src/test/java/io/quarkiverse/jnosql/keyvalue/couchbase/it/JNoSQLResourceTest.java new file mode 100644 index 0000000..c9a93f6 --- /dev/null +++ b/keyvalue-parent/couchbase-parent/integration-tests/src/test/java/io/quarkiverse/jnosql/keyvalue/couchbase/it/JNoSQLResourceTest.java @@ -0,0 +1,27 @@ +package io.quarkiverse.jnosql.keyvalue.couchbase.it; + +import static io.restassured.RestAssured.given; +import static org.hamcrest.Matchers.empty; +import static org.hamcrest.Matchers.is; +import static org.hamcrest.Matchers.not; + +import org.junit.jupiter.api.Test; + +import io.quarkus.test.common.QuarkusTestResource; +import io.quarkus.test.common.http.TestHTTPEndpoint; +import io.quarkus.test.junit.QuarkusTest; + +@QuarkusTest +@QuarkusTestResource(CouchbaseTestResource.class) +@TestHTTPEndpoint(JNoSQLResource.class) +public class JNoSQLResourceTest { + + @Test + public void testHelloEndpoint() { + given() + .when().get() + .then() + .statusCode(200) + .body(is(not(empty()))); + } +} From 55efccbdca500bad9b7421d6e8ca58fddf1b9d3b Mon Sep 17 00:00:00 2001 From: Maximillian Arruda Date: Sat, 15 Jul 2023 03:44:21 -0300 Subject: [PATCH 05/24] docs: add documentation for the quarkus-jnosql-keyvalue-couchbase extension Signed-off-by: Maximillian Arruda --- README.md | 92 ++++++++++++++++++++++++++++++++++++++++--------------- 1 file changed, 67 insertions(+), 25 deletions(-) diff --git a/README.md b/README.md index 0f17937..11fd417 100644 --- a/README.md +++ b/README.md @@ -1,16 +1,17 @@ # Quarkus JNoSQL + [![All Contributors](https://img.shields.io/badge/all_contributors-1-orange.svg?style=flat-square)](#contributors-) [![Version](https://img.shields.io/maven-central/v/io.quarkiverse.jnosql/quarkus-jnosql-core?logo=apache-maven&style=flat-square)](https://search.maven.org/artifact/io.quarkiverse.jnosql/quarkus-jnosql-core) -The Quarkus JNoSql Extension adds support for +The Quarkus JNoSql Extension adds support for [JNoSQL](http://www.jnosql.org/), an implementation of [Jakarta NoSQL](https://jakarta.ee/specifications/nosql/). :information_source: **Recommended Quarkus version: `3.1.0.Final` or higher** -### Usage +### Jakarta NoSQL Entity Mapping Sample ```java import jakarta.nosql.Column; @@ -19,10 +20,10 @@ import jakarta.nosql.Id; @Entity public class TestEntity { - + @Id private String id; - + @Column private String testField; } @@ -30,13 +31,13 @@ public class TestEntity { ## KeyValue -### Configuration +### Required Configuration The JNoSql KeyValue Quarkus extension supports the following configuration: - | Name | Type | Default | - |---|---|---| - | `jnosql.keyvalue.database`
The database's name. | string | | +| Name | Description | Type | Default | +|----------------------------|---------------------|--------|---------| +| `jnosql.keyvalue.database` | The database's name | string | | ### Usage @@ -44,9 +45,9 @@ The JNoSql KeyValue Quarkus extension supports the following configuration: @Inject private KeyValueTemplate template; -public void insert(TestEntity entity) { - template.insert(entity); -} +public void insert(TestEntity entity){ + template.insert(entity); + } ``` ### ArangoDB @@ -54,32 +55,38 @@ public void insert(TestEntity entity) { Add the dependency to the target project: ```xml + io.quarkiverse.jnosql quarkus-jnosql-keyvalue-arangodb ``` -Please refer to the [AranboDB JNoSQL driver](https://github.com/eclipse/jnosql-databases#arangodb) for specific configuration. +Please refer to the [AranboDB JNoSQL driver](https://github.com/eclipse/jnosql-databases#arangodb) for specific +configuration. ### DynamoDB Add the dependency to the target project: ```xml + io.quarkiverse.jnosql quarkus-jnosql-keyvalue-dynamodb ``` -Please refer to the [DynamoDB Quarkiverse extension](https://quarkiverse.github.io/quarkiverse-docs/quarkus-amazon-services/dev/amazon-dynamodb.html) for specific configuration. +Please refer to +the [DynamoDB Quarkiverse extension](https://quarkiverse.github.io/quarkiverse-docs/quarkus-amazon-services/dev/amazon-dynamodb.html) +for specific configuration. ### Redis Add the dependency to the target project: ```xml + io.quarkiverse.jnosql quarkus-jnosql-keyvalue-redis @@ -88,15 +95,40 @@ Add the dependency to the target project: Please refer to the [Redis Quarkus extension](https://quarkus.io/guides/redis-reference) for specific configuration. +### Couchbase + +Add the dependency to the target project: + +```xml + + + io.quarkiverse.jnosql + quarkus-jnosql-keyvalue-couchbase + +``` + +#### Required Configuration + +This JNoSql KeyValue Quarkus extension for Couchbase supports the following configuration: + +| Name | Description | Type | Default | +|-----------------------------|-----------------------|--------|---------| +| `jnosql.couchbase.host` | the connection string | string | | +| `jnosql.couchbase.user` | The username [^0] | string | | +| `jnosql.couchbase.password` | The password [^0] | string | | +| `jnosql.couchbase.password` | The password [^0] | string | | + +Please, take a look at the [Eclipse JNoSQL Database API for Couchbase documentation](https://github.com/eclipse/jnosql-databases#configuration-2) to learn more about all supported properties. + ## Document ### Configuration The JNoSql Document Quarkus extension supports the following configuration: - | Name | Type | Default | - |---|---|---| - | `jnosql.document.database`
The database's name. | string | | +| Name | Type | Default | + |----------------------------------------------------|--------|---------| +| `jnosql.document.database`
The database's name. | string | | ### Usage @@ -104,9 +136,9 @@ The JNoSql Document Quarkus extension supports the following configuration: @Inject private DocumentTemplate template; -public void insert(TestDocumentEntity entity) { - template.insert(entity); -} +public void insert(TestDocumentEntity entity){ + template.insert(entity); + } ``` ### ArangoDB @@ -114,32 +146,38 @@ public void insert(TestDocumentEntity entity) { Add the dependency to the target project: ```xml + io.quarkiverse.jnosql quarkus-jnosql-document-arangodb ``` -Please refer to the [AranboDB JNoSQL driver](https://github.com/eclipse/jnosql-databases#arangodb) for specific configuration. +Please refer to the [AranboDB JNoSQL driver](https://github.com/eclipse/jnosql-databases#arangodb) for specific +configuration. ### Elasticsearch Add the dependency to the target project: ```xml + io.quarkiverse.jnosql quarkus-jnosql-document-elasticsearch ``` -Please refer to the [Elasticsearch Quarkus extension](https://quarkus.io/guides/elasticsearch#using-the-elasticsearch-java-client) for specific configuration. +Please refer to +the [Elasticsearch Quarkus extension](https://quarkus.io/guides/elasticsearch#using-the-elasticsearch-java-client) for +specific configuration. ### MongoDB Add the dependency to the target project: ```xml + io.quarkiverse.jnosql quarkus-jnosql-document-mongodb @@ -154,15 +192,16 @@ Please refer to the [MongoDB Quarkus extension](https://quarkus.io/guides/mongod The JNoSql Column Quarkus extension supports the following configuration: -| Name | Type | Default | - |--------------------------------------------------|---|---| -| `jnosql.column.database`
The database's name. | string | | +| Name | Type | Default | + |--------------------------------------------------|--------|---------| +| `jnosql.column.database`
The database's name. | string | | ### Cassandra Add the dependency to the target project: ```xml + io.quarkiverse.jnosql quarkus-jnosql-column-cassandra @@ -191,4 +230,7 @@ Thanks goes to these wonderful people ([emoji key](https://allcontributors.org/d -This project follows the [all-contributors](https://github.com/all-contributors/all-contributors) specification. Contributions of any kind welcome! +This project follows the [all-contributors](https://github.com/all-contributors/all-contributors) specification. +Contributions of any kind welcome! + +[^0]: Pay attention to the way the sensitive variables are stored in order to avoid data leakage and security flaws. \ No newline at end of file From 4270a906a70e6b7cbcdcc5a29aeaa5327332835a Mon Sep 17 00:00:00 2001 From: Maximillian Arruda Date: Sat, 15 Jul 2023 04:00:01 -0300 Subject: [PATCH 06/24] refactor: fix file format Signed-off-by: Maximillian Arruda --- .../QuarkusCouchbaseKeyValueConfiguration.java | 17 +++++++---------- 1 file changed, 7 insertions(+), 10 deletions(-) diff --git a/keyvalue-parent/couchbase-parent/runtime/src/main/java/org/eclipse/jnosql/databases/couchbase/communication/QuarkusCouchbaseKeyValueConfiguration.java b/keyvalue-parent/couchbase-parent/runtime/src/main/java/org/eclipse/jnosql/databases/couchbase/communication/QuarkusCouchbaseKeyValueConfiguration.java index 1e875c1..f4bdec5 100644 --- a/keyvalue-parent/couchbase-parent/runtime/src/main/java/org/eclipse/jnosql/databases/couchbase/communication/QuarkusCouchbaseKeyValueConfiguration.java +++ b/keyvalue-parent/couchbase-parent/runtime/src/main/java/org/eclipse/jnosql/databases/couchbase/communication/QuarkusCouchbaseKeyValueConfiguration.java @@ -1,14 +1,11 @@ package org.eclipse.jnosql.databases.couchbase.communication; -import java.util.List; - import jakarta.data.exceptions.MappingException; import jakarta.inject.Singleton; - import org.eclipse.jnosql.communication.Settings; import org.eclipse.jnosql.communication.keyvalue.KeyValueConfiguration; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; + +import java.util.List; @Singleton public class QuarkusCouchbaseKeyValueConfiguration implements KeyValueConfiguration { @@ -20,11 +17,11 @@ public CouchbaseBucketManagerFactory apply(Settings settings) throws NullPointer } protected void validateSettings(Settings settings) { - List.of( - CouchbaseConfigurations.HOST, + List.of(CouchbaseConfigurations.HOST, CouchbaseConfigurations.USER, - CouchbaseConfigurations.PASSWORD - ).forEach(setting -> settings.get(setting, String.class).orElseThrow( - () -> new MappingException("Please, inform the database filling up the property " + setting.get()))); + CouchbaseConfigurations.PASSWORD).forEach( + setting -> settings.get(setting, String.class).orElseThrow( + () -> new MappingException( + "Please, inform the database filling up the property " + setting.get()))); } } From 7399460010a2162720bc2fb8e63d57a9aa271e3e Mon Sep 17 00:00:00 2001 From: Maximillian Arruda Date: Sat, 15 Jul 2023 04:19:47 -0300 Subject: [PATCH 07/24] refactor: fix package import order and code format fixes Signed-off-by: Maximillian Arruda --- .../couchbase/it/CouchbaseTestResource.java | 36 +++++++++---------- ...QuarkusCouchbaseKeyValueConfiguration.java | 5 +-- 2 files changed, 21 insertions(+), 20 deletions(-) diff --git a/keyvalue-parent/couchbase-parent/integration-tests/src/test/java/io/quarkiverse/jnosql/keyvalue/couchbase/it/CouchbaseTestResource.java b/keyvalue-parent/couchbase-parent/integration-tests/src/test/java/io/quarkiverse/jnosql/keyvalue/couchbase/it/CouchbaseTestResource.java index 5419389..f184376 100644 --- a/keyvalue-parent/couchbase-parent/integration-tests/src/test/java/io/quarkiverse/jnosql/keyvalue/couchbase/it/CouchbaseTestResource.java +++ b/keyvalue-parent/couchbase-parent/integration-tests/src/test/java/io/quarkiverse/jnosql/keyvalue/couchbase/it/CouchbaseTestResource.java @@ -1,18 +1,11 @@ package io.quarkiverse.jnosql.keyvalue.couchbase.it; +import static com.couchbase.client.java.manager.query.CreatePrimaryQueryIndexOptions.createPrimaryQueryIndexOptions; +import static com.couchbase.client.java.manager.query.GetAllQueryIndexesOptions.getAllQueryIndexesOptions; + import java.time.Duration; import java.util.*; -import com.couchbase.client.core.error.BucketNotFoundException; -import com.couchbase.client.java.Bucket; -import com.couchbase.client.java.Cluster; -import com.couchbase.client.java.manager.bucket.BucketManager; -import com.couchbase.client.java.manager.bucket.BucketSettings; -import com.couchbase.client.java.manager.collection.CollectionManager; -import com.couchbase.client.java.manager.collection.CollectionSpec; -import com.couchbase.client.java.manager.collection.ScopeSpec; -import com.couchbase.client.java.manager.query.QueryIndex; -import com.couchbase.client.java.manager.query.QueryIndexManager; import jakarta.data.exceptions.MappingException; import org.eclipse.jnosql.communication.Settings; @@ -25,12 +18,20 @@ import org.testcontainers.shaded.org.awaitility.Awaitility; import org.testcontainers.utility.TestcontainersConfiguration; +import com.couchbase.client.core.error.BucketNotFoundException; +import com.couchbase.client.java.Bucket; +import com.couchbase.client.java.Cluster; +import com.couchbase.client.java.manager.bucket.BucketManager; +import com.couchbase.client.java.manager.bucket.BucketSettings; +import com.couchbase.client.java.manager.collection.CollectionManager; +import com.couchbase.client.java.manager.collection.CollectionSpec; +import com.couchbase.client.java.manager.collection.ScopeSpec; +import com.couchbase.client.java.manager.query.QueryIndex; +import com.couchbase.client.java.manager.query.QueryIndexManager; + import io.quarkiverse.jnosql.core.runtime.MicroProfileSettings; import io.quarkus.test.common.QuarkusTestResourceLifecycleManager; -import static com.couchbase.client.java.manager.query.CreatePrimaryQueryIndexOptions.createPrimaryQueryIndexOptions; -import static com.couchbase.client.java.manager.query.GetAllQueryIndexesOptions.getAllQueryIndexesOptions; - public class CouchbaseTestResource extends CouchbaseConfiguration implements QuarkusTestResourceLifecycleManager { private static final Logger LOGGER = LoggerFactory.getLogger(CouchbaseTestResource.class); @@ -92,9 +93,9 @@ protected void update(Settings settings) { private void validateCouchbaseSettings(Settings settings) { List.of( CouchbaseConfigurations.INDEX).forEach( - setting -> settings.get(setting, String.class) - .orElseThrow(() -> new MappingException("Please, inform the database filling up the property " - + setting.get()))); + setting -> settings.get(setting, String.class) + .orElseThrow(() -> new MappingException("Please, inform the database filling up the property " + + setting.get()))); } @Override @@ -171,8 +172,7 @@ public void setupCluster(CouchbaseSettings settings, String database) { } private void await(Runnable runnable) { - Awaitility. - given() + Awaitility.given() .ignoreExceptions() .await().until(() -> { try { diff --git a/keyvalue-parent/couchbase-parent/runtime/src/main/java/org/eclipse/jnosql/databases/couchbase/communication/QuarkusCouchbaseKeyValueConfiguration.java b/keyvalue-parent/couchbase-parent/runtime/src/main/java/org/eclipse/jnosql/databases/couchbase/communication/QuarkusCouchbaseKeyValueConfiguration.java index f4bdec5..cfac068 100644 --- a/keyvalue-parent/couchbase-parent/runtime/src/main/java/org/eclipse/jnosql/databases/couchbase/communication/QuarkusCouchbaseKeyValueConfiguration.java +++ b/keyvalue-parent/couchbase-parent/runtime/src/main/java/org/eclipse/jnosql/databases/couchbase/communication/QuarkusCouchbaseKeyValueConfiguration.java @@ -1,12 +1,13 @@ package org.eclipse.jnosql.databases.couchbase.communication; +import java.util.List; + import jakarta.data.exceptions.MappingException; import jakarta.inject.Singleton; + import org.eclipse.jnosql.communication.Settings; import org.eclipse.jnosql.communication.keyvalue.KeyValueConfiguration; -import java.util.List; - @Singleton public class QuarkusCouchbaseKeyValueConfiguration implements KeyValueConfiguration { From 070b399c95be97b54d0cabfaa89ec930f334c057 Mon Sep 17 00:00:00 2001 From: Maximillian Arruda Date: Sat, 15 Jul 2023 09:04:47 -0300 Subject: [PATCH 08/24] docs: change README.md Signed-off-by: Maximillian Arruda --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 11fd417..e85682e 100644 --- a/README.md +++ b/README.md @@ -100,7 +100,6 @@ Please refer to the [Redis Quarkus extension](https://quarkus.io/guides/redis-re Add the dependency to the target project: ```xml - io.quarkiverse.jnosql quarkus-jnosql-keyvalue-couchbase @@ -118,6 +117,8 @@ This JNoSql KeyValue Quarkus extension for Couchbase supports the following conf | `jnosql.couchbase.password` | The password [^0] | string | | | `jnosql.couchbase.password` | The password [^0] | string | | +[^0]: Pay attention to the way the sensitive variables are stored in order to avoid data leakage and security flaws. + Please, take a look at the [Eclipse JNoSQL Database API for Couchbase documentation](https://github.com/eclipse/jnosql-databases#configuration-2) to learn more about all supported properties. ## Document @@ -233,4 +234,3 @@ Thanks goes to these wonderful people ([emoji key](https://allcontributors.org/d This project follows the [all-contributors](https://github.com/all-contributors/all-contributors) specification. Contributions of any kind welcome! -[^0]: Pay attention to the way the sensitive variables are stored in order to avoid data leakage and security flaws. \ No newline at end of file From 05df7b68929baabca3103394d539401ac4677919 Mon Sep 17 00:00:00 2001 From: Maximillian Arruda Date: Tue, 18 Jul 2023 02:07:22 -0300 Subject: [PATCH 09/24] refactor: add warn message during native-compilation Signed-off-by: Maximillian Arruda --- .../couchbase/deployment/Processor.java | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/keyvalue-parent/couchbase-parent/deployment/src/main/java/io/quarkiverse/jnosql/keyvalue/couchbase/deployment/Processor.java b/keyvalue-parent/couchbase-parent/deployment/src/main/java/io/quarkiverse/jnosql/keyvalue/couchbase/deployment/Processor.java index 2d93a3c..126b104 100644 --- a/keyvalue-parent/couchbase-parent/deployment/src/main/java/io/quarkiverse/jnosql/keyvalue/couchbase/deployment/Processor.java +++ b/keyvalue-parent/couchbase-parent/deployment/src/main/java/io/quarkiverse/jnosql/keyvalue/couchbase/deployment/Processor.java @@ -1,14 +1,21 @@ package io.quarkiverse.jnosql.keyvalue.couchbase.deployment; +import io.quarkus.deployment.annotations.ExecutionTime; +import io.quarkus.deployment.annotations.Record; +import io.quarkus.deployment.pkg.steps.NativeBuild; +import org.apache.camel.quarkus.core.JvmOnlyRecorder; import org.eclipse.jnosql.databases.couchbase.communication.QuarkusCouchbaseKeyValueConfiguration; import io.quarkus.arc.deployment.AdditionalBeanBuildItem; import io.quarkus.deployment.annotations.BuildProducer; import io.quarkus.deployment.annotations.BuildStep; import io.quarkus.deployment.builditem.FeatureBuildItem; +import org.jboss.logging.Logger; class Processor { + private static final Logger LOG = Logger.getLogger(Processor.class); + private static final String FEATURE = "jnosql-keyvalue-couchbase"; @BuildStep @@ -16,6 +23,16 @@ FeatureBuildItem feature() { return new FeatureBuildItem(FEATURE); } + /** + * Remove this once this extension starts supporting the native mode. + */ + @BuildStep(onlyIf = NativeBuild.class) + @Record(value = ExecutionTime.RUNTIME_INIT) + void warnJvmInNative(JvmOnlyRecorder recorder) { + JvmOnlyRecorder.warnJvmInNative(LOG, FEATURE); // warn at build time + recorder.warnJvmInNative(FEATURE); // warn at runtime + } + @BuildStep void build(BuildProducer additionalBeanProducer) { additionalBeanProducer.produce(AdditionalBeanBuildItem.unremovableOf(QuarkusCouchbaseKeyValueConfiguration.class)); From 4ad560129f369f190e25cc691c0e6017ade74cc7 Mon Sep 17 00:00:00 2001 From: Maximillian Arruda Date: Tue, 18 Jul 2023 02:57:16 -0300 Subject: [PATCH 10/24] tests: remove unnecessary IT class by now Signed-off-by: Maximillian Arruda --- .../jnosql/keyvalue/couchbase/it/JNoSQLResourceIT.java | 7 ------- 1 file changed, 7 deletions(-) delete mode 100644 keyvalue-parent/couchbase-parent/integration-tests/src/test/java/io/quarkiverse/jnosql/keyvalue/couchbase/it/JNoSQLResourceIT.java diff --git a/keyvalue-parent/couchbase-parent/integration-tests/src/test/java/io/quarkiverse/jnosql/keyvalue/couchbase/it/JNoSQLResourceIT.java b/keyvalue-parent/couchbase-parent/integration-tests/src/test/java/io/quarkiverse/jnosql/keyvalue/couchbase/it/JNoSQLResourceIT.java deleted file mode 100644 index 1856a3f..0000000 --- a/keyvalue-parent/couchbase-parent/integration-tests/src/test/java/io/quarkiverse/jnosql/keyvalue/couchbase/it/JNoSQLResourceIT.java +++ /dev/null @@ -1,7 +0,0 @@ -package io.quarkiverse.jnosql.keyvalue.couchbase.it; - -import io.quarkus.test.junit.QuarkusIntegrationTest; - -@QuarkusIntegrationTest -public class JNoSQLResourceIT extends JNoSQLResourceTest { -} From 16ba7968dd3cbecd5665fe930b1179d6af759222 Mon Sep 17 00:00:00 2001 From: Maximillian Arruda Date: Tue, 18 Jul 2023 02:58:05 -0300 Subject: [PATCH 11/24] build: add camel-quarkus-bom Signed-off-by: Maximillian Arruda --- pom.xml | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/pom.xml b/pom.xml index 390e0b7..c271e66 100644 --- a/pom.xml +++ b/pom.xml @@ -30,6 +30,7 @@ UTF-8 UTF-8 3.2.0.Final + 3.0.0-M2 1.2.0 4.0.0 1.0.0 @@ -43,6 +44,13 @@ pom import + + org.apache.camel.quarkus + camel-quarkus-bom + ${camel-quarkus-bom.version} + pom + import + org.eclipse.jnosql.mapping jnosql-mapping-core From 7a03d0cb173a4eb12329b1e25c8e7b10b2260c3b Mon Sep 17 00:00:00 2001 From: Maximillian Arruda Date: Tue, 18 Jul 2023 03:02:31 -0300 Subject: [PATCH 12/24] build: add camel-quarkus-core-deployment Signed-off-by: Maximillian Arruda --- keyvalue-parent/couchbase-parent/deployment/pom.xml | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/keyvalue-parent/couchbase-parent/deployment/pom.xml b/keyvalue-parent/couchbase-parent/deployment/pom.xml index 9ea1001..4d64bb7 100644 --- a/keyvalue-parent/couchbase-parent/deployment/pom.xml +++ b/keyvalue-parent/couchbase-parent/deployment/pom.xml @@ -9,6 +9,10 @@ quarkus-jnosql-keyvalue-couchbase-deployment Quarkus JNoSQL - KeyValue - Couchbase - Deployment + + org.apache.camel.quarkus + camel-quarkus-core-deployment + io.quarkiverse.jnosql quarkus-jnosql-keyvalue-deployment From 9989381868687b4738b7d7c98ccd19892b4766c8 Mon Sep 17 00:00:00 2001 From: Maximillian Arruda Date: Tue, 18 Jul 2023 03:07:56 -0300 Subject: [PATCH 13/24] build: add camel-quarkus-core Signed-off-by: Maximillian Arruda --- keyvalue-parent/couchbase-parent/runtime/pom.xml | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/keyvalue-parent/couchbase-parent/runtime/pom.xml b/keyvalue-parent/couchbase-parent/runtime/pom.xml index eb087dc..29a2eeb 100644 --- a/keyvalue-parent/couchbase-parent/runtime/pom.xml +++ b/keyvalue-parent/couchbase-parent/runtime/pom.xml @@ -14,6 +14,10 @@ quarkus-jnosql-keyvalue ${project.version} + + org.apache.camel.quarkus + camel-quarkus-core + org.eclipse.jnosql.databases jnosql-couchbase From 2d051949cabe158f368dc423e15438c399228239 Mon Sep 17 00:00:00 2001 From: Maximillian Arruda Date: Tue, 18 Jul 2023 03:08:52 -0300 Subject: [PATCH 14/24] chore: add warn when native-compilation happens Signed-off-by: Maximillian Arruda --- .../jnosql/keyvalue/couchbase/deployment/Processor.java | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/keyvalue-parent/couchbase-parent/deployment/src/main/java/io/quarkiverse/jnosql/keyvalue/couchbase/deployment/Processor.java b/keyvalue-parent/couchbase-parent/deployment/src/main/java/io/quarkiverse/jnosql/keyvalue/couchbase/deployment/Processor.java index 126b104..c1bef86 100644 --- a/keyvalue-parent/couchbase-parent/deployment/src/main/java/io/quarkiverse/jnosql/keyvalue/couchbase/deployment/Processor.java +++ b/keyvalue-parent/couchbase-parent/deployment/src/main/java/io/quarkiverse/jnosql/keyvalue/couchbase/deployment/Processor.java @@ -1,16 +1,16 @@ package io.quarkiverse.jnosql.keyvalue.couchbase.deployment; -import io.quarkus.deployment.annotations.ExecutionTime; -import io.quarkus.deployment.annotations.Record; -import io.quarkus.deployment.pkg.steps.NativeBuild; import org.apache.camel.quarkus.core.JvmOnlyRecorder; import org.eclipse.jnosql.databases.couchbase.communication.QuarkusCouchbaseKeyValueConfiguration; +import org.jboss.logging.Logger; import io.quarkus.arc.deployment.AdditionalBeanBuildItem; import io.quarkus.deployment.annotations.BuildProducer; import io.quarkus.deployment.annotations.BuildStep; +import io.quarkus.deployment.annotations.ExecutionTime; +import io.quarkus.deployment.annotations.Record; import io.quarkus.deployment.builditem.FeatureBuildItem; -import org.jboss.logging.Logger; +import io.quarkus.deployment.pkg.steps.NativeBuild; class Processor { From 43520fdb5795193c5d1b72ee994d31ba8f55632a Mon Sep 17 00:00:00 2001 From: Maximillian Arruda Date: Tue, 18 Jul 2023 13:17:14 -0300 Subject: [PATCH 15/24] build: fix pom managed dependencies declaration Signed-off-by: Maximillian Arruda --- pom.xml | 1 + 1 file changed, 1 insertion(+) diff --git a/pom.xml b/pom.xml index 10b12ba..3dc0762 100644 --- a/pom.xml +++ b/pom.xml @@ -123,6 +123,7 @@ jnosql-couchbase ${jnosql.version} + From a9870225e5b0090078510c5dd21c75c8800c2713 Mon Sep 17 00:00:00 2001 From: Maximillian Arruda Date: Tue, 18 Jul 2023 22:54:43 -0300 Subject: [PATCH 16/24] chore: added JvmOnlyRecorder to warn extension doesn't support native-compilation Signed-off-by: Maximillian Arruda --- .../core/deployment/JvmOnlyRecorder.java | 20 +++++++++++++++++++ .../couchbase/deployment/Processor.java | 7 +++---- 2 files changed, 23 insertions(+), 4 deletions(-) create mode 100644 core-parent/deployment/src/main/java/io/quarkiverse/jnosql/core/deployment/JvmOnlyRecorder.java diff --git a/core-parent/deployment/src/main/java/io/quarkiverse/jnosql/core/deployment/JvmOnlyRecorder.java b/core-parent/deployment/src/main/java/io/quarkiverse/jnosql/core/deployment/JvmOnlyRecorder.java new file mode 100644 index 0000000..2805fd1 --- /dev/null +++ b/core-parent/deployment/src/main/java/io/quarkiverse/jnosql/core/deployment/JvmOnlyRecorder.java @@ -0,0 +1,20 @@ +package io.quarkiverse.jnosql.core.deployment; + +import io.quarkus.runtime.annotations.Recorder; +import org.jboss.logging.Logger; + +@Recorder +public class JvmOnlyRecorder { + private static final Logger LOG = Logger.getLogger(JvmOnlyRecorder.class); + + public JvmOnlyRecorder() { + } + + public static void warnJvmInNative(Logger log, String feature) { + log.warnf("The %s extension was not tested in native mode. You may want to report about the success or failure running it in native mode on https://github.com/apache/camel-quarkus/issues?q=is%%3Aissue+%s", feature, feature.replace('-', '+')); + } + + public void warnJvmInNative(String feature) { + warnJvmInNative(LOG, feature); + } +} diff --git a/keyvalue-parent/couchbase-parent/deployment/src/main/java/io/quarkiverse/jnosql/keyvalue/couchbase/deployment/Processor.java b/keyvalue-parent/couchbase-parent/deployment/src/main/java/io/quarkiverse/jnosql/keyvalue/couchbase/deployment/Processor.java index c1bef86..89b7b8f 100644 --- a/keyvalue-parent/couchbase-parent/deployment/src/main/java/io/quarkiverse/jnosql/keyvalue/couchbase/deployment/Processor.java +++ b/keyvalue-parent/couchbase-parent/deployment/src/main/java/io/quarkiverse/jnosql/keyvalue/couchbase/deployment/Processor.java @@ -1,9 +1,6 @@ package io.quarkiverse.jnosql.keyvalue.couchbase.deployment; -import org.apache.camel.quarkus.core.JvmOnlyRecorder; -import org.eclipse.jnosql.databases.couchbase.communication.QuarkusCouchbaseKeyValueConfiguration; -import org.jboss.logging.Logger; - +import io.quarkiverse.jnosql.core.deployment.JvmOnlyRecorder; import io.quarkus.arc.deployment.AdditionalBeanBuildItem; import io.quarkus.deployment.annotations.BuildProducer; import io.quarkus.deployment.annotations.BuildStep; @@ -11,6 +8,8 @@ import io.quarkus.deployment.annotations.Record; import io.quarkus.deployment.builditem.FeatureBuildItem; import io.quarkus.deployment.pkg.steps.NativeBuild; +import org.eclipse.jnosql.databases.couchbase.communication.QuarkusCouchbaseKeyValueConfiguration; +import org.jboss.logging.Logger; class Processor { From a815ca2643f6671d33a288427297e6f9404fdb21 Mon Sep 17 00:00:00 2001 From: Maximillian Arruda Date: Tue, 18 Jul 2023 22:55:14 -0300 Subject: [PATCH 17/24] build: remove unnecessary dependencies Signed-off-by: Maximillian Arruda --- keyvalue-parent/couchbase-parent/deployment/pom.xml | 5 +++-- keyvalue-parent/couchbase-parent/runtime/pom.xml | 4 ---- 2 files changed, 3 insertions(+), 6 deletions(-) diff --git a/keyvalue-parent/couchbase-parent/deployment/pom.xml b/keyvalue-parent/couchbase-parent/deployment/pom.xml index 4d64bb7..80c07e5 100644 --- a/keyvalue-parent/couchbase-parent/deployment/pom.xml +++ b/keyvalue-parent/couchbase-parent/deployment/pom.xml @@ -10,8 +10,9 @@ Quarkus JNoSQL - KeyValue - Couchbase - Deployment - org.apache.camel.quarkus - camel-quarkus-core-deployment + io.quarkiverse.jnosql + quarkus-jnosql-core-deployment + ${project.version} io.quarkiverse.jnosql diff --git a/keyvalue-parent/couchbase-parent/runtime/pom.xml b/keyvalue-parent/couchbase-parent/runtime/pom.xml index 29a2eeb..eb087dc 100644 --- a/keyvalue-parent/couchbase-parent/runtime/pom.xml +++ b/keyvalue-parent/couchbase-parent/runtime/pom.xml @@ -14,10 +14,6 @@ quarkus-jnosql-keyvalue ${project.version} - - org.apache.camel.quarkus - camel-quarkus-core - org.eclipse.jnosql.databases jnosql-couchbase From 4db76ed713df1fdaadbce12c1fcb7f19143fed6b Mon Sep 17 00:00:00 2001 From: Maximillian Arruda Date: Tue, 18 Jul 2023 22:56:35 -0300 Subject: [PATCH 18/24] ci: added CI step to ignore modules that do not support native-compilation Signed-off-by: Maximillian Arruda --- .github/workflows/build.yml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 52172ec..c80f8fb 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -47,5 +47,8 @@ jobs: - name: Build with Maven run: mvn -B clean verify -Dno-format + - name: Ignoring modules that do not support native-compilation + run: sed -i -e '/couchbase\-parent<\/module>/d' keyvalue-parent/pom.xml + - name: Build with Maven (Native) run: mvn -B verify -Dnative -Dquarkus.native.container-build -Dnative.surefire.skip From 2e7ef5819b42d76d4d19db8b737530dee3db1dd7 Mon Sep 17 00:00:00 2001 From: Maximillian Arruda Date: Tue, 18 Jul 2023 23:05:27 -0300 Subject: [PATCH 19/24] chore: change warn message Signed-off-by: Maximillian Arruda --- .../quarkiverse/jnosql/core/deployment/JvmOnlyRecorder.java | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/core-parent/deployment/src/main/java/io/quarkiverse/jnosql/core/deployment/JvmOnlyRecorder.java b/core-parent/deployment/src/main/java/io/quarkiverse/jnosql/core/deployment/JvmOnlyRecorder.java index 2805fd1..f881a31 100644 --- a/core-parent/deployment/src/main/java/io/quarkiverse/jnosql/core/deployment/JvmOnlyRecorder.java +++ b/core-parent/deployment/src/main/java/io/quarkiverse/jnosql/core/deployment/JvmOnlyRecorder.java @@ -11,7 +11,9 @@ public JvmOnlyRecorder() { } public static void warnJvmInNative(Logger log, String feature) { - log.warnf("The %s extension was not tested in native mode. You may want to report about the success or failure running it in native mode on https://github.com/apache/camel-quarkus/issues?q=is%%3Aissue+%s", feature, feature.replace('-', '+')); + log.warnf( + "The %s extension was not tested in native mode. You may want to report about the success or failure running it in native mode on https://github.com/quarkiverse/quarkus-jnosql/issues?q=is:issue+%s", + feature, feature.replace('-', '+')); } public void warnJvmInNative(String feature) { From 65ed56bad1e4ce9337ac27bd188911ddedc08277 Mon Sep 17 00:00:00 2001 From: Maximillian Arruda Date: Tue, 18 Jul 2023 23:09:58 -0300 Subject: [PATCH 20/24] chore: fix import order Signed-off-by: Maximillian Arruda --- .../io/quarkiverse/jnosql/core/deployment/JvmOnlyRecorder.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/core-parent/deployment/src/main/java/io/quarkiverse/jnosql/core/deployment/JvmOnlyRecorder.java b/core-parent/deployment/src/main/java/io/quarkiverse/jnosql/core/deployment/JvmOnlyRecorder.java index f881a31..62d5cea 100644 --- a/core-parent/deployment/src/main/java/io/quarkiverse/jnosql/core/deployment/JvmOnlyRecorder.java +++ b/core-parent/deployment/src/main/java/io/quarkiverse/jnosql/core/deployment/JvmOnlyRecorder.java @@ -1,8 +1,9 @@ package io.quarkiverse.jnosql.core.deployment; -import io.quarkus.runtime.annotations.Recorder; import org.jboss.logging.Logger; +import io.quarkus.runtime.annotations.Recorder; + @Recorder public class JvmOnlyRecorder { private static final Logger LOG = Logger.getLogger(JvmOnlyRecorder.class); From 7293247323a1b20e8eaba7a784b149160eadfe57 Mon Sep 17 00:00:00 2001 From: Maximillian Arruda Date: Tue, 18 Jul 2023 23:17:46 -0300 Subject: [PATCH 21/24] docs: add info about modules that doens't native-compilation support Signed-off-by: Maximillian Arruda --- README.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/README.md b/README.md index e85682e..99ed504 100644 --- a/README.md +++ b/README.md @@ -99,6 +99,8 @@ Please refer to the [Redis Quarkus extension](https://quarkus.io/guides/redis-re Add the dependency to the target project: +:warning: **This extension doesn't support native-compilation** + ```xml io.quarkiverse.jnosql From 9d38b4bad688a0764cda4ea7d2a6c67ba630c3e8 Mon Sep 17 00:00:00 2001 From: Maximillian Arruda Date: Tue, 18 Jul 2023 23:23:09 -0300 Subject: [PATCH 22/24] chore: move JvmOnlyRecord.java to the extension's runtime module Signed-off-by: Maximillian Arruda --- .../io/quarkiverse/jnosql/core/runtime}/JvmOnlyRecorder.java | 3 ++- .../jnosql/keyvalue/couchbase/deployment/Processor.java | 2 +- 2 files changed, 3 insertions(+), 2 deletions(-) rename core-parent/{deployment/src/main/java/io/quarkiverse/jnosql/core/deployment => runtime/src/main/java/io/quarkiverse/jnosql/core/runtime}/JvmOnlyRecorder.java (93%) diff --git a/core-parent/deployment/src/main/java/io/quarkiverse/jnosql/core/deployment/JvmOnlyRecorder.java b/core-parent/runtime/src/main/java/io/quarkiverse/jnosql/core/runtime/JvmOnlyRecorder.java similarity index 93% rename from core-parent/deployment/src/main/java/io/quarkiverse/jnosql/core/deployment/JvmOnlyRecorder.java rename to core-parent/runtime/src/main/java/io/quarkiverse/jnosql/core/runtime/JvmOnlyRecorder.java index 62d5cea..f962f66 100644 --- a/core-parent/deployment/src/main/java/io/quarkiverse/jnosql/core/deployment/JvmOnlyRecorder.java +++ b/core-parent/runtime/src/main/java/io/quarkiverse/jnosql/core/runtime/JvmOnlyRecorder.java @@ -1,4 +1,4 @@ -package io.quarkiverse.jnosql.core.deployment; +package io.quarkiverse.jnosql.core.runtime; import org.jboss.logging.Logger; @@ -6,6 +6,7 @@ @Recorder public class JvmOnlyRecorder { + private static final Logger LOG = Logger.getLogger(JvmOnlyRecorder.class); public JvmOnlyRecorder() { diff --git a/keyvalue-parent/couchbase-parent/deployment/src/main/java/io/quarkiverse/jnosql/keyvalue/couchbase/deployment/Processor.java b/keyvalue-parent/couchbase-parent/deployment/src/main/java/io/quarkiverse/jnosql/keyvalue/couchbase/deployment/Processor.java index 89b7b8f..a90d435 100644 --- a/keyvalue-parent/couchbase-parent/deployment/src/main/java/io/quarkiverse/jnosql/keyvalue/couchbase/deployment/Processor.java +++ b/keyvalue-parent/couchbase-parent/deployment/src/main/java/io/quarkiverse/jnosql/keyvalue/couchbase/deployment/Processor.java @@ -1,6 +1,6 @@ package io.quarkiverse.jnosql.keyvalue.couchbase.deployment; -import io.quarkiverse.jnosql.core.deployment.JvmOnlyRecorder; +import io.quarkiverse.jnosql.core.runtime.JvmOnlyRecorder; import io.quarkus.arc.deployment.AdditionalBeanBuildItem; import io.quarkus.deployment.annotations.BuildProducer; import io.quarkus.deployment.annotations.BuildStep; From d55b7adb043381482ce46ee37ea3e9fee71c3081 Mon Sep 17 00:00:00 2001 From: Maximillian Arruda Date: Tue, 18 Jul 2023 23:34:35 -0300 Subject: [PATCH 23/24] chore: fix import order Signed-off-by: Maximillian Arruda --- .../jnosql/keyvalue/couchbase/deployment/Processor.java | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/keyvalue-parent/couchbase-parent/deployment/src/main/java/io/quarkiverse/jnosql/keyvalue/couchbase/deployment/Processor.java b/keyvalue-parent/couchbase-parent/deployment/src/main/java/io/quarkiverse/jnosql/keyvalue/couchbase/deployment/Processor.java index a90d435..5202620 100644 --- a/keyvalue-parent/couchbase-parent/deployment/src/main/java/io/quarkiverse/jnosql/keyvalue/couchbase/deployment/Processor.java +++ b/keyvalue-parent/couchbase-parent/deployment/src/main/java/io/quarkiverse/jnosql/keyvalue/couchbase/deployment/Processor.java @@ -1,5 +1,8 @@ package io.quarkiverse.jnosql.keyvalue.couchbase.deployment; +import org.eclipse.jnosql.databases.couchbase.communication.QuarkusCouchbaseKeyValueConfiguration; +import org.jboss.logging.Logger; + import io.quarkiverse.jnosql.core.runtime.JvmOnlyRecorder; import io.quarkus.arc.deployment.AdditionalBeanBuildItem; import io.quarkus.deployment.annotations.BuildProducer; @@ -8,8 +11,6 @@ import io.quarkus.deployment.annotations.Record; import io.quarkus.deployment.builditem.FeatureBuildItem; import io.quarkus.deployment.pkg.steps.NativeBuild; -import org.eclipse.jnosql.databases.couchbase.communication.QuarkusCouchbaseKeyValueConfiguration; -import org.jboss.logging.Logger; class Processor { From 81f7a85ab340c079ac3a5ac21cabafa490dccc2d Mon Sep 17 00:00:00 2001 From: Maximillian Arruda Date: Wed, 16 Aug 2023 13:39:34 -0300 Subject: [PATCH 24/24] chore: bump couchbase-parent.version to 3.2.2.0 Signed-off-by: Maximillian Arruda --- keyvalue-parent/couchbase-parent/deployment/pom.xml | 2 +- keyvalue-parent/couchbase-parent/integration-tests/pom.xml | 2 +- keyvalue-parent/couchbase-parent/pom.xml | 2 +- keyvalue-parent/couchbase-parent/runtime/pom.xml | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/keyvalue-parent/couchbase-parent/deployment/pom.xml b/keyvalue-parent/couchbase-parent/deployment/pom.xml index 80c07e5..f53e208 100644 --- a/keyvalue-parent/couchbase-parent/deployment/pom.xml +++ b/keyvalue-parent/couchbase-parent/deployment/pom.xml @@ -4,7 +4,7 @@ io.quarkiverse.jnosql quarkus-jnosql-keyvalue-couchbase-parent - 1.0.6-SNAPSHOT + 3.2.2.0 quarkus-jnosql-keyvalue-couchbase-deployment Quarkus JNoSQL - KeyValue - Couchbase - Deployment diff --git a/keyvalue-parent/couchbase-parent/integration-tests/pom.xml b/keyvalue-parent/couchbase-parent/integration-tests/pom.xml index b8d662c..8014ff6 100644 --- a/keyvalue-parent/couchbase-parent/integration-tests/pom.xml +++ b/keyvalue-parent/couchbase-parent/integration-tests/pom.xml @@ -4,7 +4,7 @@ io.quarkiverse.jnosql quarkus-jnosql-keyvalue-couchbase-parent - 1.0.6-SNAPSHOT + 3.2.2.0 quarkus-jnosql-keyvalue-couchbase-integration-tests Quarkus JNoSQL - KeyValue - Couchbase - Integration Tests diff --git a/keyvalue-parent/couchbase-parent/pom.xml b/keyvalue-parent/couchbase-parent/pom.xml index 91fad13..c0bc3bf 100644 --- a/keyvalue-parent/couchbase-parent/pom.xml +++ b/keyvalue-parent/couchbase-parent/pom.xml @@ -5,7 +5,7 @@ io.quarkiverse.jnosql quarkus-jnosql-keyvalue-parent - 1.0.6-SNAPSHOT + 3.2.2.0 pom diff --git a/keyvalue-parent/couchbase-parent/runtime/pom.xml b/keyvalue-parent/couchbase-parent/runtime/pom.xml index eb087dc..3c267e7 100644 --- a/keyvalue-parent/couchbase-parent/runtime/pom.xml +++ b/keyvalue-parent/couchbase-parent/runtime/pom.xml @@ -4,7 +4,7 @@ io.quarkiverse.jnosql quarkus-jnosql-keyvalue-couchbase-parent - 1.0.6-SNAPSHOT + 3.2.2.0 quarkus-jnosql-keyvalue-couchbase Quarkus JNoSQL - KeyValue - Couchbase - Runtime