This is an automated email from the ASF dual-hosted git repository. jamesnetherton pushed a commit to branch camel-master in repository https://gitbox.apache.org/repos/asf/camel-quarkus.git
commit c412d3412191c1bae6c7e069977a08d83bd6e085 Author: James Netherton <jamesnether...@gmail.com> AuthorDate: Thu Jan 23 15:11:07 2020 +0000 Fix incompatibilities between Quarkus and Camel MongoDB dependencies fixes #544, #649 --- .../mongodb/deployment/MongoDbProcessor.java | 12 +- extensions/mongodb/runtime/pom.xml | 4 +- .../component/mongodb/CamelMongoClient.java | 124 --------------------- .../mongodb/CamelMongoClientRecorder.java | 29 ----- .../graal/SubstituteMongoClientOptions.java | 43 ------- .../component/mongodb/it/MongoDbResource.java | 20 ++-- .../component/mongodb/it/MongoDbTestResource.java | 4 +- pom.xml | 8 ++ poms/bom/pom.xml | 25 +++++ 9 files changed, 51 insertions(+), 218 deletions(-) diff --git a/extensions/mongodb/deployment/src/main/java/org/apache/camel/quarkus/component/mongodb/deployment/MongoDbProcessor.java b/extensions/mongodb/deployment/src/main/java/org/apache/camel/quarkus/component/mongodb/deployment/MongoDbProcessor.java index 00abff7..55051fb 100644 --- a/extensions/mongodb/deployment/src/main/java/org/apache/camel/quarkus/component/mongodb/deployment/MongoDbProcessor.java +++ b/extensions/mongodb/deployment/src/main/java/org/apache/camel/quarkus/component/mongodb/deployment/MongoDbProcessor.java @@ -1,3 +1,4 @@ + /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with @@ -20,12 +21,9 @@ import java.util.List; 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 io.quarkus.mongodb.deployment.MongoClientBuildItem; import io.quarkus.mongodb.runtime.MongoClientRecorder; -import org.apache.camel.quarkus.component.mongodb.CamelMongoClientRecorder; import org.apache.camel.quarkus.core.deployment.CamelRuntimeBeanBuildItem; class MongoDbProcessor { @@ -38,11 +36,9 @@ class MongoDbProcessor { } @BuildStep - @Record(ExecutionTime.RUNTIME_INIT) void registerCamelMongoClientProducer( List<MongoClientBuildItem> mongoClients, - BuildProducer<CamelRuntimeBeanBuildItem> runtimeBeans, - CamelMongoClientRecorder recorder) { + BuildProducer<CamelRuntimeBeanBuildItem> runtimeBeans) { for (MongoClientBuildItem mongoClient : mongoClients) { // If there is a default mongo client instance, then bind it to the camel registry @@ -51,8 +47,8 @@ class MongoDbProcessor { runtimeBeans.produce( new CamelRuntimeBeanBuildItem( "camelMongoClient", - "com.mongodb.MongoClient", - recorder.createCamelMongoClient(mongoClients.get(0).getClient()))); + "com.mongodb.client.MongoClient", + mongoClients.get(0).getClient())); } } } diff --git a/extensions/mongodb/runtime/pom.xml b/extensions/mongodb/runtime/pom.xml index 8cf892f..2517e80 100644 --- a/extensions/mongodb/runtime/pom.xml +++ b/extensions/mongodb/runtime/pom.xml @@ -63,8 +63,8 @@ <artifactId>mongodb-driver-legacy</artifactId> </dependency> <dependency> - <groupId>org.graalvm.nativeimage</groupId> - <artifactId>svm</artifactId> + <groupId>org.mongodb</groupId> + <artifactId>mongodb-crypt</artifactId> </dependency> </dependencies> diff --git a/extensions/mongodb/runtime/src/main/java/org/apache/camel/quarkus/component/mongodb/CamelMongoClient.java b/extensions/mongodb/runtime/src/main/java/org/apache/camel/quarkus/component/mongodb/CamelMongoClient.java deleted file mode 100644 index a2f515f..0000000 --- a/extensions/mongodb/runtime/src/main/java/org/apache/camel/quarkus/component/mongodb/CamelMongoClient.java +++ /dev/null @@ -1,124 +0,0 @@ -/* - * 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 org.apache.camel.quarkus.component.mongodb; - -import java.util.List; - -import com.mongodb.ClientSessionOptions; -import com.mongodb.client.ChangeStreamIterable; -import com.mongodb.client.ClientSession; -import com.mongodb.client.ListDatabasesIterable; -import com.mongodb.client.MongoClient; -import com.mongodb.client.MongoDatabase; -import com.mongodb.client.MongoIterable; -import org.bson.Document; -import org.bson.conversions.Bson; - -/** - * Bridges Mongo client types {@link com.mongodb.MongoClient} and {@link com.mongodb.client.MongoClient} used by the - * Quarkus Mongo extension and the Camel MongoDB component, so that it can be looked up and used via the - * connectionBean URI endpoint path parameter - */ -public final class CamelMongoClient extends com.mongodb.MongoClient { - - private final MongoClient delegate; - - public CamelMongoClient(MongoClient delegate) { - this.delegate = delegate; - } - - @Override - public MongoDatabase getDatabase(String databaseName) { - return delegate.getDatabase(databaseName); - } - - @Override - public ClientSession startSession() { - return delegate.startSession(); - } - - @Override - public ClientSession startSession(ClientSessionOptions options) { - return delegate.startSession(options); - } - - @Override - public void close() { - delegate.close(); - } - - @Override - public MongoIterable<String> listDatabaseNames() { - return delegate.listDatabaseNames(); - } - - @Override - public ListDatabasesIterable<Document> listDatabases(ClientSession clientSession) { - return delegate.listDatabases(clientSession); - } - - @Override - public <T> ListDatabasesIterable<T> listDatabases(ClientSession clientSession, Class<T> clazz) { - return delegate.listDatabases(clientSession, clazz); - } - - @Override - public <T> ListDatabasesIterable<T> listDatabases(Class<T> clazz) { - return delegate.listDatabases(clazz); - } - - @Override - public ChangeStreamIterable<Document> watch() { - return delegate.watch(); - } - - @Override - public ChangeStreamIterable<Document> watch(List<? extends Bson> pipeline) { - return delegate.watch(pipeline); - } - - @Override - public ChangeStreamIterable<Document> watch(ClientSession clientSession) { - return delegate.watch(clientSession); - } - - @Override - public ChangeStreamIterable<Document> watch(ClientSession clientSession, List<? extends Bson> pipeline) { - return delegate.watch(clientSession, pipeline); - } - - @Override - public <TResult> ChangeStreamIterable<TResult> watch(Class<TResult> resultClass) { - return delegate.watch(resultClass); - } - - @Override - public <TResult> ChangeStreamIterable<TResult> watch(List<? extends Bson> pipeline, Class<TResult> resultClass) { - return delegate.watch(pipeline, resultClass); - } - - @Override - public <TResult> ChangeStreamIterable<TResult> watch(ClientSession clientSession, Class<TResult> resultClass) { - return delegate.watch(clientSession, resultClass); - } - - @Override - public <TResult> ChangeStreamIterable<TResult> watch(ClientSession clientSession, List<? extends Bson> pipeline, - Class<TResult> resultClass) { - return delegate.watch(clientSession, pipeline, resultClass); - } -} diff --git a/extensions/mongodb/runtime/src/main/java/org/apache/camel/quarkus/component/mongodb/CamelMongoClientRecorder.java b/extensions/mongodb/runtime/src/main/java/org/apache/camel/quarkus/component/mongodb/CamelMongoClientRecorder.java deleted file mode 100644 index 371f72a..0000000 --- a/extensions/mongodb/runtime/src/main/java/org/apache/camel/quarkus/component/mongodb/CamelMongoClientRecorder.java +++ /dev/null @@ -1,29 +0,0 @@ -/* - * 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 org.apache.camel.quarkus.component.mongodb; - -import com.mongodb.client.MongoClient; -import io.quarkus.runtime.RuntimeValue; -import io.quarkus.runtime.annotations.Recorder; - -@Recorder -public class CamelMongoClientRecorder { - - public RuntimeValue<CamelMongoClient> createCamelMongoClient(RuntimeValue<MongoClient> client) { - return new RuntimeValue<>(new CamelMongoClient(client.getValue())); - } -} diff --git a/extensions/mongodb/runtime/src/main/java/org/apache/camel/quarkus/component/mongodb/graal/SubstituteMongoClientOptions.java b/extensions/mongodb/runtime/src/main/java/org/apache/camel/quarkus/component/mongodb/graal/SubstituteMongoClientOptions.java deleted file mode 100644 index fbbc855..0000000 --- a/extensions/mongodb/runtime/src/main/java/org/apache/camel/quarkus/component/mongodb/graal/SubstituteMongoClientOptions.java +++ /dev/null @@ -1,43 +0,0 @@ -/* - * 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 org.apache.camel.quarkus.component.mongodb.graal; - -import javax.net.SocketFactory; - -import com.mongodb.MongoClientOptions; -import com.oracle.svm.core.annotate.Alias; -import com.oracle.svm.core.annotate.Substitute; -import com.oracle.svm.core.annotate.TargetClass; - -@TargetClass(MongoClientOptions.class) -final class SubstituteMongoClientOptions { - - @Alias - private SocketFactory socketFactory; - - @Alias - private static SocketFactory DEFAULT_SOCKET_FACTORY; - - @Substitute - public SocketFactory getSocketFactory() { - if (this.socketFactory != null) { - return this.socketFactory; - } else { - return DEFAULT_SOCKET_FACTORY; - } - } -} 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 dbde877..4e11a93 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 @@ -19,9 +19,9 @@ package org.apache.camel.quarkus.component.mongodb.it; import java.net.URI; import java.net.URISyntaxException; +import javax.annotation.PostConstruct; import javax.enterprise.context.ApplicationScoped; import javax.inject.Inject; -import javax.inject.Named; import javax.json.Json; import javax.json.JsonArray; import javax.json.JsonArrayBuilder; @@ -35,7 +35,7 @@ import javax.ws.rs.Produces; import javax.ws.rs.core.MediaType; import javax.ws.rs.core.Response; -import com.mongodb.MongoClient; +import com.mongodb.client.MongoClient; import com.mongodb.client.MongoCursor; import com.mongodb.client.MongoIterable; import org.apache.camel.ProducerTemplate; @@ -47,6 +47,14 @@ public class MongoDbResource { @Inject ProducerTemplate producerTemplate; + @Inject + MongoClient client; + + @PostConstruct + public void init() { + producerTemplate.getCamelContext().getRegistry().bind("camelMongoClient", client); + } + @POST @Path("/collection/{collectionName}") @Consumes(MediaType.APPLICATION_JSON) @@ -84,12 +92,4 @@ public class MongoDbResource { return arrayBuilder.build(); } - - @javax.enterprise.inject.Produces - @Named("camelMongoClient") - public MongoClient camelMongoClient() { - return new MongoClient( - System.getProperty("camel.mongodb.test-host"), - Integer.getInteger("camel.mongodb.test-port")); - } } 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 b7a915f..cbbf45d 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 @@ -46,8 +46,8 @@ public class MongoDbTestResource implements ContainerResourceLifecycleManager { container.start(); return CollectionHelper.mapOf( - "camel.mongodb.test-port", container.getMappedPort(MONGODB_PORT).toString(), - "camel.mongodb.test-host", container.getContainerIpAddress()); + "quarkus.mongodb.hosts", + container.getContainerIpAddress() + ":" + container.getMappedPort(MONGODB_PORT).toString()); } catch (Exception e) { throw new RuntimeException(e); } diff --git a/pom.xml b/pom.xml index 3228e1a..6d63464 100644 --- a/pom.xml +++ b/pom.xml @@ -58,6 +58,14 @@ <consul-client.version>1.3.3</consul-client.version> <stax2.version>4.2</stax2.version> + <!-- These mongodb version properties should align with the Mongo client version used in Camel + TODO: Remove when Quarkus has upgraded its MongoDB client dependencies + - https://github.com/quarkusio/quarkus/issues/6418 + - https://github.com/quarkusio/quarkus/pull/6347 + --> + <mongodb.version>3.12.1</mongodb.version> + <mongodb-crypt.version>1.0.1</mongodb-crypt.version> + <maven-compiler-plugin.version>3.8.0</maven-compiler-plugin.version> <maven.compiler.target>1.8</maven.compiler.target> <maven.compiler.source>1.8</maven.compiler.source> diff --git a/poms/bom/pom.xml b/poms/bom/pom.xml index 2e2052f..929ca76 100644 --- a/poms/bom/pom.xml +++ b/poms/bom/pom.xml @@ -1087,6 +1087,31 @@ <version>${kotlin.version}</version> </dependency> <dependency> + <groupId>org.mongodb</groupId> + <artifactId>mongodb-crypt</artifactId> + <version>${mongodb-crypt.version}</version> + </dependency> + <dependency> + <groupId>org.mongodb</groupId> + <artifactId>mongodb-driver-async</artifactId> + <version>${mongodb.version}</version> + </dependency> + <dependency> + <groupId>org.mongodb</groupId> + <artifactId>mongodb-driver-core</artifactId> + <version>${mongodb.version}</version> + </dependency> + <dependency> + <groupId>org.mongodb</groupId> + <artifactId>mongodb-driver-legacy</artifactId> + <version>${mongodb.version}</version> + </dependency> + <dependency> + <groupId>org.mongodb</groupId> + <artifactId>mongodb-driver-sync</artifactId> + <version>${mongodb.version}</version> + </dependency> + <dependency> <groupId>org.springframework</groupId> <artifactId>spring-core</artifactId> <version>${spring.version}</version>