You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by ja...@apache.org on 2020/09/22 10:48:44 UTC

[camel-quarkus] branch master updated (200b5d6 -> 4e46470)

This is an automated email from the ASF dual-hosted git repository.

jamesnetherton pushed a change to branch master
in repository https://gitbox.apache.org/repos/asf/camel-quarkus.git.


    from 200b5d6  Updated CHANGELOG.md
     new 3fd8d6c  fix(mongodb): support for named clients
     new d64ec11  doc(mongodb): adding named connection
     new 4e46470  feat(mongodb): add test for named client connection

The 3 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.


Summary of changes:
 .../ROOT/pages/reference/extensions/mongodb.adoc   | 23 +++++++++++++++++
 .../deployment/SupportMongoDBProcessor.java        | 23 +++++++++--------
 .../runtime/src/main/doc/configuration.adoc        | 23 +++++++++++++++++
 .../component/mongodb/it/MongoDbResource.java      | 25 +++++++++++++++----
 .../mongodb/it/MongodbGridfsResource.java          | 29 +++++++++++++++++-----
 .../quarkus/component/mongodb/it/MongoDbTest.java  | 19 ++++++++++----
 .../component/mongodb/it/MongoDbTestResource.java  |  2 ++
 .../component/mongodb/it/MongodbGridfsTest.java    | 23 +++++++++++------
 8 files changed, 133 insertions(+), 34 deletions(-)


[camel-quarkus] 01/03: fix(mongodb): support for named clients

Posted by ja...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

jamesnetherton pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/camel-quarkus.git

commit 3fd8d6c155259132e966480b822bbda47bcab74e
Author: Pasquale Congiusti <pa...@gmail.com>
AuthorDate: Wed Sep 2 10:36:24 2020 +0200

    fix(mongodb): support for named clients
    
    Adding the possibility to use @MongoClientName to annotate and name a mongo client and use inside the route.
    
    Closes #1608
---
 .../deployment/SupportMongoDBProcessor.java        | 23 ++++++++++++----------
 1 file changed, 13 insertions(+), 10 deletions(-)

diff --git a/extensions-support/mongodb/deployment/src/main/java/org/apache/camel/quarkus/support/mongodb/deployment/SupportMongoDBProcessor.java b/extensions-support/mongodb/deployment/src/main/java/org/apache/camel/quarkus/support/mongodb/deployment/SupportMongoDBProcessor.java
index ada330c..31b1b95 100644
--- a/extensions-support/mongodb/deployment/src/main/java/org/apache/camel/quarkus/support/mongodb/deployment/SupportMongoDBProcessor.java
+++ b/extensions-support/mongodb/deployment/src/main/java/org/apache/camel/quarkus/support/mongodb/deployment/SupportMongoDBProcessor.java
@@ -35,20 +35,23 @@ class SupportMongoDBProcessor {
     }
 
     @BuildStep
-    void registerCamelMongoClientProducer(
+    void registerCamelMongoClientProducers(
             List<MongoClientBuildItem> mongoClients,
             BuildProducer<CamelRuntimeBeanBuildItem> runtimeBeans) {
 
         for (MongoClientBuildItem mongoClient : mongoClients) {
-            // If there is a default mongo client instance, then bind it to the camel registry
-            // with the default mongo client name used by the camel-mongodb component
-            if (MongoClientBeanUtil.isDefault(mongoClient.getName())) {
-                runtimeBeans.produce(
-                        new CamelRuntimeBeanBuildItem(
-                                "camelMongoClient",
-                                "com.mongodb.client.MongoClient",
-                                mongoClient.getClient()));
-            }
+            String clientName = getMongoClientName(mongoClient.getName());
+            runtimeBeans.produce(
+                    new CamelRuntimeBeanBuildItem(
+                            clientName,
+                            "com.mongodb.client.MongoClient",
+                            mongoClient.getClient()));
         }
     }
+
+    private String getMongoClientName(String clientName) {
+        // Use the default mongo client instance name if it is the default connection
+        return MongoClientBeanUtil.isDefault(clientName) ? "camelMongoClient" : clientName;
+    }
+
 }


