diff --git a/pom.xml b/pom.xml index 366786fc6d..ff933b04a7 100644 --- a/pom.xml +++ b/pom.xml @@ -5,7 +5,7 @@ org.springframework.data spring-data-mongodb-parent - 4.2.0-SNAPSHOT + 4.2.x-4393-SNAPSHOT pom Spring Data MongoDB diff --git a/spring-data-mongodb-benchmarks/pom.xml b/spring-data-mongodb-benchmarks/pom.xml index 2de4b6b635..d569ebe5c7 100644 --- a/spring-data-mongodb-benchmarks/pom.xml +++ b/spring-data-mongodb-benchmarks/pom.xml @@ -7,7 +7,7 @@ org.springframework.data spring-data-mongodb-parent - 4.2.0-SNAPSHOT + 4.2.x-4393-SNAPSHOT ../pom.xml diff --git a/spring-data-mongodb-distribution/pom.xml b/spring-data-mongodb-distribution/pom.xml index 41b81f9aa6..c4a6f00b8f 100644 --- a/spring-data-mongodb-distribution/pom.xml +++ b/spring-data-mongodb-distribution/pom.xml @@ -15,7 +15,7 @@ org.springframework.data spring-data-mongodb-parent - 4.2.0-SNAPSHOT + 4.2.x-4393-SNAPSHOT ../pom.xml diff --git a/spring-data-mongodb/pom.xml b/spring-data-mongodb/pom.xml index dc07f13ccc..105d094c65 100644 --- a/spring-data-mongodb/pom.xml +++ b/spring-data-mongodb/pom.xml @@ -13,7 +13,7 @@ org.springframework.data spring-data-mongodb-parent - 4.2.0-SNAPSHOT + 4.2.x-4393-SNAPSHOT ../pom.xml @@ -104,6 +104,12 @@ ${mongo} true + + org.mongodb + mongodb-driver-kotlin-sync + ${mongo} + true + org.mongodb @@ -111,6 +117,12 @@ ${mongo.reactivestreams} true + + org.mongodb + mongodb-driver-kotlin-coroutine + ${mongo} + true + org.mongodb diff --git a/spring-data-mongodb/src/main/kotlin/org/springframework/data/mongodb/core/SimpleMongoClientDatabaseFactoryExtension.kt b/spring-data-mongodb/src/main/kotlin/org/springframework/data/mongodb/core/SimpleMongoClientDatabaseFactoryExtension.kt new file mode 100644 index 0000000000..c423cbe9d9 --- /dev/null +++ b/spring-data-mongodb/src/main/kotlin/org/springframework/data/mongodb/core/SimpleMongoClientDatabaseFactoryExtension.kt @@ -0,0 +1,32 @@ +/* + * Copyright 2023 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://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.springframework.data.mongodb.core + +import com.mongodb.kotlin.client.MongoClient +import org.springframework.beans.DirectFieldAccessor + +/** + * Extension for [SimpleMongoClientDatabaseFactory] that accepts a [MongoClient]. + * + * @author Christoph Strobl + * @since 4.2 + */ +fun SimpleMongoClientDatabaseFactory(client: MongoClient, database: String): SimpleMongoClientDatabaseFactory = + SimpleMongoClientDatabaseFactory( + DirectFieldAccessor(client).getPropertyValue("wrapped") as com.mongodb.client.MongoClient, + database + ) diff --git a/spring-data-mongodb/src/main/kotlin/org/springframework/data/mongodb/core/SimpleReactiveMongoDatabaseFactoryExtension.kt b/spring-data-mongodb/src/main/kotlin/org/springframework/data/mongodb/core/SimpleReactiveMongoDatabaseFactoryExtension.kt new file mode 100644 index 0000000000..82fe0cfca0 --- /dev/null +++ b/spring-data-mongodb/src/main/kotlin/org/springframework/data/mongodb/core/SimpleReactiveMongoDatabaseFactoryExtension.kt @@ -0,0 +1,32 @@ +/* + * Copyright 2023 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://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.springframework.data.mongodb.core + +import com.mongodb.kotlin.client.coroutine.MongoClient +import org.springframework.beans.DirectFieldAccessor + +/** + * Extension for [SimpleReactiveMongoDatabaseFactory] that accepts a [MongoClient]. + * + * @author Christoph Strobl + * @since 4.2 + */ +fun SimpleReactiveMongoDatabaseFactory(client: MongoClient, database: String): SimpleReactiveMongoDatabaseFactory = + SimpleReactiveMongoDatabaseFactory( + DirectFieldAccessor(client).getPropertyValue("wrapped") as com.mongodb.reactivestreams.client.MongoClient, + database + ) diff --git a/spring-data-mongodb/src/test/kotlin/org/springframework/data/mongodb/core/SimpleMongoClientDatabaseFactoryExtensionTests.kt b/spring-data-mongodb/src/test/kotlin/org/springframework/data/mongodb/core/SimpleMongoClientDatabaseFactoryExtensionTests.kt new file mode 100644 index 0000000000..62ca03ef3d --- /dev/null +++ b/spring-data-mongodb/src/test/kotlin/org/springframework/data/mongodb/core/SimpleMongoClientDatabaseFactoryExtensionTests.kt @@ -0,0 +1,36 @@ +/* + * Copyright 2023 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://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.springframework.data.mongodb.core + +import com.mongodb.kotlin.client.MongoClient +import org.bson.Document +import org.junit.jupiter.api.Test +import org.springframework.data.mongodb.test.util.Assertions.assertThat + +/** + * @author Christoph Strobl + */ +class SimpleMongoClientDatabaseFactoryExtensionTests { + + @Test // GH-4393 + fun `extension allows to create SimpleMongoClientDatabaseFactory with a Kotlin Driver instance`() { + + val factory = SimpleMongoClientDatabaseFactory(MongoClient.create(), "test") + + assertThat(factory.mongoDatabase.runCommand(Document("ping", 1))).containsKey("ok") + } +} diff --git a/spring-data-mongodb/src/test/kotlin/org/springframework/data/mongodb/core/SimpleReactiveMongoDatabaseFactoryExtensionTests.kt b/spring-data-mongodb/src/test/kotlin/org/springframework/data/mongodb/core/SimpleReactiveMongoDatabaseFactoryExtensionTests.kt new file mode 100644 index 0000000000..9d3c4c3ea6 --- /dev/null +++ b/spring-data-mongodb/src/test/kotlin/org/springframework/data/mongodb/core/SimpleReactiveMongoDatabaseFactoryExtensionTests.kt @@ -0,0 +1,40 @@ +/* + * Copyright 2023 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://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.springframework.data.mongodb.core + +import com.mongodb.kotlin.client.coroutine.MongoClient +import org.bson.Document +import org.junit.jupiter.api.Test +import reactor.core.publisher.Mono +import reactor.test.StepVerifier + +/** + * @author Christoph Strobl + */ +class SimpleReactiveMongoDatabaseFactoryExtensionTests { + + @Test // GH-4393 + fun `extension allows to create SimpleReactiveMongoDatabaseFactory with a Kotlin Coroutine Driver instance`() { + + val factory = SimpleReactiveMongoDatabaseFactory(MongoClient.create(), "test") + + factory.mongoDatabase.flatMap { Mono.from(it.runCommand(Document("ping", 1))) } + .`as` { StepVerifier.create(it) } + .expectNextCount(1) + .verifyComplete() + } +}