Skip to content

Commit 4805337

Browse files
committed
wip: Update Mongo driver to latest version
1 parent 1d04eb7 commit 4805337

File tree

5 files changed

+112
-138
lines changed

5 files changed

+112
-138
lines changed

core/pom.xml

Lines changed: 35 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -8,43 +8,43 @@
88
99
-->
1010
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
11-
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
12-
<modelVersion>4.0.0</modelVersion>
11+
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
12+
<modelVersion>4.0.0</modelVersion>
1313

14-
<parent>
15-
<groupId>org.seedstack.addons.mongodb</groupId>
16-
<artifactId>mongodb</artifactId>
17-
<version>4.0.0-SNAPSHOT</version>
18-
</parent>
14+
<parent>
15+
<groupId>org.seedstack.addons.mongodb</groupId>
16+
<artifactId>mongodb</artifactId>
17+
<version>4.0.0-SNAPSHOT</version>
18+
</parent>
1919

2020
<artifactId>mongodb-core</artifactId>
21-
22-
<dependencies>
23-
<dependency>
24-
<groupId>org.mongodb</groupId>
25-
<artifactId>mongodb-driver-legacy</artifactId>
26-
<version>${mongodb.version}</version>
27-
<scope>provided</scope>
28-
</dependency>
29-
30-
<dependency>
31-
<groupId>org.seedstack.seed</groupId>
32-
<artifactId>seed-testing-junit4</artifactId>
33-
<version>${seed.version}</version>
34-
<scope>test</scope>
35-
</dependency>
36-
<dependency>
37-
<groupId>org.assertj</groupId>
38-
<artifactId>assertj-core</artifactId>
39-
<version>${assertj.version}</version>
40-
<scope>test</scope>
41-
</dependency>
42-
<dependency>
43-
<groupId>ch.qos.logback</groupId>
44-
<artifactId>logback-classic</artifactId>
45-
<version>${logback.version}</version>
46-
<scope>test</scope>
47-
</dependency>
48-
</dependencies>
21+
22+
<dependencies>
23+
<dependency>
24+
<groupId>org.mongodb</groupId>
25+
<artifactId>mongodb-driver-sync</artifactId>
26+
<version>${mongodb.version}</version>
27+
<scope>provided</scope>
28+
</dependency>
29+
30+
<dependency>
31+
<groupId>org.seedstack.seed</groupId>
32+
<artifactId>seed-testing-junit4</artifactId>
33+
<version>${seed.version}</version>
34+
<scope>test</scope>
35+
</dependency>
36+
<dependency>
37+
<groupId>org.assertj</groupId>
38+
<artifactId>assertj-core</artifactId>
39+
<version>${assertj.version}</version>
40+
<scope>test</scope>
41+
</dependency>
42+
<dependency>
43+
<groupId>ch.qos.logback</groupId>
44+
<artifactId>logback-classic</artifactId>
45+
<version>${logback.version}</version>
46+
<scope>test</scope>
47+
</dependency>
48+
</dependencies>
4949

5050
</project>

core/src/main/java/org/seedstack/mongodb/internal/MongoDbManager.java

Lines changed: 62 additions & 90 deletions
Original file line numberDiff line numberDiff line change
@@ -7,38 +7,44 @@
77
*/
88
package org.seedstack.mongodb.internal;
99

10-
import com.google.common.base.Preconditions;
11-
import com.google.inject.Module;
12-
import com.mongodb.AuthenticationMechanism;
13-
import com.mongodb.MongoClient;
14-
import com.mongodb.MongoClientOptions;
15-
import com.mongodb.MongoClientURI;
16-
import com.mongodb.MongoCredential;
17-
import com.mongodb.ServerAddress;
18-
import com.mongodb.client.MongoDatabase;
10+
import java.util.ArrayList;
11+
import java.util.HashMap;
12+
import java.util.List;
13+
import java.util.Map;
14+
import java.util.stream.Collectors;
15+
1916
import org.seedstack.coffig.BuilderSupplier;
2017
import org.seedstack.coffig.Coffig;
2118
import org.seedstack.mongodb.MongoDbConfig;
2219
import org.seedstack.seed.SeedException;
2320
import org.slf4j.Logger;
2421
import org.slf4j.LoggerFactory;
2522