[camel-quarkus] 03/03: feat(mongodb): add test for named client connection

Posted by ja...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

jamesnetherton pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/camel-quarkus.git

commit 4e464708a5b646cbfc2817cd922f6b2d11a63068
Author: Pasquale Congiusti <pa...@gmail.com>
AuthorDate: Tue Sep 22 11:24:00 2020 +0200

    feat(mongodb): add test for named client connection
    
    * Included parameterized test to test with either a named or a default MongoDB client connection
    
    Ref #1608
---
 .../component/mongodb/it/MongoDbResource.java      | 25 +++++++++++++++----
 .../mongodb/it/MongodbGridfsResource.java          | 29 +++++++++++++++++-----
 .../quarkus/component/mongodb/it/MongoDbTest.java  | 19 ++++++++++----
 .../component/mongodb/it/MongoDbTestResource.java  |  2 ++
 .../component/mongodb/it/MongodbGridfsTest.java    | 23 +++++++++++------
 5 files changed, 74 insertions(+), 24 deletions(-)

diff --git a/integration-tests/mongodb/src/main/java/org/apache/camel/quarkus/component/mongodb/it/MongoDbResource.java b/integration-tests/mongodb/src/main/java/org/apache/camel/quarkus/component/mongodb/it/MongoDbResource.java
index c859969..43abfe3 100644
--- a/integration-tests/mongodb/src/main/java/org/apache/camel/quarkus/component/mongodb/it/MongoDbResource.java
+++ b/integration-tests/mongodb/src/main/java/org/apache/camel/quarkus/component/mongodb/it/MongoDbResource.java
@@ -27,6 +27,7 @@ import javax.json.JsonArrayBuilder;
 import javax.json.JsonObjectBuilder;
 import javax.ws.rs.Consumes;
 import javax.ws.rs.GET;
+import javax.ws.rs.HeaderParam;
 import javax.ws.rs.POST;
 import javax.ws.rs.Path;
 import javax.ws.rs.PathParam;
@@ -34,25 +35,37 @@ import javax.ws.rs.Produces;
 import javax.ws.rs.core.MediaType;
 import javax.ws.rs.core.Response;
 
+import com.mongodb.client.MongoClient;
 import com.mongodb.client.MongoCursor;
 import com.mongodb.client.MongoIterable;
+import io.quarkus.mongodb.MongoClientName;
 import org.apache.camel.ProducerTemplate;
 import org.bson.Document;
 
 @Path("/mongodb")
 @ApplicationScoped
 public class MongoDbResource {
+
+    static final String DEFAULT_MONGO_CLIENT_NAME = "camelMongoClient";
+    static final String NAMED_MONGO_CLIENT_NAME = "myMongoClient";
+
+    @Inject
+    @MongoClientName(value = NAMED_MONGO_CLIENT_NAME)
+    MongoClient namedMongoClient;
+
     @Inject
     ProducerTemplate producerTemplate;
 
     @POST
     @Path("/collection/{collectionName}")
     @Consumes(MediaType.APPLICATION_JSON)
-    public Response writeToCollection(@PathParam("collectionName") String collectionName, String content)
+    public Response writeToCollection(@PathParam("collectionName") String collectionName, String content,
+            @HeaderParam("mongoClientName") String mongoClientName)
             throws URISyntaxException {
 
         producerTemplate.sendBody(
-                "mongodb:camelMongoClient?database=test&collection=" + collectionName + "&operation=insert&dynamicity=true",
+                String.format("mongodb:%s?database=test&collection=%s&operation=insert&dynamicity=true",
+                        mongoClientName, collectionName),
                 content);
 
         return Response
@@ -64,12 +77,14 @@ public class MongoDbResource {
     @Path("/collection/{collectionName}")
     @Produces(MediaType.APPLICATION_JSON)
     @SuppressWarnings("unchecked")
-    public JsonArray getCollection(@PathParam("collectionName") String collectionName) {
+    public JsonArray getCollection(@PathParam("collectionName") String collectionName,
+            @HeaderParam("mongoClientName") String mongoClientName) {
         JsonArrayBuilder arrayBuilder = Json.createArrayBuilder();
 
         MongoIterable<Document> iterable = producerTemplate.requestBody(
-                "mongodb:camelMongoClient?database=test&collection=" + collectionName
-                        + "&operation=findAll&dynamicity=true&outputType=MongoIterable",
+                String.format(
+                        "mongodb:%s?database=test&collection=%s&operation=findAll&dynamicity=true&outputType=MongoIterable",
+                        mongoClientName, collectionName),
                 null, MongoIterable.class);
 
         MongoCursor<Document> iterator = iterable.iterator();
diff --git a/integration-tests/mongodb/src/main/java/org/apache/camel/quarkus/component/mongodb/it/MongodbGridfsResource.java b/integration-tests/mongodb/src/main/java/org/apache/camel/quarkus/component/mongodb/it/MongodbGridfsResource.java
index 00a06d5..2156141 100644
--- a/integration-tests/mongodb/src/main/java/org/apache/camel/quarkus/component/mongodb/it/MongodbGridfsResource.java
+++ b/integration-tests/mongodb/src/main/java/org/apache/camel/quarkus/component/mongodb/it/MongodbGridfsResource.java
@@ -23,6 +23,7 @@ import java.util.Map;
 import javax.inject.Inject;
 import javax.ws.rs.DELETE;
 import javax.ws.rs.GET;
+import javax.ws.rs.HeaderParam;
 import javax.ws.rs.POST;
 import javax.ws.rs.Path;
 import javax.ws.rs.PathParam;
@@ -31,6 +32,8 @@ import javax.ws.rs.core.MediaType;
 import javax.ws.rs.core.Response;
 
 import com.mongodb.MongoGridFSException;
+import com.mongodb.client.MongoClient;
+import io.quarkus.mongodb.MongoClientName;
 import org.apache.camel.Exchange;
 import org.apache.camel.ProducerTemplate;
 import org.apache.camel.component.mongodb.gridfs.GridFsEndpoint;
@@ -38,18 +41,27 @@ import org.apache.camel.component.mongodb.gridfs.GridFsEndpoint;
 @Path("/mongodb-gridfs")
 public class MongodbGridfsResource {
 
+    static final String DEFAULT_MONGO_CLIENT_NAME = "camelMongoClient";
+    static final String NAMED_MONGO_CLIENT_NAME = "myMongoClient";
+
+    @Inject
+    @MongoClientName(value = NAMED_MONGO_CLIENT_NAME)
+    MongoClient namedMongoClient;
+
     @Inject
     ProducerTemplate producerTemplate;
 
     @Path("/upload/{fileName}")
     @POST
     @Produces(MediaType.TEXT_PLAIN)
-    public Response uploadFile(@PathParam("fileName") String fileName, String content) throws Exception {
+    public Response uploadFile(@PathParam("fileName") String fileName, String content,
+            @HeaderParam("mongoClientName") String mongoClientName) throws Exception {
         Map<String, Object> headers = new HashMap<>();
         headers.put(Exchange.FILE_NAME, fileName);
         headers.put(Exchange.CONTENT_TYPE, "text/plain");
 
-        Exchange result = producerTemplate.request("mongodb-gridfs:camelMongoClient?database=test&operation=create",
+        Exchange result = producerTemplate.request(
+                String.format("mongodb-gridfs:%s?database=test&operation=create", mongoClientName),
                 exchange -> {
                     exchange.getMessage().setHeaders(headers);
                     exchange.getMessage().setBody(content);
@@ -64,10 +76,12 @@ public class MongodbGridfsResource {
     @Path("/get/{fileName}")
     @GET
     @Produces(MediaType.TEXT_PLAIN)
-    public Response retrieveFile(@PathParam("fileName") String fileName) {
+    public Response retrieveFile(@PathParam("fileName") String fileName,
+            @HeaderParam("mongoClientName") String mongoClientName) {
         String result = null;
         try {
-            result = producerTemplate.requestBodyAndHeader("mongodb-gridfs:camelMongoClient?database=test&operation=findOne",
+            result = producerTemplate.requestBodyAndHeader(
+                    String.format("mongodb-gridfs:%s?database=test&operation=findOne", mongoClientName),
                     null,
                     Exchange.FILE_NAME, fileName, String.class);
         } catch (Exception e) {
@@ -80,8 +94,11 @@ public class MongodbGridfsResource {
 
     @Path("/delete/{fileName}")
     @DELETE
-    public Response deleteFile(@PathParam("fileName") String fileName) {
-        producerTemplate.requestBodyAndHeader("mongodb-gridfs:camelMongoClient?database=test&operation=remove", null,
+    public Response deleteFile(@PathParam("fileName") String fileName,
+            @HeaderParam("mongoClientName") String mongoClientName) {
+        producerTemplate.requestBodyAndHeader(
+                String.format("mongodb-gridfs:camelMongoClient?database=test&operation=remove", mongoClientName),
+                null,
                 Exchange.FILE_NAME,
                 fileName);
         return Response.noContent().build();
diff --git a/integration-tests/mongodb/src/test/java/org/apache/camel/quarkus/component/mongodb/it/MongoDbTest.java b/integration-tests/mongodb/src/test/java/org/apache/camel/quarkus/component/mongodb/it/MongoDbTest.java
index 4ed13a7..d30e40e 100644
--- a/integration-tests/mongodb/src/test/java/org/apache/camel/quarkus/component/mongodb/it/MongoDbTest.java
+++ b/integration-tests/mongodb/src/test/java/org/apache/camel/quarkus/component/mongodb/it/MongoDbTest.java
@@ -24,25 +24,34 @@ import io.quarkus.test.junit.QuarkusTest;
 import io.restassured.RestAssured;
 import io.restassured.http.ContentType;
 import io.restassured.path.json.JsonPath;
-import org.junit.jupiter.api.Test;
+import org.junit.jupiter.params.ParameterizedTest;
+import org.junit.jupiter.params.provider.ValueSource;
 
 import static org.junit.jupiter.api.Assertions.assertEquals;
 
 @QuarkusTest
 @QuarkusTestResource(MongoDbTestResource.class)
 class MongoDbTest {
-    @Test
-    public void testMongoDbComponent() {
+    @ParameterizedTest
+    @ValueSource(strings = { MongoDbResource.DEFAULT_MONGO_CLIENT_NAME, MongoDbResource.NAMED_MONGO_CLIENT_NAME })
+    public void testMongoDbComponent(String namedClient) {
+        // As we will create a route for each client, we use a different collection for each route
+        String collectionName = String.format("%sCamelTest", namedClient);
+
         // Write to collection
         RestAssured.given()
                 .contentType(ContentType.JSON)
                 .body("{message:\"Hello Camel Quarkus Mongo DB\"}")
-                .post("/mongodb/collection/camelTest")
+                .header("mongoClientName", namedClient)
+                .post("/mongodb/collection/" + collectionName)
                 .then()
                 .statusCode(201);
 
         // Retrieve from collection
-        JsonPath jsonPath = RestAssured.get("/mongodb/collection/camelTest")
+        JsonPath jsonPath = RestAssured
+                .given()
+                .header("mongoClientName", namedClient)
+                .get("/mongodb/collection/" + collectionName)
                 .then()
                 .contentType(ContentType.JSON)
                 .statusCode(200)
diff --git a/integration-tests/mongodb/src/test/java/org/apache/camel/quarkus/component/mongodb/it/MongoDbTestResource.java b/integration-tests/mongodb/src/test/java/org/apache/camel/quarkus/component/mongodb/it/MongoDbTestResource.java
index cbbf45d..729ac8c 100644
--- a/integration-tests/mongodb/src/test/java/org/apache/camel/quarkus/component/mongodb/it/MongoDbTestResource.java
+++ b/integration-tests/mongodb/src/test/java/org/apache/camel/quarkus/component/mongodb/it/MongoDbTestResource.java
@@ -47,6 +47,8 @@ public class MongoDbTestResource implements ContainerResourceLifecycleManager {
 
             return CollectionHelper.mapOf(
                     "quarkus.mongodb.hosts",
+                    container.getContainerIpAddress() + ":" + container.getMappedPort(MONGODB_PORT).toString(),
+                    "quarkus.mongodb." + MongoDbResource.NAMED_MONGO_CLIENT_NAME + ".hosts",
                     container.getContainerIpAddress() + ":" + container.getMappedPort(MONGODB_PORT).toString());
         } catch (Exception e) {
             throw new RuntimeException(e);
diff --git a/integration-tests/mongodb/src/test/java/org/apache/camel/quarkus/component/mongodb/it/MongodbGridfsTest.java b/integration-tests/mongodb/src/test/java/org/apache/camel/quarkus/component/mongodb/it/MongodbGridfsTest.java
index 4aef1e9..0f7bea9 100644
--- a/integration-tests/mongodb/src/test/java/org/apache/camel/quarkus/component/mongodb/it/MongodbGridfsTest.java
+++ b/integration-tests/mongodb/src/test/java/org/apache/camel/quarkus/component/mongodb/it/MongodbGridfsTest.java
@@ -21,7 +21,8 @@ import io.quarkus.test.junit.QuarkusTest;
 import io.restassured.RestAssured;
 import io.restassured.http.ContentType;
 import org.junit.jupiter.api.Assertions;
-import org.junit.jupiter.api.Test;
+import org.junit.jupiter.params.ParameterizedTest;
+import org.junit.jupiter.params.provider.ValueSource;
 
 import static org.hamcrest.Matchers.is;
 
@@ -29,15 +30,18 @@ import static org.hamcrest.Matchers.is;
 @QuarkusTestResource(MongoDbTestResource.class)
 class MongodbGridfsTest {
 
-    @Test
-    public void testMongodbGridfsComponent() {
-        final String fileContent = "Hello Camel Quarkus MongoDB GridFS";
+    @ParameterizedTest
+    @ValueSource(strings = { MongodbGridfsResource.DEFAULT_MONGO_CLIENT_NAME, MongodbGridfsResource.NAMED_MONGO_CLIENT_NAME })
+    public void testMongodbGridfsComponent(String namedClient) {
+        final String fileContent = "Hello Camel Quarkus MongoDB GridFS [" + namedClient + "]";
+        final String fileName = namedClient + "-test.txt";
 
         // Upload file
         String objectId = RestAssured.given()
                 .contentType(ContentType.TEXT)
                 .body(fileContent)
-                .post("/mongodb-gridfs/upload/test.txt")
+                .header("mongoClientName", namedClient)
+                .post("/mongodb-gridfs/upload/" + fileName)
                 .then()
                 .statusCode(201)
                 .extract()
@@ -48,20 +52,23 @@ class MongodbGridfsTest {
 
         // Retrieve file
         RestAssured.given()
-                .get("/mongodb-gridfs/get/test.txt")
+                .header("mongoClientName", namedClient)
+                .get("/mongodb-gridfs/get/" + fileName)
                 .then()
                 .statusCode(200)
                 .body(is(fileContent));
 
         // Delete file
         RestAssured.given()
-                .delete("/mongodb-gridfs/delete/test.txt")
+                .header("mongoClientName", namedClient)
+                .delete("/mongodb-gridfs/delete/" + fileName)
                 .then()
                 .statusCode(204);
 
         // Verify file deletion
         RestAssured.given()
-                .get("/mongodb-gridfs/get/test.txt")
+                .header("mongoClientName", namedClient)
+                .get("/mongodb-gridfs/get/" + fileName)
                 .then()
                 .statusCode(404);
     }


[camel-quarkus] 02/03: doc(mongodb): adding named connection

Posted by ja...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

jamesnetherton pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/camel-quarkus.git

commit d64ec112594a079ca281e7c438cb692c7acd3231
Author: Pasquale Congiusti <pa...@gmail.com>
AuthorDate: Fri Sep 4 11:21:31 2020 +0200

    doc(mongodb): adding named connection
    
    Adding documentation to explain how to configure a named MongoDB client connection
    
    Ref #1608
---
 .../ROOT/pages/reference/extensions/mongodb.adoc   | 23 ++++++++++++++++++++++
 .../runtime/src/main/doc/configuration.adoc        | 23 ++++++++++++++++++++++
 2 files changed, 46 insertions(+)

diff --git a/docs/modules/ROOT/pages/reference/extensions/mongodb.adoc b/docs/modules/ROOT/pages/reference/extensions/mongodb.adoc
index d73a860..bdb362d 100644
--- a/docs/modules/ROOT/pages/reference/extensions/mongodb.adoc
+++ b/docs/modules/ROOT/pages/reference/extensions/mongodb.adoc
@@ -45,3 +45,26 @@ The Camel Quarkus MongoDB extension automatically registers a MongoDB client bea
     from("direct:start")
     .to("mongodb:camelMongoClient?database=myDb&collection=myCollection&operation=findAll")
 
+You can also create a "named" client and reference in your route by injecting a client and the related configuration as explained in the https://quarkus.io/guides/mongodb#named-mongo-client-injection[Quarkus MongoDB extension client injection]. For example:
+
+....
+//application.properties
+quarkus.mongodb.mongoClient1.connection-string = mongodb://root:example@localhost:27017/
+....
+....
+//Routes.java
+
+    @ApplicationScoped
+    public class Routes extends RouteBuilder {
+        @Inject
+        @MongoClientName("mongoClient1")
+        MongoClient mongoClient1;
+
+        @Override
+        public void configure() throws Exception {
+            from("direct:start")
+                    .to("mongodb:mongoClient1?database=myDb&collection=myCollection&operation=findAll");
+        }
+    }
+....
+
diff --git a/extensions/mongodb/runtime/src/main/doc/configuration.adoc b/extensions/mongodb/runtime/src/main/doc/configuration.adoc
index 31338d1..cfc40dd 100644
--- a/extensions/mongodb/runtime/src/main/doc/configuration.adoc
+++ b/extensions/mongodb/runtime/src/main/doc/configuration.adoc
@@ -6,3 +6,26 @@ The Camel Quarkus MongoDB extension automatically registers a MongoDB client bea
 
     from("direct:start")
     .to("mongodb:camelMongoClient?database=myDb&collection=myCollection&operation=findAll")
+
+You can also create a "named" client and reference in your route by injecting a client and the related configuration as explained in the https://quarkus.io/guides/mongodb#named-mongo-client-injection[Quarkus MongoDB extension client injection]. For example:
+
+....
+//application.properties
+quarkus.mongodb.mongoClient1.connection-string = mongodb://root:example@localhost:27017/
+....
+....
+//Routes.java
+
+    @ApplicationScoped
+    public class Routes extends RouteBuilder {
+        @Inject
+        @MongoClientName("mongoClient1")
+        MongoClient mongoClient1;
+
+        @Override
+        public void configure() throws Exception {
+            from("direct:start")
+                    .to("mongodb:mongoClient1?database=myDb&collection=myCollection&operation=findAll");
+        }
+    }
+....
\ No newline at end of file