26-
import java.util.ArrayList;
27-
import java.util.HashMap;
28-
import java.util.List;
29-
import java.util.Map;
23+
import com.google.common.base.Preconditions;
24+
import com.google.inject.Module;
25+
import com.mongodb.ConnectionString;
26+
import com.mongodb.MongoClientSettings;
27+
import com.mongodb.ServerAddress;
28+
import com.mongodb.client.MongoClient;
29+
import com.mongodb.client.MongoClients;
30+
import com.mongodb.client.MongoDatabase;
3031

3132
class MongoDbManager {
3233
private static final Logger LOGGER = LoggerFactory.getLogger(MongoDbManager.class);
3334
private final Map<String, MongoClient> mongoClients = new HashMap<>();
3435
private final Map<String, MongoDatabase> mongoDatabases = new HashMap<>();
3536

36-
protected MongoClient doCreateClient(String clientName, MongoDbConfig.ClientConfig clientConfig, Coffig coffig) {
37+
protected MongoClient doCreateClient(
38+
String clientName, MongoDbConfig.ClientConfig clientConfig, Coffig coffig) {
3739
AllOptions allOptions = coffig.get(AllOptions.class, String.format("mongoDb.clients.%s", clientName));
3840
if (clientConfig.isConfiguredByUri()) {
39-
return new MongoClient(new MongoClientURI(clientConfig.getUri(), allOptions.options.get()));
41+
return MongoClients.create(
42+
allOptions.options
43+
.get()
44+
.applyConnectionString(new ConnectionString(clientConfig.getUri()))
45+
.build());
4046
} else {
41-
return createMongoClient(clientName, clientConfig, allOptions.options.get().build());
47+
return createMongoClient(clientName, clientConfig, allOptions.options.get());
4248
}
4349
}
4450

@@ -50,32 +56,26 @@ protected void doClose(MongoClient client) {
5056
client.close();
5157
}
5258

53-
private MongoClient createMongoClient(String clientName, MongoDbConfig.ClientConfig clientConfig,
54-
MongoClientOptions mongoClientOptions) {
59+
private MongoClient createMongoClient(
60+
String clientName,
61+
MongoDbConfig.ClientConfig clientConfig,
62+
MongoClientSettings.Builder mongoClientSettingsBuilder) {
5563
List<ServerAddress> serverAddresses = buildServerAddresses(clientName, clientConfig.getHosts());
5664

5765
if (serverAddresses.isEmpty()) {
5866
throw SeedException.createNew(MongoDbErrorCode.MISSING_HOSTS_CONFIGURATION)
5967
.put("clientName", clientName);
6068
}
6169

62-
MongoCredential mongoCredential = buildMongoCredential(clientName, clientConfig.getCredentials());
63-
if (mongoCredential == null) {
64-
if (serverAddresses.size() == 1) {
65-
return new MongoClient(serverAddresses.get(0), mongoClientOptions);
66-
} else {
67-
return new MongoClient(serverAddresses, mongoClientOptions);
68-
}
69-
} else {
70-
if (serverAddresses.size() == 1) {
71-
return new MongoClient(serverAddresses.get(0), mongoCredential, mongoClientOptions);
72-
} else {
73-
return new MongoClient(serverAddresses, mongoCredential, mongoClientOptions);
74-
}
75-
}
70+
ConnectionString connectionString = buildConnectionString(clientName, serverAddresses,
71+
clientConfig.getCredentials());
72+
73+
return MongoClients.create(mongoClientSettingsBuilder.applyConnectionString(connectionString).build());
74+
7675
}
7776

78-
public void registerClient(String clientName, MongoDbConfig.ClientConfig clientConfig, Coffig coffig) {
77+
public void registerClient(
78+
String clientName, MongoDbConfig.ClientConfig clientConfig, Coffig coffig) {
7979
LOGGER.info("Creating MongoDB client {}", clientName);
8080
mongoClients.put(clientName, doCreateClient(clientName, clientConfig, coffig));
8181
}
@@ -93,7 +93,10 @@ public void shutdown() {
9393
try {
9494
doClose(mongoClientEntry.getValue());
9595
} catch (Exception e) {
96-
LOGGER.error(String.format("Unable to properly close MongoDB client %s", mongoClientEntry.getKey()), e);
96+
LOGGER.error(
97+
String.format(
98+
"Unable to properly close MongoDB client %s", mongoClientEntry.getKey()),
99+
e);
97100
}
98101
}
99102
} finally {
@@ -103,7 +106,29 @@ public void shutdown() {
103106
}
104107

105108
public Module getModule() {
106-
return new MongoDbModule<>(com.mongodb.MongoClient.class, MongoDatabase.class, mongoClients, mongoDatabases);
109+
return new MongoDbModule<>(
110+
com.mongodb.client.MongoClient.class, MongoDatabase.class, mongoClients, mongoDatabases);
111+
}
112+
113+
ConnectionString buildConnectionString(String clientName, List<ServerAddress> serverAddresses,
114+
String mongoCredential) {
115+
116+
StringBuilder builder = new StringBuilder();
117+
builder.append("mongodb://");
118+
119+
if (mongoCredential != null) {
120+
builder.append(mongoCredential);
121+
builder.append("@");
122+
}
123+
if (serverAddresses.size() == 1) {
124+
builder.append(serverAddresses.get(0));
125+
} else {
126+
builder.append(serverAddresses.stream()
127+
.map(x -> x.toString())
128+
.collect(Collectors.joining(",")));
129+
}
130+
LOGGER.info("Connection string", builder);
131+
return new ConnectionString(builder.toString());
107132
}
108133

109134
List<ServerAddress> buildServerAddresses(String clientName, List<String> addresses) {
@@ -127,61 +152,8 @@ List<ServerAddress> buildServerAddresses(String clientName, List<String> address
127152
return serverAddresses;
128153
}
129154

130-
MongoCredential buildMongoCredential(String clientName, String credential) {
131-
if (credential == null || credential.isEmpty()) {
132-
return null;
133-
} else {
134-
String[] elements = credential.split(":", 3);
135-
if (elements.length == 3) {
136-
String[] sourceElements = elements[0].split("/", 2);
137-
if (sourceElements.length == 2) {
138-
return buildMongoCredential(clientName, elements[1], elements[2], sourceElements[1], sourceElements[0]);
139-
} else if (sourceElements.length == 1) {
140-
return buildMongoCredential(clientName, elements[1], elements[2], sourceElements[0], null);
141-
} else {
142-
throw SeedException.createNew(MongoDbErrorCode.INVALID_CREDENTIAL_SYNTAX)
143-
.put("credential", credential)
144-
.put("clientName", clientName);
145-
}
146-
} else {
147-
throw SeedException.createNew(MongoDbErrorCode.INVALID_CREDENTIAL_SYNTAX)
148-
.put("credential", credential)
149-
.put("clientName", clientName);
150-
}
151-
}
152-
}
153-
154-
MongoCredential buildMongoCredential(String clientName, String user, String password, String source, String mechanism) {
155-
if (mechanism != null) {
156-
AuthenticationMechanism authenticationMechanism = AuthenticationMechanism.fromMechanismName(mechanism);
157-
switch (authenticationMechanism) {
158-
case PLAIN:
159-
return MongoCredential.createPlainCredential(user, source, password.toCharArray());
160-
case SCRAM_SHA_1:
161-
return MongoCredential.createScramSha1Credential(user, source, password.toCharArray());
162-
case SCRAM_SHA_256:
163-
return MongoCredential.createScramSha256Credential(user, source, password.toCharArray());
164-
case MONGODB_AWS:
165-
return MongoCredential.createAwsCredential(user, password.toCharArray());
166-
case MONGODB_X509:
167-
return MongoCredential.createMongoX509Credential(user);
168-
case GSSAPI:
169-
return MongoCredential.createGSSAPICredential(user);
170-
default:
171-
throw SeedException.createNew(MongoDbErrorCode.UNSUPPORTED_AUTHENTICATION_MECHANISM)
172-
.put("clientName", clientName)
173-
.put("mechanism", authenticationMechanism.getMechanismName());
174-
}
175-
} else {
176-
return MongoCredential.createCredential(
177-
user,
178-
source,
179-
password.toCharArray()
180-
);
181-
}
182-
}
183-
184155
private static class AllOptions {
185-
private BuilderSupplier<MongoClientOptions.Builder> options = BuilderSupplier.of(MongoClientOptions.builder());
156+
private BuilderSupplier<MongoClientSettings.Builder> options = BuilderSupplier
157+
.of(MongoClientSettings.builder());
186158
}
187159
}

core/src/main/java/org/seedstack/mongodb/internal/MongoDbPlugin.java

Lines changed: 10 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -7,19 +7,21 @@
77
*/
88
package org.seedstack.mongodb.internal;
99

10-
import io.nuun.kernel.api.plugin.InitState;
11-
import io.nuun.kernel.api.plugin.context.InitContext;
10+
import java.util.HashSet;
11+
import java.util.Map;
12+
import java.util.Optional;
13+
import java.util.Set;
14+
1215
import org.seedstack.coffig.Coffig;
1316
import org.seedstack.mongodb.MongoDbConfig;
17+
import org.seedstack.mongodb.MongoDbConfig.ClientConfig;
1418
import org.seedstack.seed.SeedException;
1519
import org.seedstack.seed.core.internal.AbstractSeedPlugin;
1620
import org.slf4j.Logger;
1721
import org.slf4j.LoggerFactory;
1822

19-
import java.util.HashSet;
20-
import java.util.Map;
21-
import java.util.Optional;
22-
import java.util.Set;
23+
import io.nuun.kernel.api.plugin.InitState;
24+
import io.nuun.kernel.api.plugin.context.InitContext;
2325

2426
public class MongoDbPlugin extends AbstractSeedPlugin {
2527
private static final Logger LOGGER = LoggerFactory.getLogger(MongoDbPlugin.class);
@@ -47,9 +49,9 @@ public InitState initialize(InitContext initContext) {
4749

4850
MONGO_DB_MANAGER.registerClient(clientName, clientConfig, coffig);
4951

50-
for (Map.Entry<String, MongoDbConfig.ClientConfig.DatabaseConfig> dbEntry : clientConfig.getDatabases().entrySet()) {
52+
for (Map.Entry<String, ClientConfig.DatabaseConfig> dbEntry : clientConfig.getDatabases().entrySet()) {
5153
String dbName = dbEntry.getKey();
52-
MongoDbConfig.ClientConfig.DatabaseConfig dbConfig = dbEntry.getValue();
54+
ClientConfig.DatabaseConfig dbConfig = dbEntry.getValue();
5355
String alias = Optional.ofNullable(dbConfig.getAlias()).orElse(dbName);
5456

5557
if (allDbNames.contains(alias)) {

core/src/test/java/org/seedstack/mongodb/MongoDbIT.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99

1010
import static org.assertj.core.api.Assertions.assertThat;
1111

12-
import com.mongodb.MongoClient;
12+
import com.mongodb.client.MongoClient;
1313
import com.mongodb.client.MongoDatabase;
1414
import javax.inject.Inject;
1515
import javax.inject.Named;

pom.xml

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@
1414
<parent>
1515
<groupId>org.seedstack.poms</groupId>
1616
<artifactId>parent-internal</artifactId>
17-
<version>4.0.1</version>
17+
<version>4.0.2</version>
1818
</parent>
1919

2020
<groupId>org.seedstack.addons.mongodb</groupId>
@@ -23,9 +23,9 @@
2323
<packaging>pom</packaging>
2424

2525
<properties>
26-
<seed.version>3.12.0</seed.version>
27-
<mongodb.version>4.1.1</mongodb.version>
28-
<morphia.version>1.6.1</morphia.version>
26+
<seed.version>3.14.0</seed.version>
27+
<mongodb.version>5.0.1</mongodb.version>
28+
<morphia.version>2.4.13</morphia.version>
2929
<business.version>4.4.0</business.version>
3030

3131
<compatibility.skip>true</compatibility.skip>

0 commit comments

Comments
 (0)